di fatti non voglio la mappa pronta perchè sennò la prossima volta che devo fare la stessa cosa non riesco a farla, dopo un po di tentativi e molti ragionamenti (i più errati) sono arrivato a fare questo codice:
#define p1 8
#define led1 13
void setup(){
pinMode(p1, INPUT);
pinMode(led1, OUTPUT);
}
void loop(){
if(digitalRead(p1) == HIGH){
delay(100);
if(digitalRead(p1) == HIGH){
if(digitalRead(led1) == HIGH){
digitalWrite(led1, LOW);
}else{
digitalWrite(led1, HIGH);
}
}
}
}
questo codice lo leggo in questo modo:
p1 è alto?
se si, aspetta 100ms e ti domando nuovamente:
p1 è ancora alto? (questo sistema secondo me dovrebbe creare una sorta di antirimbalzo)
se si, guarda lo stato del led e vedi se è alto, se si spegnilo, se no accendilo
a ragionamento questa è una cosa che deve andare, il problema è che a livello pratico il led lampeggia con la cadenza del tempo impostato in delay, indifferentemente se p1 è o no premuto, mi spiego meglio:
imposto provvisoriamente delay ad 1s delay(1000) e do un impulso tramite il pulsante (questo impulso è veloce e dura meno di un secondo), il led fa un paio di lampeggi e poi si spenge;
altro caso, sempre con delay(1000), tengo premuto il pulsante per più di 1s ed il led fa lo stesso lampeggio per tornare a spegnersi nuovamente.
ho provato a cambiare la resistenza di pull-down da 10k (che tra l'altro uso spesso nei miei circuiti e va praticamente sempre bene) con altre due resistenze in altri due casi, una da 22k e l'altra da 4k7, il risultato era sempre lo stesso, quindi ne deduco che non è un problema di corrente ma di software, mi dareste una mano a risolvere questo intoppo?