Ciao a tutti, sono agli inizi e ho qualche difficoltà (penso banali per la maggior parte di voi) nel realizzare uno sketch per comandare delle strip led che funzioni nel seguente modo:
- da led spento premo il pulsante e il led si accende ad una determinata intensità (PWM)
- da led acceso premo il pulsante il led si spegne
Fino a qui anche un neofita come me (scopiazzando qua e la) non ha avuto problemi, il passo seguente non mi riesce nonostante svariati tentativi (millis()):
- Se il led è acceso e ripremo il tasto per un tempo > di 2000 ms, il led comincia a variare d'intensità, attenuando e accentuando la sua intensità, finche non viene rilasciato il pulsante, fermandosi al livello d'intensità presente in quel preciso istante.
Di seguito quello che ho fatto (con non poca fatica) fin'ora:
#define pulsantePin 2 //INPUT PULSANTE
#define ledPin 9 //OUTPUT LED
#define debounce 200 //Tempo di rimbalzo
int ledStato = LOW; //Stato del pin OUTPUT LED
int reading; //Lettura corrente del pin INPUT PULSANTE
int pulsanteStato = LOW; //Lettura precedente del pin INPUT PULSANTE
long time = 0; //Ultimo tempo in cui il pin di OUTPUT è stato attivato
void setup()
{
pinMode(pulsantePin, INPUT); //Imposto il pulsante come INPUT
pinMode(ledPin, OUTPUT); //Imposto il LED come OUTPUT
digitalWrite(ledPin, ledStato);
}
void loop()
{
reading = digitalRead(pulsantePin); //Leggo il valore in ingresso dato dal pulsante
//Se abbiamo premuto in pulsante (HIGH) e la volta prima il suo stato
//era LOW ed è trascorso il tempo necessario
if (millis() - time > debounce) {
//Inverte l'OUTPUT
if(ledStato == LOW and reading == HIGH){
ledStato = HIGH;
analogWrite(ledPin, 255);
}
else if(ledStato == HIGH and reading == HIGH){
ledStato = LOW;
digitalWrite(ledPin, LOW);
}
//Ricorda quando l'ultima volta è stato premuto il pulsante
time = millis();
}
pulsanteStato = reading;
delay(10);
}
Anche il debounce sembra funzionare correttamente.
Molte Grazie a chi vorrà darmi qualche indicazione.