do {
vento = pulseIn(pin_vento, LOW);
} while (vento > 500000);
finchè vento <= 500000 non uscirà mai dal while e quindi non eseguirà mai il resto del codice
io ti consiglio di togliere il while e fare solo una pulseIn
se lasci il while non è necessario controllare che (vento > 500000), perchè se il codice è uscito dal while vento è sicuramente >500000
if ( (vento < 500000) && ( luce > 350) ) {
digitalWrite(m_avanti, LOW);
digitalWrite(m_indietro, HIGH);
}
per lo stesso motivo cui sopra, questo if sarà sempre falso se lasci il while.
ps. la variabile "luce" non viene mai aggiornata, quindi vale sempre 0... è un errore o semplicemente è un'aggiunta per un sensore che aggiungerai dopo?
pps. ma sei sicuro che il vento lo leggi solo con una pulseIn? che sensore usi?
metti in && la variabile legata alla velocità del vento con con quella legata alla luminosità: non ti ripari da casi particolari.
Es: se di notte tira vento (e hai la tenda aperta), la tenda non si chiude
Io ragionerei in questo modo:
Di giorno la tenda esce, di notte rientra.
Se tira vento forte, chiude la tenda - indipendentemente dal fatto che sia giorno o notte.
Ho 2 tende su 2 terrazze, di cui una a carrozza, quindi sensibile al vento: mi protegge la terrazza anche dall'acqua ma se tira vento forte la sollevo per evitare sorprese (me l'hanno garantita anti-bufera ma i soldi io non li trovo sull'albero ).
Se c'è sole o pioggia ma senza vento la tenda la lascio giù, sia che sia giorno sia che sia notte, perché di notte mi ripara dalla guazza notturna.
Intanto devi capire come funziona la... funzione loop() di Arduino. Essa è, come fa capire il nome, eseguita all'infinito, in un ciclo continuo.
Ma tu scrivi all'inizio di essa:
luce = analogRead(A0);
do {
vento = pulseIn(pin_vento, LOW);
} while (vento > 500000);
Con questo codice fai una lettura della luce e poi entri in un ciclo da cui puoi uscire solo se vento sarà maggiore di 500000. Quindi, se non tirerà mai vento, tu rimarrai intrappolato in quel ciclo per ore se non giorni o settimane, sia di giorno che di notte.
Sto realizzando una cosa simile,
Un semplice anemometro che controlla un relé per la sola chiusura in caso di forte vento.
Però non sempre funziona. Non so se dipende dalla circuiteria o dal software.
Per ora ho attaccato un led
Ho preso spunto dal tuo progetto:
Int pinvento=7
Int pinled=10
Unsigned long vento
Setup
Pinmode(pinvento,input)
Pinmode(pinled,output)
Loop
Vento=pulsein(pinvento,low)
If(vento>1000)
Digitalwrite(pinled,high)
Else
Digitalwrite(pinled,low)
Funziona ma credo non sia preciso, ci sono dei momenti in cui il led si ccende per un istante anche se le palette girano piano.
Per il collegamento ho messo una resistenza da 10k tra il pin di uscita e la massa