const int Led1= 2; const int Bp1 =3; int MemLed1 =0; int MemBp1 =0; int tempo =50; void DebugVar(int nb) { Serial.print("temps = ");Serial.println(nb); Serial.print("Bp1 =");Serial.println(digitalRead(Bp1)); Serial.print("MemBp1 =");Serial.println(MemBp1); Serial.print("MemLed1 =");Serial.println(MemLed1); delay(250); } void setup() { Serial.begin(9600); pinMode(Led1, OUTPUT); pinMode(Bp1, INPUT); digitalWrite(Led1, LOW); //DebugVar(10); } void loop() { int valeurBp1 = digitalRead(Bp1);// On lit la valeur de Bp1 au début de la boucle delay(tempo); /* //Temps 0 if (valeurBp1 == 0 && MemBp1 ==0 && MemLed1 == 0) {// etat present digitalWrite(Led1, LOW);MemBp1 =0;MemLed1 = 0; // Etat futur //delay(tempo);DebugVar(0); } */ //Temps 1 if (valeurBp1 == 1 && MemBp1 ==0 && MemLed1 == 0) { digitalWrite(Led1, HIGH);MemBp1 =1;MemLed1 = 1; //delay(tempo);DebugVar(1); } //Temps 2 if (valeurBp1 == 0 && MemBp1 ==1 && MemLed1 == 1) { digitalWrite(Led1, HIGH);MemBp1 =0;MemLed1 = 1; //delay(tempo);DebugVar(2); } //Temps 3 if (valeurBp1 == 1 && MemBp1 ==0 && MemLed1 == 1) { digitalWrite(Led1, LOW);MemBp1 =1;MemLed1 = 0; //delay(tempo);DebugVar(3); } //Temps 4 if (valeurBp1 == 0 && MemBp1 ==1 && MemLed1 == 0) { digitalWrite(Led1, LOW);MemBp1 =0;MemLed1 = 0; //delay(tempo);DebugVar(4); } }
Explications diagramme bouton poussoir en interrupteur sans clignotement
Le bouton poussoir est cablé avec un pullup à GND ( plus facile à comprendre …)
Le bouton poussoir est actif quand on envoie un + 5V ( 1 ) sur la broche D3 de l'arduino
T0 : le bp1 est inactif = 0 , tous le reste est à 0.
T1 : le Bp1 est actif = 1 ⇒ La memoire du Bp1 est à 0 ( voir BP1 T0), Led1 devient allumée = 1 ( 1er front montant de Bp1), la memoire de la Led1 est = 0 ( voir Led1 T0).
T2 : le Bp1 est inactif = 0 ⇒ La memoire du Bp1 est à 1 ( voir Bp1 T1), Led1 reste allumée = 1 ( c'est le but) , la memoire de la Led1 est = 1 ( voir Led1 T1).
T3 : le Bp1 est actif = 1 ⇒ La memoire du Bp1 est à 0 ( voir Bp1 T2), Led1 est eteinte = 0 ( 2eime fronts montant de Bp1) , la memoire de la Led1 est = 1 ( voir Led1 T2).
T4 : le Bp1 est inactif = 0 ⇒ La memoire du Bp1 est à 1 ( voir Bp1 T3), Led1 est eteinte = 0 ( Le Led1 doit rester eteinte) , la memoire de la Led1 est = 0 ( voir Led1 T3).
On revient à T0