/* ex0053_lecture_bouton_Serial_print_ameliore_tert Lecture de l'état du bouton connecté à la PIN 12 S'il est pressé, allume la LED connectée à la PIN 13 et affiche dans le "moniteur série" (Ctrl+Maj+M) l'état de la PIN 12, c'est-à-dire l'état "pressé" ou non du bouton. Ce programme utilise la PIN 1 (tx) pour la communication série. S'il y avait lecture "Serial.read()", la PIN 0 (rx) serait utilisée. Amélioration de ex0050_lecture_bouton_Serial_print à ex0052_... Pour éviter les rebonds d'un bouton. Pour cela, utilise une gestion précise du temps avec la routine "micros();" qui lit le temps en micro secondes. */ int nCompteur = 0; int nEtatLast12 = 0; // mémorise le dernier état du bouton int nEtatBouton = 0; // pour la lecture de l'état pressé ou non d'un bouton unsigned long lwTimeNow = 0; // Temps actuel en micros secondes unsigned long lwTimeBouton12 = 0; // Temps en micros secondes de la dernière pression sur le bouton 12 void setup() { //============ // Initialise la PIN digital 13 comme OUTPUT // La PIN 13 a une LED connectée sur la plupart des cartes Arduino // Initialise la PIN digital 12 comme INPUT pinMode(13, OUTPUT); pinMode(12, INPUT); digitalWrite(13, LOW); // set the LED off Serial.begin(115200); // Initialise la communication série à une haute vitesse. // La vitesse de 9600 bauds est souvent utilisée par défaut. } // setup void loop() { //=========== lwTimeNow = micros(); // Lecture du temps depuis lequel le micro controlleur fonctionne, en micro-secondes. if (lwTimeNow - lwTimeBouton12 >= 50000) { // Cela fait plus de 1/20 de secondes que le bouton 12 a eu un changement d'état // Pour éviter les rebonds, on ne traite les changements d'états pas trop souvent nEtatBouton = digitalRead(12); if (nEtatBouton != nEtatLast12) { // L'état "pressé" ou "non pressé" a changé. Mémorise le nouvel état et quand il a changé nEtatLast12 = nEtatBouton; lwTimeBouton12 = lwTimeNow; // mémorise quand on a pressé sur le bouton 12 if (nEtatBouton == 1) { // On a pressé sur le bouton qui met la PIN 12 à l'état haut (HIGH) digitalWrite(13, HIGH); // set LED on nCompteur = nCompteur + 1; Serial.println(nCompteur); } else { // Le bouton a été relaché, on éteind la LED digitalWrite(13, LOW); // set the LED off } } } // if (lwTimeNow - lwTimeBouton12 >= 50000) { } // loop