Bonjour à tous,
Je suis nouvelle sur le forum, j'espère que je poste dans la bonne rubrique. Sinon, je vous prie, s'il vous plaît de m'en faire part. je rappelle que mon niveau en programmation "C ARDUINO" est débutante confirmée. Voilà je suis en train d'effectuer un petit exercice qui me servira un peu plus tard dans un projet.
Le but : à partir de 2 boutons, effectuer un comptage, dés que j'appuie sur l'un des boutons, un chiffre s'incrémente (1.2.3.4.5...)et il est bien entendu qu'il sera indiqué sur le moniteur série. Un bouton UP et un bouton DOWN. J'ajoute à ça un troisième bouton qui me permet d'activer une LED qui clignotera le nombre de fois que j'ai cliqué sur les premiers boutons.
Exemple : j'appuie 5 fois sur le premier bouton, ensuite j'appuie sur le bouton de la led, elle clignotera donc 5 fois.
J'ai voulu aller plus loin en voulant contrôler le temps : Au lieu que l'incrémentation des deux premiers boutons incrémentent le nombre de clignotement, ils incrémenteront le temps.
Exemple : J'appuie 5 fois sur le premier bouton, ensuite j'appuie sur le bouton de la led, elle s'allumera 5 secondes pendant 1 seconde.
Je sais que je dois utiliser la fonction millis() mais après plusieurs tentatives d'expériences, je suis dans l'impasse.
Je vous présente le premier code qui permet de faire clignoter la led le nombre de fois souhaité :
Code:int bouton1 = 3; int bouton2 = 4; int boutondown = 5; int LED = 8; int comptage = 0, ETATBP1, Memoire = LOW; int ETATBP2; int ETATBP3; void setup() { Serial.begin(9600); pinMode (bouton1, INPUT_PULLUP); pinMode (bouton2, INPUT_PULLUP); pinMode (boutondown, INPUT_PULLUP); pinMode (LED, OUTPUT); } void loop() { ETATBP1 = digitalRead(bouton1); if ((ETATBP1 != Memoire) && (ETATBP1 == HIGH)) { comptage++; Serial.println(comptage); delay(200); } Memoire = ETATBP1; boutonled(); boutondown01(); } void boutonled() { int BP2_ACTIVE = 0; int i; ETATBP2 = digitalRead(bouton2); if (ETATBP2 == BP2_ACTIVE) { for (i = 0; i <= comptage; i++) { digitalWrite (LED, HIGH); delay(500); digitalWrite (LED, LOW); delay(500); } } } void boutondown01() { ETATBP3 = digitalRead(boutondown); if ((ETATBP3 != Memoire) && (ETATBP3 == HIGH)) { comptage--; Serial.println(comptage); delay(200); } Memoire = ETATBP3; }
Voici ensuite le second code (très ressemblant du premier), qui intégre le temps (en faite il y a une partie blanche par rapport au bouton led, et la clé de tout est ici)
Je vous remercie d'avoir prêté attention à ma problématique. J'exposerai un autre petit soucis par la suite, toujours concernant ce code.Code:int bouton1 = 3; int bouton2 = 4; int boutondown = 5; const int LED = 8; int comptage = 0, ETATBP1, Memoire = LOW; int ETATBP2; int ETATBP3; void setup() { Serial.begin(9600); pinMode (bouton1, INPUT_PULLUP); pinMode (bouton2, INPUT_PULLUP); pinMode (boutondown, INPUT_PULLUP); pinMode (LED, OUTPUT); } void loop() { ETATBP1 = digitalRead(bouton1); if ((ETATBP1 != Memoire) && (ETATBP1 == HIGH)) { comptage++; Serial.println(comptage); delay(200); } Memoire = ETATBP1; boutonled(); } void boutonled() { int BP2_ACTIVE = LOW; int i; ETATBP2 = digitalRead(bouton2); if (ETATBP2 == BP2_ACTIVE) { for (i = 0; i <= comptage; i++) { //C'EST ICI QUE JE BLOQUE!!!!!! digitalWrite (LED,HIGH); }}}
En vous remerciant d'avance.
-----