Ciao a tutti. Vorrei chiedere se potete aiutarmi a compilare il codice per Arduino uno r3. Ho un flussometro che se non manda il segnale vorrei che partisse un led.. Praticamente in assenza di alcun flusso.. Per poi farlo spegnersi se il flusso si riprende..
Un'altra cosa è che dovrebbe funzionare con sola batteria,quindi senza il pc, al limite collegherò una presa USB al posto della batteria ma solamente per alimentare l'Arduino, quindi niente serial. Come devo impostare il boot? Io per ora ho questo code che non include il funzionamento del led che, come già detto, si dovrà attivare quando il segnale proveniente dal flussometro è nullo
Code qui sotto
Non semplice, devi usare una variabile di stato, a vero farai eseguire (in base ad un altro if(stato==vero) la parte di codice che accende/spegne il led
Forse più semplice usare un led che già da solo lampeggia. non costano molto.
nid69ita:
Non semplice, devi usare una variabile di stato, a vero farai eseguire (in base ad un altro if(stato==vero) la parte di codice che accende/spegne il led
Forse più semplice usare un led che già da solo lampeggia. non costano molto.
Ho provato questo ma da' l'errore di esecuzione
if (ledState == LOW &&((flowRate < 0.01)) (digitalWrite(GREEN,HIGH));
{
ledState = HIGH;
}
eh certo stai facendo un errore grosso. cosa ha che fare il (digitalWrite(GREEN,HIGH) in quella posizione? conta il numero di parentesi aperte e quelle chiuse.
La logica mi pare invece errata. Hai intuito qualcosa, ovvero usare la variabile ledState.
Però già il nome è fuorviante. A te non interessa lo stato del led. Lo stato deve essere vero/falso se se in situazione d'allarme, ovvero se il flusso è < 0.01
Nel tuo codice iniziale, invece del digitalWrite() high o low sul led, al posto metti uno statoAllarme=HIGH o LOW. Quindi lì, scateni il setting dell'allarme o lo togli.
Fuori da quel pezzo di codice del controllo flusso, prima della graffa di chiusura della loop metti un pezzo di codice che analizza statoAllarme e se HIGH ti occupi del led. Come far lampeggiare un led senza delay? Usando la millis(), vedi esempio BlinkWithoutDelay.
Allo scattare dell'allarme quindi devi far partire un altro contatore in base a millis, quindi integri quell'esempio blinkwithoutdelay dentro al tuo codice (parte finale prima della chiusura loop)
Suggerimento ... cambia ledState in base al valore del flusso ... POI, in un'altro if, fai if ledStatr == 1, e li dentro esegui il codice del lampeggio (ad esempio, quello del blink without delay, tanto per dirne uno) ... se proprio vuoi fare le cose complete, usi un'if-else ... l'if esegue il lampeggio se ledState e' 1, l'else spegne il led se ledState e' zero ...
Si, funziona occhio però che il blink del led è ogni 1 secondo dato dal intervallo della if iniziale, intervallo che penso è da 1 secondo per ... qualcosa riguarda la lettura del flussometro ? Quindi hai la lettura ogni 1 secondo del flusso e il blink ogni 1 secondo coincidenti. Se vuoi intervalli diversi, sei fregato.
nid69ita:
Si, funziona occhio però che il blink del led è ogni 1 secondo dato dal intervallo della if iniziale, intervallo che penso è da 1 secondo per ... qualcosa riguarda la lettura del flussometro ? Quindi hai la lettura ogni 1 secondo del flusso e il blink ogni 1 secondo coincidenti. Se vuoi intervalli diversi, sei fregato.
Esattamente, quel mille del if del loop è il controllore del intervallo di lettura, se lo imposto a 30 lampeggia che sembra essere fisso il led... E i valori sul serial non cambiano (lettura da pc)