Discussione: Help con arduino
Visualizza messaggio singolo
Vecchio 14 aprile 18, 13:55   #6 (permalink)  Top
CarloRoma63
User
 
L'avatar di CarloRoma63
 
Data registr.: 08-08-2011
Residenza: Roma
Messaggi: 5.806
Citazione:
Originalmente inviato da pavmail Visualizza messaggio
Torno un'attimo sul mio sketch, risolto perfettamente utilizzando il suggerimento di Carlo.

Il primo switch (livello massimo) viene premuto per frazioni di secondo ad ogni passaggio di una sfera. Questo comporta che, con il secondo switch (livello minimo) premuto, il programma di blocca. Per risolvere ho utilizzato un delay, ma non mi sembra la soluzione definitiva, dato che poi ritardo si riperquote anche sul riavvio del motore.

Pensavo di inserire un debounce per cambiare lo stato del primo switch dopo x tempo, ma ho fatto diversi tentativi senza riuscire ad integrarlo correttamente. E' una soluzione applicabile?

Grazie
Per quanto tempo rimane premuto il primo switch quando passa la sfera? Credo comunque che la soluzione migliore sia un delay.

Modifica la parti finale in questo modo.

if (StatoMotore){
delay(1000) // 1000 millisecondi, vedi tu quanto ti occorre
if (digitalRead(SW1)){ // se dopo il delay è ancora HIGH allora esegue
digitalWrite(PinMotore, HIGH);
}
}else{
digitalWrite(PinMotore, LOW);
}

Nota che questa soluzione implica necessariamente un ritardo nella risposta del motore, sia in accensione che in spegnimento. Se non puoi tollerare questo ritardo, specialmente per lo spegnimento, allora la soluzione è un pochino più complessa .

Carlo
__________________
Dai un pesce ad un uomo e lo avrai sfamato per un giorno, insegnagli a pescare e lo avrai sfamato per sempre. (Confucio)
I miei modelli: http://www.youtube.com/results?search_query=carloroma63
CarloRoma63 non è collegato   Rispondi citando