Go Down

Topic: contatore di tocchi (Read 853 times) previous topic - next topic

matteo94s

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

fabpolli

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.:
Code: [Select]

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

poi valuti la varibile e se maggiore di 10 accendi il led con una digitalWrite
Code: [Select]

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

Michele Menniti

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.
Guida alla programmazione ISP e seriale dei micro ATMEL (Caricare bootloader e sketch):
http://www.michelemenniti.it/Arduino_burn_bootloader.php
Guida alla Programmazione ATmega328 noP:
http://www.michelemenniti.it/atmega328nop.html
Articoli su Elettronica In:
http://www.michelemenniti.it/elettronica_in.html

pablos


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

Tipo byte
no comment

fabpolli

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

ferdard

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

gpb01


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 :)

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 ;)

Guglielmo
Search is Your friend ... or I am Your enemy !

ferdard


leo72


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ì:
Code: [Select]
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++.

Go Up