contatore di tocchi

salve a tutti, il mio nome è Matteo

avevo in progetto un piccolo programma ma non riesco a farlo funzionare.. :~
vorrei accendere un led dopo aver premuto 10 volte un pulsante; qualcuno mi può aiutare ???

grazie, Matteo

Ciao Matteo,
se non lo hai già fatto passa nella sezione presentati.
Quello che vuoi fare è abbastanza semplice e lo si può fare in tanti modi.
Uno di questi è definire una varianile di tipo int che vai ad incrementare ad ogni pressione del pulsante questa la puoi rilevare con una digitalRead(numeropin) o con la libreria debounce ad es.:

if (digitalRead(10)==HIGH){
  contatore++;
}

poi valuti la varibile e se maggiore di 10 accendi il led con una digitalWrite

if (contatore >= 10){
  digitalWrite(13,HIGH);
}

Attento a non collegare direttamente il led al pin di arduino ma metti una resistenza adeguata per non bruciare il pin.

Ciao

l'uso del debounce (hw o sw che sia) è indispensabile, non c'è pulsante che non sia affetto da rimbalzi, quindi sicuramente il LED si accenderebbe prima del tempo.

fabpolli:
definire una varianile di tipo int che vai ad incrementare ad ogni pressione del pulsante

Tipo byte

Ciao,
si la variabile di tipo byte è sicuramente meglio, errore mio...
Per il debounce sono perfettamente d'accordo, infatti ho fatto riferimento alla libreria debounce, non ho messo direttamente l codice in modo che matteo94s potesse andare a cercarlo e verificarne il funzionamento da solo, ad ogni modo avrei dovuto mettere almeno il debounce software con la millis, la prossima volta sarò più preciso

un contatore del genere potrebbe essere utilizzato anche per contare quante volte è stata ripetuta un'istruzione in loop?

ferdard:
un contatore del genere potrebbe essere utilizzato anche per contare quante volte è stata ripetuta un'istruzione in loop?

Ovvio che SI ... definisci una variabile che sarà il tuo contatore, la metti a zero prima di entrare nel loop e, dentro al loop, la incrementi di uno ... tutto qui :slight_smile:

Una precauzione ... definisci la variabile di un tipo conforme al massimo numero che dovrai contare ... byte se da 0 a 255, unsigned int se da 0 a 65535, unsigned long se da 0 a 4294967295 :wink:

Guglielmo

grazie mille

gpb01:
definisci una variabile che sarà il tuo contatore, la metti a zero prima di entrare nel loop e, dentro al loop, la incrementi di uno

Puoi anche definirla direttamente nel loop come statica, così:

void loop() {
  static unsigned long contacicli = 0;
  .....
  contacicli++;
}

"Static" indica al compilatore di mantenere il vecchio valore della variabile, per cui il valore di 0 è assegnato solo all'inizio, poi conterrà sempre il valore incrementato da contacicli++.