Salve a tutti!
Ho scritto questo codice, si avvia e il led rosso si accende. Premo il pulsante si spegne il led rosso e si accende il led verde. premo di nuovo si spegne il led verde e si accende il led giallo. premo di nuovo e il giallo lampeggio. premo ancora e ritorna sul rosso.
Fino qui tutto bene.
Vorrei aggiungere un fade out e fade ogni volta che premo il pulsante e cambio colore. Per esempio rosso sfuma (fade out) e si accende il verde piano piano (fade in), e poi uguale quando vado da verde a giallo, ecc.
Qualcuno potrebbe aiutarmi in modo che il codice non mi si blocchi?
Grazie
ecco il codice`
long unsigned prevTime_T = millis();
long interval_T = 600;
long t = 0;
long debounce_delay = 100;
int giallo_state = LOW;
int switchPin = 2;
int rosso = 4;
int giallo = 6;
int verde = 8;
int val;
int val2;
int buttonState;
int Mode = 0;
void setup() {
pinMode(switchPin, INPUT);
pinMode(rosso, OUTPUT);
pinMode(giallo, OUTPUT);
pinMode(verde, OUTPUT);
buttonState = digitalRead(switchPin);
}
void loop() {
long unsigned currentTime = millis();
val = digitalRead(switchPin);
delay(10);
val2 = digitalRead(switchPin);
if (val == val2) {
if ((millis() - t) > debounce_delay) {
t = millis();
{
if (val != buttonState) {
if (val == LOW) {
if (Mode == 0) {
Mode = 1;
} else {
if (Mode == 1) {
Mode = 2;
} else {
if (Mode == 2) {
Mode = 3;
} else {
if (Mode == 3) {
Mode = 0;
}
}
}
}
}
}
buttonState = val;
}
if (Mode == 0) { // all-off
digitalWrite(rosso, HIGH);
digitalWrite(giallo, LOW);
digitalWrite(verde, LOW);
}
if (Mode == 1) {
digitalWrite(rosso, LOW);
digitalWrite(giallo, LOW);
digitalWrite(verde, HIGH);
}
if (Mode == 2) {
digitalWrite(rosso, LOW);
digitalWrite(giallo, HIGH);
digitalWrite(verde, LOW);
}
if (Mode == 3) {
if (currentTime - prevTime_T > interval_T) {
giallo_state = !giallo_state;
digitalWrite(giallo, giallo_state);
prevTime_T = currentTime;
digitalWrite(rosso, LOW);
digitalWrite(verde, LOW);
}
}
}
}
}