Livelli vasche acqua

Salve come da oggetto sto cercando di fare un automatismo per rabboccare la vasca di un acquario marino.

ho arduino UNO , e tre sensori autocostruiti , semplici barre inox che immerse danno 1 e fuori danno 0 , fin quì tutto bene.

nello svolgimento dello sketch faccio semplicemente due o tre controlli con altrettanti IF e ELSE IF e anche quì tutto ok...

per far fare alla pompa l'operazione richiesta uso dei cicli WHILE es. void rabboccovuoto(){ while(digitalRead(4)==LOW){ pump=0; lamp=100; digitalWrite(10,LOW); // lampeggio un led ad alta frequenza per avvertire assenza acqua delay(lamp); digitalWrite(10,HIGH); delay(lamp); digitalWrite(5,pump); // pompa spenta

}

al variare dello stato mi si attiva il Void richiesto... ma il ciclo while viene eseguito una volta e poi continua e legge il resto del codice...

è normale o sbaglio qualcosa io??

Se il while viene eseguito un unica volta è probabile che la condizione diventa falsa. Adesso tu leggi lo stato di un pin, forse per problemi elettronici, esempio non hai messo la resistenza, il pin passa dallo stato LOW a llo stato HIGH.

Grazie

ho risolto mettendo una resistenza verso massa (27K).

ora funziona correttamente.

p.s. sono alle prime armi.... non pensavo che i disturbi fossero così devastanti

tanor74: ho risolto mettendo una resistenza verso massa (27K). ora funziona correttamente.

Bene, comunque basta anche una 10k.

sono alle prime armi.... non pensavo che i disturbi fossero così devastanti

Non sono propriamente a causa dei disturbi, ma è perché i pin di input sono in uno stato ad alta impedenza quindi "flottanti" e possono diventare LOW o HIGH in modo quasi "casuale" quindi dipende da cosa c'è connesso, ossia se porta il livello sempre a Vcc o GND o se interviene solo quando si verifica una certa condizione. Per questo vanno generalmente messi o con una resistenza verso GND come hai fatto (chiamata "pull-down") o verso +5V ("pull-up"). O in alternativa, nella pinMode() si può definire come INPUT_PULLUP: attiverai una resistenza interna ad Arduino che ti fa la "pull-up" (ma significa che la logica sarà quindi invertita ossia ad esempio con un pulsante il pin sarà sempre HIGH e diventerà LOW quando premi il pulsante che lo porta a massa).