Page 95 - arduino_Neat
P. 95

Dans le programme ci-dessus nous avons utilisé un opérateur logique &&. Cet opérateur nous
            a permis d'introduire plusieurs conditions à la fonction if(), puisque nous voulions que TOUTES
            les conditions soient vraies pour que les instructions s'exécutent. Seul (vrai && vrai) retourne
            une valeur vraie, alors que (vrai && faux) et (faux && vrai) retournent tous deux faux.

            Ci-dessous l’opérateur logique && (et) nous permet de rentrer dans la fonction if() seulement
            si les deux conditions sont vraies.
            if (lectureCapteur >= SEUIL && millis () - temps >= ANTIREBOND) {
                ...
            }
            Ci-dessous l’opérateur logique || (ou) nous permet de rentrer dans la fonction if() si l'une ou
            l'autre des conditions est vraie.

            if (marqueurTemps [posTableau] == 0 || posTableau == NOMBREMARQUEURS) {
                ...
            }
            TROISIÈME ÉTAPE

            Dans cette étape nous allons implémenter un mécanisme qui va nous permettre de formaliser
            notre scénario d'utilisation qui comporte deux modes différents : le MODE ÉCOUTE et le MODE
            JEUX. Cette troisième étape introduit aussi plusieurs astuces pour que le programme puisse
            fonctionner dans son ensemble notamment un concept permettant de définir les conditions de
            passage d'un mode à un autre ainsi que l'ajout d'une LED facilitant la visualisation les impacts
            enregistrés puis re-joués.
            ////////// Déclaration des variables
            // ces variables sont constantes
            const int LED = 13;             // LED connectée à la pin digitale 13
            const int CAPTEUR = A0;         // Piezo connecté à la pin Analogue 0
            const int SEUIL = 1;            // seuil de détection du capteur
            const int ANTIREBOND = 200;     // filtre anti-rebond
            const int FIN = 2000;           // temps pour définir la fin du mode écoute
            const int NOMBREMARQUEURS = 50; // nombre maximum de marqueurs temps
            // ces variables changent
            int lectureCapteur = 0;              // valeur du capteur
            int ledEtat = LOW;                   // état de la LED
            int mode = 1;                        // mode écoute (1) ou jeux (2)
            int posTableau = 0;                  // Position dans le tableau
            long temps = 0;                      // variable pour mémoriser le temps
            long marqueurTemps[NOMBREMARQUEURS]; // tableau pour mémoriser les temps qui séparent chaque
            impacte
            int i = 0;                           // variable pour parcourir la liste
            boolean DEBUG = false;       // activer ou non le DEBUG
            boolean BOUCLE = false;      // TODO
            void setup() {
                pinMode(LED, OUTPUT);     // déclarer la pin en sortie
                Serial.begin(9600);       // configurer le port série
            }
            ////////// Boucle principale
            void loop() {
                switch(mode) {
                case 1: // mode enregistrement
                    if(DEBUG == true) Serial.println("mode 1"); // envoie du mode
                    // lecture de la valeur du capteur Piezo
                    lectureCapteur = analogRead(CAPTEUR);
                    // si la valeur captée est supérieure au seuil choisi et
                    // que le temps écoulé depuis le dernier impacte est supérieur au temps de
            l'ANTIREBOND
                    // alors on rentre dans la condition
                    if (lectureCapteur >= SEUIL && millis() - temps >= ANTIREBOND) {
                        marqueurTemps[posTableau] = millis() - temps; //
                        digitalWrite(LED, HIGH);  // activer la broche de la LED
                        delay(5);                 // atendre 10 milisegonde
                        digitalWrite(LED, LOW);   // éteindre la broche de la LED
                        // on memorise le temps écoulé entre chaque impacte
                        posTableau++;             // on incrémente la position
                        temps = millis();         // initialisation
                    }
                    // si le temps écoulé depuis le dernier impact est supérieur
                    // au temps dit de FIN et que plus de deux impacts sont enregistrés
                                                                                    95
   90   91   92   93   94   95   96   97   98   99   100