Ignorer la navigation

Partie 4 : révision de la programmation (structures algorithmiques, variables, …) à partir de programmes Arduino

  Nous allons travailler à  partir de programmes Arduino comme ceux que l'on a vu en TP



Exercice 1 : allumage d'une led

soit le montage suivant :



Le programme proposé :

// définition des variables
led_pin = ……. ;  // …………….

void setup()
{
     pinMode(led_pin, OUTPUT);  // Pin 13 has an LED connected on Arduino boards:
}

void loop()
{
  digitalWrite(led_pin, HIGH);   // ……………..
  delay(1000);              // ……………...
  digitalWrite(led_pin, LOW);    // …………………...
  delay(1000);              // ………………...
}

Données techniques :
digitalWrite()            Write a HIGH or a LOW value to a digital pin.
If the pin has been configured as an OUTPUT with pinMode(), its voltage will be set to the corresponding value: 5V for HIGH, 0V (ground) for LOW.

PinMode()     Configures the specified pin to behave either as an input or an output

delay()    Pauses the program for the amount of time (in miliseconds) specified as parameter.

  Syntax : delay(ms)

   Parameters : ms: the number of milliseconds to pause (unsigned long) 


1. Rajoutez les commentaires manquants (pointillés) dans le programme

2. Expliquez, en détail, ce que va faire le programme
 

 

Modifications N°1: ajout d'une 2ème Led et nouveau câblage

 

Voici le nouveau câblage de notre carte Arduino:

3. Faire le programme Arduino qui fait clignoter les 2 Leds en même temps (à la même fréquence de 1 Hz).

4. Maintenant les 2 Leds clignotent à des fréquences différentes (vert à 1 Hz, rouge à 0,5 Hz). Faire le programme.

 

 

Modifications N°2: ajout d'un BP (bouton poussoir) et nouveau fonctionnement

Voici le nouveau câblage de notre carte Arduino:

 

Données techniques :

if / else

if/else allows greater control over the flow of code than the basic if statement, by allowing multiple tests to be grouped together. For example, an analog input could be tested and one action taken if the input was less than 500, and another action taken if the input was 500 or greater. The code would look like this:

if (pinFiveInput < 500)
{
   // action A
}
else
{
   // action B
}

digitalRead()

Reads the value from a specified digital pin, either HIGH or LOW.
  Syntax: digitalRead(pin)
  Parameters: pin: the number of the digital pin you want to read (int)
  Returns : HIGH or LOW

Exemple:

int inPin = 7; // pushbutton connected to digital pin 7
int val = 0; // variable to store the read value

void setup()
{
  pinMode(inPin, INPUT); // sets the digital pin 7 as input
}

void loop()
{
  val = digitalRead(inPin); // read the input pin
   …..
}

 

Fonctionnement: la led verte clignote tout le temps (fréquence 1 Hz). La led rouge clignote (fréquence 1 Hz) quand le bouton poussoir est appuyé.

 

5. Faire le programme correspondant au fonctionnement demandé

 

 

 

Exercice 2 : révision des différents types de variables

Données techniques :

Some arduino data Type :

Arduino data type

Value assigned

Values ranges

Description or example

boolean

8 bit

True or False (1/0)

A data type that takes up 1 byte of memory that stores a character value. Character literals are written in single quotes, like this: 'A'

ex : boolean test = false;

byte

8 bit

0 to 255

unsigned number

char

8 bit

-127 to 128

A data type that takes up 1 byte of memory that stores a character value. Character literals are written in single quotes, like this: 'A'

ex : char myChar = 'A';

char myChar = 65; // both are equivalent

word

16 bit

0 to 65535

unsigned number

int

16 bit

-32768 to 32767

Integers numbers

Unsigned int

16 bit

0 to 65535

unsigned integers

long

32 bit

-2147483648 to 2147483647

Integers numbers

float

32 bit

-3,428235.1038 to 3,4028235.1038

floating-point numbers

digitalRead()            Reads the value from a specified digital pin, either HIGH or LOW.
the pin must have been configured as an INPUT with pinMode() in the Setup()


Soit le montage suivant :

bouton poussoir
résistance de 5kΩ (pull up)





soit le programme suivant :

//**** début du programme *********//

#define boutonPin 2

// définition des variables
int etat_bouton = 0;     // variable de l'état du bouton poussoir
int resultat1 ;
int valeur = 21 ;
float resultat2 ;
float valeur_f=21 ;

void setup() {
  pinMode(boutonPin, INPUT); // définition de l'entrée du bouton (pin 2)
}

void loop(){
 
  etat_bouton = digitalRead(boutonPin);  // ………………………….
  if (etat_bouton == HIGH)  // ……………………….
    {     
         resultat1 = (valeur+11)/3 ;
    }
  else    // ………………………………..
    {
         resultat2 = (valeur_f+11)/3 ;
    }
}
//**** fin du programme *********//

1. Rajoutez les commentaires manquants (pointillés) dans le programme
2. Expliquez, en détail, ce que va faire le programme
3. Que faut résultat1 ?
4. Que vaut résultat2 ?
5. Quelles sont les valeurs que peut avoir la variable «  etat_bouton » ?
6. Trouver le type le plus approprié pour la variable «  etat_bouton »

On a maintenant:
unsigned int toto ;  // déclaration de la variable toto
toto=65535 ;
toto=toto+1 ;
7. Quelle est la valeur finale de la variable « toto » ?


On a maintenant :
int toto ;    // déclaration de la variable toto
toto=1 ;
toto=toto-2 ;
8. Quelle est la valeur finale de la variable « toto » ?

On a maintenant :
unsigned int toto ;    // déclaration de la variable toto
toto=1 ;
toto=toto-2 ;

9. Quelle est la valeur finale de la variable « toto » ?

 

 

  

     

 

Exercice 3 :  choix des broches (pin) d'un arduino Uno

rappel : voici le rôle des broches (pin) d'une carte Arduino Uno :



rappel N°2: le terme « digital » caractérise un signal binaire, c'est à dire un signal qui vaut 0 ou 1 (en général 0V ou 5V sur Arduino). On peut aussi dire Tout Ou Rien (TOR).


Notre réalisation contient :

  • une led (et sa résistance) commandée par la carte Arduino
  • un bouton poussoir ((et sa résistance de pull up)
  • un capteur TOR (Tout ou rien) de présence (présence : 5V, absence:0V)
  • un capteur analogique de température (il fournit un signal analogique compris entre 0V et 5V)
  • un accéléromètre relié par une liaison de type bus I2C (2 fils : SCL et SDA)



1. La led doit-elle être reliée à une sortie ou à une entrée arduino ? Justifiez votre réponse.
2. Cette entrée ou sortie doit-elle être analogique ou TOR (digital en anglais) ? Justifiez votre réponse.
3. Le bouton poussoir doit-il être reliée à une sortie ou à une entrée arduino ? Justifiez votre réponse.
4. Cette entrée ou sortie doit-elle être analogique ou TOR (digital en anglais) ? Justifiez votre réponse.
5. Quelle est le double rôle des pins 0 à 13 ? Où et comment cela est-il paramétré dans un programme Arduino ? Donner un exemple pour les 2 cas.
6. Proposez un câblage pour notre montage :