Salut ,
Je galere un peut parce que je dois faire un code pour un systeme d'appel malade sur une carte arduino. Il consiste a avoir 3 boutons poussoir (vert,jaune et rouge) et 3 leds (vert,jaune et rouge) et :
-Le bouton rouge allume la led rouge
-Le bouton jaune allume la rouge et la jaune
-Le bouton vert allume le vert et eteind les deux autres
-Si la led verte est allumer et j'appuye sur le bouton rouge la led rouge doit clignoter
-Si la led verte est allumer et j'appuye sur le bouton jaune la led rouge et jaune doit clignoter
Mon probleme est que j'ai mit un delay pour faire clignoter mais quand j'appuye une fois sur le bouton vert pour eteindre la led rouge ou rouge et jaune qui clignote je dois rester appuyer longtemps a cause du delay . Voici mon code :
int LRED = 4;
int LYELLOW = 3;
int LGREEN = 2;
int BRED = A0;
int BYELLOW = A1;
int BGREEN = A2;
bool greenLedState = false;
bool previousGreenButtonState = HIGH;
void setup() {
pinMode(LRED, OUTPUT);
pinMode(LYELLOW, OUTPUT);
pinMode(LGREEN, OUTPUT);
pinMode(BRED, INPUT_PULLUP);
pinMode(BYELLOW, INPUT_PULLUP);
pinMode(BGREEN, INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
if (digitalRead(BRED) == HIGH) {
digitalWrite(LRED, HIGH);
} else if (digitalRead(BYELLOW) == HIGH) {
digitalWrite(LRED, HIGH);
digitalWrite(LYELLOW, HIGH);
} else if (digitalRead(BGREEN) == HIGH) {
digitalWrite(LGREEN, HIGH);
digitalWrite(LRED, LOW);
digitalWrite(LYELLOW, LOW);
}
bool currentGreenButtonState = digitalRead(BGREEN);
if (currentGreenButtonState == LOW && previousGreenButtonState == HIGH) {
greenLedState = !greenLedState;
digitalWrite(LGREEN, greenLedState);
}
previousGreenButtonState = currentGreenButtonState;
if (digitalRead(LGREEN) == HIGH && digitalRead(BRED) == HIGH) {
while (digitalRead(BGREEN) ==LOW) {
digitalWrite(LRED, HIGH);
delay(500);
digitalWrite(LRED, LOW);
delay(500);
}
}
if (digitalRead(LGREEN) == HIGH && digitalRead(BYELLOW) == HIGH) {
while (digitalRead(BGREEN) ==LOW) {
digitalWrite(LRED, HIGH);
digitalWrite(LYELLOW, HIGH);
delay(500);
digitalWrite(LRED, LOW);
digitalWrite(LYELLOW, LOW);
delay(500);
}
}
if (digitalRead(LGREEN) == HIGH && digitalRead(BGREEN) == HIGH) {
digitalWrite(LGREEN, LOW);
digitalWrite(LRED, LOW);
digitalWrite(LYELLOW, LOW);
}
}