Page 87 - arduino_Neat
P. 87

dans la configuration du programme.

            Boucle principale (loop)
            Notre boucle de programme principal doit encore une fois changer. Nous mettons d'abord
            sous commentaires les fonctions liées à la prise d'information et au test moteur, soit
            montrerValeurCapteur () et testerServoMoteur (). Ensuite, nous ajoutons les fonctions qui nous
            servirons à analyser le capteur et modifier la position du servomoteur en fonction de celle-ci,
            soit modifierPosSelonCapteur () et decroitreServoPos ().
            Finalement, nous ajoutons l'instruction servo1.write (servoPos) afin de spécifier à l'objet servo1 la
            position telle qu'elle a été modifiée par le programme. L'instruction du delay (20) permet un
            certain espacement entre les lectures et assignations moteur.
            Sous-routines

            Nous ajoutons trois sous-routines à notre programme :

            void determinerCapteurBase()
            {
                servo1.write(0);
                delay(2000);
                capteurBase = analogRead(pinCapteur);
            }
            Cette fonction sert d'abord à initialiser la position du moteur avec servo1.write (0). Ensuite, il
            faut faire attendre le programme 2 secondes avec delay (2000) pour laisser le temps au
            moteur de se positionner. Finalement, le programme fera une lecture du capteur avec
            analogRead (pinCapteur) pour assigner cette valeur à la variable capteurBase. Nous utiliserons
            cette variable pour calculer l'écart entre une lecture « sans ombre » et une lecture avec
            l'ombre projetée par la main ou le doigt.
            void modifierPosSelonCapteur()
            {
                int difference = 0;
                valeurCapteur = analogRead(pinCapteur);
                difference = capteurBase - valeurCapteur;
                difference = max(difference, 0);
                servoPos = min ( servoPos + difference, 180);
            }
            Cette fonction a la particularité de contenir une déclaration de variable, l'instruction int
            difference = 0. Habituellement réservée à la première section du programme, une déclaration
            de variable faite à l'intérieur d'une sous-routine crée ce qu'on appelle une variable locale. Ceci
            signifie que la variable « n'existera » que dans le contexte d'exécution de la fonction ou sous-
            routine dans lequel elle se situe. Par conséquent, aucune autre fonction ou sous-routine ne
            pourrait faire usage de la variable difference. Par opposition, les variables qui sont déclarées au
            tout début du programme sont considérées comme globale, c'est à dire qu'elles « existent » et
            sont accessible à toutes les fonctions ou autre routines.
            La seconde instruction de cette sous-routine assigne à valeurCapteur la lecture de la pin liée au
            capteur. Ensuite, nous calculons la différence entre la valeur du capteur « sans ombre »
            contenu dans capteurBase et celle « avec ombre » (ou sans) de valeurCapteur.
            Finalement, comme il est possible que la différence nous retourne une valeur négative (dans le
            cas où il y aurait eu une illumination, par exemple, nous limitons la valeur de différence à un
            minimum de 0. Bien que cela semble contre-intuitif, nous utilisons dans ce cas la fonction max ()
            . Celle-ci prend en paramètre deux valeurs (en l'occurrence difference et 0) et retournera celle
            des deux qui sera la plus élevée. Ainsi, si difference = -5, max (difference, 0) retournera 0,
            puisque ce chiffre est plus élevé que -5. Par contre, si difference = 10, la fonction retournera 10.
            Nous assignons la valeur retournée par max () à difference.










                                                                                    87
   82   83   84   85   86   87   88   89   90   91   92