Page 85 - arduino_Neat
P. 85
La fonction while est une fonction conditionnelle qui permet de répéter une série d'instructions
tant qu'une condition est testée comme vraie. Par exemple, nous pourrions avoir une condition
où notre programme fait émettre un bruit d'alarme à l'Arduino tant qu'un bouton d'arrêt
n'aurait pas été enclenché : while (bouton==pas enclenché) { faire sonner l'alarme }. La fonction
est while (). La condition à tester est un paramètre qui se trouve entre les parenthèses, et la
série d'instructions à répéter se trouve entre les accolades (là où se trouvent xxxxx dans notre
exemple plus haut).
Dans notre projet, la fonction while nous sert plutôt ici à créer une boucle infinie, donc qui se
répète à tout coup. La condition étant testée est 1==1. Puisque 1 sera toujours égal à 1, notre
condition est toujours vraie et les instructions se répèteront à tout coup. Il est à noter que
l'opérateur « == » est à distinguer du « = ». L'opérateur « == » sert à faire des comparaisons,
et retournera une valeur logique, 1 correspondant à vrai et 0 à faux, tandis que le l'opérateur
« = » sert à attribuer une valeur à une variable (dans x = 45, x prendra la valeur 45).
Les trois instructions contenues dans notre boucle while sont les suivantes :
servoPos = random (181);
servo1.write (servoPos);
delay (2000);
servoPos = random (181); La fonction random () retourne une valeur aléatoire. Celle-ci se situe
entre 0 et le paramètre spécifié, de manière exclusive, ce qui signifie, par exemple, qu'un
paramètre de 181 fera en sorte que la random () retourne une valeur entre 0 et 180. Comme la
position que peut prendre notre servomoteur est comprise entre 0 et 180 en termes de
degrés, nous générons dans cette instruction une valeur aléatoire appropriée.
servo1.write (servoPos); Tout comme pour xxx.attach (), la fonction xxxx.write () provient de la
librairie Servo.h. Elle nous permet ainsi de spécifier au servomoteur lié à l'objet servo1 la
position en degrés qu'il doit atteindre. La variable servoPos fournit ici la valeur de cette
position.
delay (2000); Afin de laisser un certain intervalle de temps entre chaque mouvement du
servomoteur, nous ajoutons un délai de 2 secondes (2000 millisecondes).
TROISIÈME ÉTAPE
Dans cette troisième étape, nous établirons un lien entre la partie « capteur » et la partie
« moteur ». Lorsqu'une main ou un doigt s'approche du capteur, il crée une ombre sur le
capteur. Cette ombre devrait faire « fuir » le capteur fixé au servomoteur (si la cellule
photorésistive n'est pas fixée à la tête du moteur, vous devrez le faire maintenant).
Il n'y a pas de montage supplémentaire à exécuter. Le tout se joue au niveau du programme.
Quelques ajustements aux valeurs seront peut-être nécessaires afin de « corriger » le
comportement de la petite bête qui a peur, puisque la flexibilité du système entraîne
également une certaine instabilité (ce qui est recherché pour donner l'impression de la peur !).
Programme
Copiez maintenant le programme suivant dans la fenêtre de programmation Arduino.
#include <Servo.h> // inclure la librairie pour l'utilisation des servomoteurs
Servo servo1; // créer l'objet "servo1" pour référer à notre servomoteur
// **********************
// définition des variables
int pinCapteur = 0; // variable pour désigner quelle pin de l'Arduino est utilisée pour le
capteur
int valeurCapteur = 0; // variable pour contenir la valeur du capteur.
int servoPos = 0; // variable pour contenir et spécifier la position en degrés (0-180)
int capteurBase = 0; // variable pour contenir la valeur de base du capteur (sans ombre)
void setup()
{
Serial.begin(9600);// établir la connexion sérielle à 9600 baud
pinMode(pinCapteur, INPUT); // définir la pin 0 comme une entrée (pinCapteur)
servo1.attach(9); // associer la PIN 9 au servomoteur
85

