Go Down

Topic: contatore con arduino (Read 221 times) previous topic - next topic

bitra92

buongiorno a tutti premetto che sono poco più di un neofita con arduno ma vorrei chiedere se potreste aiutarmi nella realizzazione del mio progetto
praticamente devo creare un contatore di impulsi ed a tot impulsi attivare un pin che accenderà un led
ad esempio una volta registrati 10 impulsi il led si attiva (so che potrebbe essere poco chiaro  :) )
a livello di schema dovrebbe essere abbastanza semplice  l'impulso arriva in pin digitale o analogico e il led collegato ad un pin qualsiasi
il mio problema ovviamente è sullo sketch potete aiutarmi?

nid69ita

Variabile tot che aumenti ad ogni impulso. Quando tot=10 accendi il led.

E poi? Una volta acceso che devi fare ?  Conti altri 10 ?
my name is IGOR, not AIGOR

fabpolli

Certo che troverai aiuto però devi impegnarti a creare tu il programma (Guarda qui ) e quando incontri difficoltà lo posti qui e i vari utenti del forum ti aiuteranno.
Intanto chiarisci meglio se gli impulsi dovranno essere intercettati tramite interrupt, arrivano da un pulsante premuto da un utente o tramite cosa?
Il led una volta acceso deve rimanere acceso per un certo lasso di tempo o per un altro numero di impulsi? Se deve restare acceso per un certo tempo, nel solito tempo devi continuare a leggere gli impulsi?

Claudio_FF

#3
Jan 21, 2019, 10:55 pm Last Edit: Jan 22, 2019, 10:23 am by Claudio_FF
In assenza totale di specifiche (polarità, durata, spaziatura e sorgente degli impulsi, struttura del loop bloccante o non bloccante, pin di ingresso e uscita, polarità dei livelli letti e scritti), non si può fare altro che assumere la presenza di una variabile 'impulso' ottenuta dalla lettura di un qualche cosa a noi sconosciuto (e già perfettamente filtrata contro i rimbalzi meccanici se per caso si tratta di contatti).

L'unica cosa che si può scrivere, che fa esattamente quanto chiesto, ne una virgola di più, ne di meno, è qualcosa del genere:
Code: [Select]
if ((impulso != w1) && (ACTIVE_LEVEL == impulso)) { cnt++; }
w1 = impulso;
if (10 == cnt) { digitalWrite(USCITA, ON_LEVEL); }
* * * *    'if' e 'case' non sono cicli   * * * *
* * * Una domanda ben posta è già mezza risposta. * * *
* La corrente si misura in 'mA', la quantità di carica in 'mAh' *

pgiagno

... ne una virgola di più, ne di meno, ...
Non sono espertissimo in programmazione, ma non funzionerebbe anche così?

Code: [Select]
if ((impulso != w1) && (ACTIVE_LEVEL == impulso)) cnt++;
w1 = impulso;
if (10 == cnt) digitalWrite(USCITA, ON_LEVEL);

(una virgola, no, ma quattro parentesi graffe e un punto e virgola in mano, sì?)

Ciao,
P.

fabpolli

Per funzionare funziona, l'if senza graffe è ammesso dalla sintassi del C e considera sottoposta ad if la sola istruzione immediatamente successiva alla chiusura della parentesi tonta che ne definisce la condizione.
Il problema è che senza le graffe è facile cadere nell'errore di inserire una seconda, una terza e così via istruzione pensando che questa sia comunque inclusa nell'if quando invece viene sempre eseguita
Code: [Select]

if ((impulso != w1) && (ACTIVE_LEVEL == impulso)) cnt++; var2++; var3=var2/cnt;

Così sembra che var2 e var3 cambiano valore solo se l'if è soddisfatto quando in realtà cambiano sempre valore, in molti sconsigliano la sintassi priva delle graffe perché fonte di cattiva leggibilità e possibilità d'errore e difficoltà di indivuduazione dello stesso (BARR Group e MISRA C sicuro lo dettano come regola)
Poi ciascuno (se non dettato da regole lavorative) è libero di fare come vuole, omettere le graffe a livello di compilazione non cambia una virgola nel codice generato

Claudio_FF

(una virgola, no, ma quattro parentesi graffe e un punto e virgola in mano, sì?)
Ah, il punto e virgola era un refuso, ora l'ho tolto grazie.
Le parentesi in effetti non le mettevo neanche io ma ho notato che riducono le ambiguità, come pure quelle tonde  nella condizione composta del primo if, che in base alle regole di precedenza degli operatori non sono strettamente necessarie.
* * * *    'if' e 'case' non sono cicli   * * * *
* * * Una domanda ben posta è già mezza risposta. * * *
* La corrente si misura in 'mA', la quantità di carica in 'mAh' *

Go Up