prelevare sensore hall e gestire informazione

Ciao a tutti,

ho un dubbio sulla gestione di un segnale in ingresso da sensore di hall. Io farei come segue, ditemi se secondo voi può andare o se ci sono metodi più efficienti.

In ingresso, il sensore, mi genera una onda quadra 0-5V con frequenza di 27Hz (quindi periodi di 36ms). Questa frequenza può essere leggermente variabile, quindi devo leggere pressoché costantemente.

int variabile_out1 = 0;
int variabile_out2 = 1;
int variabile_out3 = 1;
int variabile_out4 = 1;

 void loop() {

leggo_hall=digitalRead(hall);

if ((leggo_hall == 0) && (variabile_out1 == 0) { ...  e cambio variabile out1 a 1 e out2 a 0}
if ((leggo_hall == 0) && (variabile_out2 == 0) { ...  e cambio variabile out2 a 1 e out3 a 0}
if ((leggo_hall == 0) && (variabile_out3 == 0) { ...  e cambio variabile out3 a 1 e out4 a 0}
if ((leggo_hall == 0) && (variabile_out4 == 0) { ...  e cambio variabile out4 a 1 e out1 a 0}

}

dove ho messo i ... andrei a sviluppare una funzione che:

attiva una variabile millis() e la sottra al millis() di accensione Arduino, in questo modo so quanto "sfasare" l'output in funzione dell'input.

Cosa ne pensate?
Ringrazio in anticipo

si ma dovresti fare il contrario. da millis() sottrai il valore dell'ultima lettura e se corrisponde all'attesa che imposti tu fai procedere con la funzione... anche se non è proprio chiarissimo quello che vuoi fare...

Si perdonami, intendevo ovviamente quello :smiley:

Comunque meglio una lettura continua come la mia oppure usare il comando pulseln in attesa di uno stato LOW?

max95:
Si perdonami, intendevo ovviamente quello :smiley:

Comunque meglio una lettura continua come la mia oppure usare il comando pulseln in attesa di uno stato LOW?

Purtroppo non essendo chiaro (almeno per me) quello che devi fare non posso aiutarti...

miky_police:
Purtroppo non essendo chiaro (almeno per me) quello che devi fare non posso aiutarti...

nulla di particolare, ho un particolare meccanico rotante:

al giro 1 deve attiva out 1
al giro 2 deve attiva out 2
al giro 3 deve attiva out 3
al giro 4 deve attiva out 4

solo che poi ogni out "ha vita propria" per la disattivazione.. ma li farò tutto a livello di programmazione

potresti usare gli interrupt() in modo LOW oppure FALLING con un contatore per sapere quanti giri ha fatto...