Page 96 - arduino_Neat
P. 96

// alors on rentre dans la condition
                    if (millis() - temps >= FIN && posTableau >= 2) {
                        posTableau = 0;             // initialiser la position
                        mode = 2;                   // choisir le mode 2
                        if (DEBUG == true) Serial.println("mode 2"); // envoie du mode
                        temps = millis();           // initialisation du temps
                    }
                    break;                        // sortir du mode 1
                case 2: // mode de jeux
                    // lecture de la valeur du capteur Piezo
                    lectureCapteur = analogRead(CAPTEUR);
                    // si la valeur du capteur est supérieure au seuil
                    // alors on entre dans la condition puisque l'usager rejoue
                    if (lectureCapteur >= SEUIL) {
                        // on efface toutes les valeurs du tableau
                        for (i=0; i<NOMBREMARQUEURS; i++) {
                            marqueurTemps[i] = 0;
                        }
                        posTableau = 0;    // initialiser la position
                        mode = 1;          // choisir le mode 1
                        if (DEBUG == true) Serial.println("mode 2 stop"); // envoie du mode
                        temps = millis();  // initialisation du temps
                        break;             // sortir du mode 2
                    }
                    // si la valeur de temps stockée dans le tableau n'est pas nulle
                    // et que cette valeur de temps est dépassée par le conteur millis()
                    // alors on entre dans la condition
                    if ( marqueurTemps[posTableau] != 0 && millis() - temps >= marqueurTemps[posTableau] )
            {
                        digitalWrite(LED, HIGH);   // activer la broche de la LED
                        delay(5);                  // attendre 5 milisegonde
                        digitalWrite(LED, LOW);    // éteindre la broche de la LED
                        posTableau++;              // on incrémente la position
                        temps = millis();          // initialisation du temps
                    }
                    // si la valeur de temps stockée dans le tableau est nulle
                    // ou que nous arrivons à la fin du tableau
                    // alors on entre dans la condition
                    if ( marqueurTemps[posTableau] == 0 || posTableau == NOMBREMARQUEURS ) {
                        for (i=0; i<NOMBREMARQUEURS; i++) { // on efface toutes les valeurs du tableau
                            marqueurTemps[i] = 0;
                        }
                        posTableau = 0;     // initialiser la position
                        mode = 1;           // changer de mode
                        if(DEBUG == true) Serial.println("mode 2 end"); // envoie du mode
                        temps = millis();   // initialisation du temps
                    }
                    break;                // sortir du mode 2
                }
            }
            Ce programme peut sembler complexe et comporte une multitude de fonctions. Pour
            démystifier ces mécanismes, voici quelques explications supplémentaires.
            LES TABLEAUX


            Nous allons tout d'abord revenir sur les tableaux. Nous avons utilisé un tableau nommé
            marqueurTemps pour stocker les valeurs de temps qui séparent chacun des impacts. Notre
            tableau est un conteneur qui permet de stocker une liste de variables. Pour utiliser un tableau,
            nous devons tout d’abord le déclarer au même niveau que les variables (voir chapitre
            « Programmer Arduino »). Ensuite nous définissons le nombre de variables qu'il comporte avec
            la constante NOMBREMARQUEURS.
            const int NOMBREMARQUEURS = 50; // nombre maximum de marqueurs temps
            long marqueurTemps [NOMBREMARQUEURS]; // tableau pour mémoriser les temps
            Pour écrire une valeur dans une case du tableau nous devons utiliser deux variables, soit une
            pour choisir la position dans le tableau où nous souhaitons enregistrer celle-ci (posTableau) et
            une pour la valeur à inscrire (val). Nous allons ici écrire la valeur 127 dans la deuxième case du
            tableau :

            int posTableau = 2; // initialisation de posTableau à 2
            long val = 127; // initialisation de val à 127
            marqueurTemps [Position] = valeur;


            96
   91   92   93   94   95   96   97   98   99   100   101