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
   80   81   82   83   84   85   86   87   88   89   90