int ledPin = 3;
int ledPin2 = 4;
int buttonApin = 5;
int buttonBpin = 6;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(buttonApin, INPUT_PULLUP);
pinMode(buttonBpin, INPUT_PULLUP);
}
void loop() {
if (digitalRead(buttonApin) == LOW)
{loop()
;digitalWrite (ledPin, HIGH);
delay(20);
digitalWrite (ledPin, LOW);
delay(20);
digitalWrite (ledPin2, HIGH);
delay(20);
digitalWrite (ledPin2, LOW);
delay(20);
}
if (digitalRead(buttonBpin) == HIGH)
{
}
}
Ceci n'a rien à faire dans la loop :
loop()
;
Sinon, le reste semble bon, un délai de 20ms c'est très court donc tu risques de ne rien voir. Si tu veux que tes leds clignotent en même temps tu peux faire :
Je lis dans ton titre "clignoter leds en cliquant sur bouton et cliquer sur un autre bouton et éteindre" : tu veux dire
Bouton A : appui pour faire clignoter les leds
Bouton B : appui pour les faire arrêter ?
Dans ce cas, c'est différent : tu dois créer une variable booléenne qui conserve l'état des leds : clignotantes ou éteintes. On va l'initialiser à false (éteintes) :
bool cligno = false;
Ensuite, tu vas lire les boutons et c'est l'état des boutons qui mettra cette variable à jour :
if (digitalRead(buttonApin) == LOW) cligno = true;
if (digitalRead(buttonBpin) == LOW) cligno = false;
A partir de là, tu dois faire clignoter ou non les leds. Si tu le fais avec des delay(), ce sera bloquant (le processeur ne fait RIEN tant qu'il attend la fin du delay), et tu risques de louper un appui sur un bouton. Il faut donc le faire de manière non bloquante. Pour cela, tu peux t'inspirer du tuto blink without delay qui est très mal fait à mon avis, ou lire (en anglais) les tutos ici et là
Ce n'est pas ce que je voulais dire. Voici un "squelette" pour ton code :
const int ledPin = 3;
const int ledPin2 = 4;
const int buttonApin = 5;
const int buttonBpin = 6;
bool cligno = false;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(buttonApin, INPUT_PULLUP);
pinMode(buttonBpin, INPUT_PULLUP);
}
void loop() {
// Lecture des boutons
if (digitalRead(buttonApin) == LOW) cligno = true;
if (digitalRead(buttonBpin) == LOW) cligno = false;
delay (30); // debounce
// Clignotement ou non ?
if (cligno) {
// Ici faire le clignotement en fonction du temps passé (voir les tutos)
}
}
Dans le "trou", il faut mettre les instructions qui vont faire clignoter ou non en fonction du temps écoulé. C'est pour ça que je te renvoie vers les tutos dans mon message précédent. Ils te donneront les bases.
Mais il restera un peu de réflexion à faire pour gérer le clignotement. Tu dois de plus définir la période de clignotement, le rapport cyclique (pourcentage du temps allumé pendant cette période) et comment les deux leds clignotent l'une par rapport à l'autre (synchrones, en opposition ou complètement désynchronisées).
... De l'importance d'un bon cahier des charges ...
Ça me semble bon. tu as une petite erreur ici: const unsigned long ledPin2interval l = 500;qui devrait être const unsigned long ledPin2interval = 500;et tu peux simplifier tes fonction toggle comme ceci :