Ciao ragazzi, con questa quarantena ho ricominciato a studiare programmazione dopo più di 15 anni (da scuola). Ho letto e visto diverse guide e piano piano sto facendo diversi esercizi per cercare di allargare le conoscenze. Ho iniziato con il far lampeggiare con tempistiche diverse due Led, accendendoli con due pulsanti. Tutto funzionava perfettamente, ma essendo compilato con i Delay, mi sono subito reso conto del limite che ha un programma scritto in questo modo (rimane bloccato per i tempi del Delay). Quindi volevo rifare lo stesso esercizio, ma utilizzando il contatore millis. E qui nasce il manicomio.....
Ora ho provato con un solo Led e quindi un solo pulsante. Funziona... ma a "cavoli" suoi, e cioè premo il pulsante parte il lampeggio, premo rimane fisso...premo si spenge...premo rimane fisso... insomma fa come vuole.
Potete farmi capire cosa sto sbagliando??
Grazie infinite
int ledRed = 10;
int pulsante1 = 2;
int ledState = LOW;
int lettura1 = LOW;
int pulState1 = LOW;
long interval = 1000;
unsigned long preMillis = 0;
void setup(){
pinMode(ledRed, OUTPUT);
pinMode(pulsante1, INPUT);
digitalWrite(ledRed, ledState);
}
void loop(){
unsigned long curMillis = millis();
lettura1 = digitalRead(pulsante1); // leggo pulsante
if (lettura1 == HIGH){ // trasformo pulsante1 in interruttore e salvo lo stato in pulState1
if (pulState1 == LOW){
pulState1 = HIGH;
}else{
pulState1 = LOW;
}
}
if(pulState1 == HIGH){ //attiva funzione di lampeggio di ledState, in base allo stato di pulState1
if (curMillis - preMillis > interval) {
preMillis = curMillis;
if (ledState == LOW) {
ledState = HIGH;
Serial.print("Conteggio: ");
Serial.println(curMillis);
} else {
ledState = LOW;
}
digitalWrite(ledRed, ledState); //comanda la scrittura del led in base allo stato di ledState
}
}
delay(50);
}