Je suis en train d'effectuer un petit exercice ou je pèche. Je suis en train de vouloir, à l'aide de deux boutons poussoir, faire une sorte de comptage avec l'un des boutons, et exécuter avec le second bouton, une led qui clignotera le nombre de fois que j'ai appuyé sur le premier bouton.
Exemple : J'appuie 5 fois sur le premier bouton, le moniteur série sera connecter pour me donner cette information. Ensuite j'actionne une fois le second bouton qui fera clignoter ma led 5 fois.
Pour coder le comptage, je n'ai pas de problème, j'ai tout simplement créé une variable que j'appelle à +1 quand j'actionne le bouton.
Mon problème, c'est lorsque j'appuie sur le second. J'ai creusé la chose mais je n'ai aucune idée de savoir comment lui faire comprendre de faire clignoter la led le nombre de fois demandé.
Est-ce que le premier bouton doit rester actif pendant que la LED clignote?
Si oui c’est typiquement une définition de programme qui se prête bien à la programmation par machine à états (cf mon tuto éventuellement)
Si non effectivement une simple itération pour ramener votre variable à 0 en clignotant suffira (regardez l’esemple ‘Blink’ ou ‘blink without delay’ pour le clignotement)
PS: on n’envoie pas une info à une led - une led n’a aucune intelligence, on ne peut pas lui dire « peux tu clignoter 7 fois »... on la soumet à une différence de potentiel suffisante entre son anode et sa cathode quand on veut l’allumer et bien sûr on s’assure d’avoir une résistance de limitation de courant en série avec la diode (obligatoire sinon vous allez griller la diode et peut être la pin de votre arduino !!)
Voici ce que j'ai fais, depuis que j'ai ajouté le bouton 2, ca ne compte plus (cela s'arrete à 3...)et lorsque j'appuie sur mon bouton 2, ma led clignote 2 fois....va savoir pourquoi. Merci de votre aide.
int bouton1 = 3;
int bouton2 = 4;
int LED = 8;
int comptage = 0, ETATBP1, Memoire = LOW;
int ETATBP2;
void setup() {
Serial.begin(9600);
pinMode (bouton1, INPUT_PULLUP);
pinMode (bouton2, INPUT_PULLUP);
pinMode (LED, OUTPUT);
}
void loop() {
ETATBP1 = digitalRead(bouton1);
if ((ETATBP1 != Memoire) && (ETATBP1 = HIGH))
{
comptage++; // depuis que j'ai rédigé la fonction boutonled, ca ne compte plus
Serial.println(comptage);
delay(500);
}
Memoire = ETATBP1;
boutonled();
}
void boutonled() {
int BP2_ACTIVE = 0;
ETATBP2 = digitalRead(bouton2); // quand j'appuie sur le bouton 2, la led clignote deux fois......pourquoi??
/*JE NE COMPRENDS PAS COMMENT APPELER MA VARIABLE AVEC UN FOR*/
for (comptage = 0; comptage <= Memoire; comptage ++) {
if (ETATBP2 == BP2_ACTIVE) {
/************************************************************/
digitalWrite (LED, HIGH);
delay(500);
digitalWrite (LED, LOW);
delay(500);
}
}
}
Commencez par vérifier ce genre de petit «détail »
if ((ETATBP1 != Memoire) && (ETATBP1 [color=red][b]=[/b][/color] HIGH))
Avez vous besoin d’une Affectation ou d’un test d’égalité ?
delay(500); c’est beaucoup pour faire du debounce et c’est visible au niveau réactivité du bouton, 15 ou 20 sont généralement suffisants si vous prenez cette approche
Tout d'abord, merci J-M-L pour votre réponse et votre aide.
En revanche, si je change mon delay à 15 ou 20, "mon doigt" n'est pas assez rapide pour être retiré du premier bouton. Donc le résultat est qu'il va m'afficher "25 valeurs" en même temps.
Pour le petit "détail", j'ai voulais dire que si l'etat de mon bouton 1 (donc la variable) est différent de la mémoire et que l'état de mon bouton est à 1 (en gros j'appuie sur le bouton 1) alors ca compte.
Je ne comprends pas l'affectation et le test d'égalité? Qu'entendez-vous par cela?
Je souhaite un comptage avec un bouton et allumé une led avec le nombre de comptage.
En revanche, si je change mon delay à 15 ou 20, "mon doigt" n'est pas assez rapide pour être retiré du premier bouton. Donc le résultat est qu'il va m'afficher "25 valeurs" en même temps.
exactement
--> donc ce n'est pas la bonne approche d'avoir un délai fixe... il faut tester l'appui et le relâchement du bouton avant de comptabiliser un nouveau click (vous n'avez fait que reporter le problème, si je tiens le doigt sur le bouton plus d'une demi seconde vous comptez)
Je ne comprends pas l'affectation et le test d'égalité? Qu'entendez-vous par cela?
en programmation comment écrivez vous "je veux donner la valeur 17 à la variable x?" (on appelle ça une affectation) et comment écrivez vous "je veux tester si la variable x vaut 17" (on appelle cela un test d'égalité) ?
Je l'ai testé plusieurs fois et je vous assure qu'il marche. Essayez le, maintenant je ne suis pas la pour contredire car je débute dans ce monde, mais ca fait ce que je lui demande.
P-S : je viens d'essayer avec == et cela ne change rien.
En tout cas merci JML pour toutes ses leçons et j'ai regardé ton tuto, je vais m'y pencher. En revanche, j'ai une dernière question :
Je souhaite rajouter deux boutons poussoirs dans mon exercice : Le premier serait aussi un comptage et le deuxiéme confirmerai aussi ce comptage sauf qui serait pour controler le temps de clignotement de la led.
Exemple : j'appuie 5 fois sur le premier bouton, et quand j'appuie sur le second bouton, la led clignote toutes les 5secondes.