Go Down

Topic: Semaforo intelligente (Read 647 times) previous topic - next topic

Dorsai

Sto facendo un plastico di un semaforo intelligente con sensori sulle vie, per variare il tempo del verde in funzione del traffico. Una cosa tutto sommato banale. Ho un solo problema, come posso interrogare lo stato del pulsante a disposizione dei pedoni anche durante la temporizzazione dei semafori? Il problema è che se viene premuta la richiesta durante la temporizzazione e subito rilasciata, il programma non la "vede".
Posso fare una sub-routine per la temporizzazione all'interno della quale interrogare continuamente il pin? Quacuno ha un esempio di sintassi da mostrarmi?

Grazie per la cortesia.

leo72

#1
Apr 26, 2011, 09:53 pm Last Edit: Apr 26, 2011, 09:57 pm by leo72 Reason: 1
Non devi usare delay ma fare un controllo usando millis, che conta il numero di millisecondi dall'avvio dell'Arduino.
All'interno del ciclo che usi, controlli la pressione del pulsante.

Tipo
Code: [Select]
tempo = millis()+temporizzazione;
do {
    if (digitalRead(pulsante) == HIGH) {
        pressione = 1;
        break;
    }
} while (millis() < tempo);
if (pressione == 1) {
...
}

lesto

Quote
Posso fare una sub-routine per la temporizzazione all'interno della quale interrogare continuamente il pin?

niente multi-threading, e considerando l'esperienza che dimostri direi che è più un calcio nelle balle che altro

segui il consiglio di leo
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Dorsai

Grazie a entrambi, mi avete illuminato la via... trattandosi di semafori... :))))

leo72


Grazie a entrambi, mi avete illuminato la via... trattandosi di semafori... :))))


:smiley-eek:

Dorsai

Scusate se torno sull'argomento ma riflettendoci mi è rimasto un dubbio.
Poichè le temporizzazioni sono molte, non sarebbe meglio usare una funzione a cui passare i millisecondi di pausa e da cui ricevere l'informazione della pressione del tasto di richiesta del verde per i pedoni? Risparmierei memoria? Usavo le funzioni in turbo Pascal e con il C ho dubbi sulla sintassi e sulle modalità di passaggio dei dati alla funzione.
Grazie ancora   :smiley-red:

Go Up