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 et constantes
int led_pin = ……. ; // …………….
void setup()
{
pinMode(led_pin, OUTPUT); // Pin 13 used as output
}
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 éléments (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
Remarque: l'exercice est disponible en version "interactive" sur l'intranet du lycée (Moodle) dans la rubrique (cours) "1STI - Révisions I2D (Enseignement technique et professionnel)"
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 resultat1 (quand le calcul est fait)?
4. Que vaut resultat2 (quand le calcul est fait)?
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 :