Buongiorno a tutti,
io dovrei fare un programma che se premo per meno di un secondo il pulsante il led si accende a intensità 127 e se lo premo una seconda volta per meno di un secondo il led si spegne, mentre se con il led acceso tengo premuto il pulsante per più di un secondo il led incrementa l'intensità fino al massimo 255(tempo incremento 10 per 50ms) e poi decrementa fino a 30, poi posso riaumentare.
potete darmi una mano?
questo è quello che sono riuscito a fare per il momento:
#define led 5
#define Pulsante 7
boolean puls = LOW;
boolean UltimoStato = LOW;
int temponecessario = 1000;
int stato = 0;
int val = 0;
int vecchio_val = 0;
unsigned long UltimoEventoPulsante = 0;
void setup(){
pinMode(Pulsante, INPUT); // impostiamo il pin 7 come INPUT per il pulsante
pinMode(led, OUTPUT); // impostiamo il pin 5 come OUTPUT per il LED
}
void loop(){
val = digitalRead(Pulsante);
unsigned long tempo = millis();
if(puls != UltimoStato){
UltimoEventoPulsante = tempo;
}
if(tempo - UltimoEventoPulsante > temponecessario){
if ((val == HIGH) && (vecchio_val == LOW)){
stato = 1 - stato; //CONTROLLA SE è SUCCESSO QUALCOSA
}
vecchio_val = val; //RICORDA IL VALORE PRIMA VAL
if (stato == 1) { //PREMENDO IL PULSANTE
analogWrite(led, 127); //IL LED SI ACCENDE
}
else { //ALTRIMENTI
analogWrite(led, 0); //IL LED SI SPEGNE
}
}else {
stato = LOW;
}
}
Ditemi se non si capisce bene quello che deve venire fuori alla fine.
Grazie in anticipo