Come si fanno a sentire i fronti di salita (o discesa) di un segnale?
Vorrei fare un conta persone, che appena sente una persona entrare il una stanza, accende una lampada e conta le persone che entrano.
in caso di uscita di tutte le persone, deve spegnere la lampada.
Ora, per sapere se una persona entra o esce, devo leggere due segnali e discriminarli.
Ad esempio: se una persona entra, so che il sensore1 va HIGH, ma il sensore 2 e' LOW.
Nel caso la persona esca so che quando il sensore1 va HIGH, il sensore2 e' gia' HIGH.
il metodo migliore è usare un'interrupt. Arduino mette a disposizione le semplici funzioni attachInterrupt e detachInterrupt puoi attaccare le funzione che vuoi su 2 pin(4 sull'atmega).
se ti servono più di 2 pin puoi lavorare a livello più basso e leggere interrupt su quasi tutti i PIN (tranne VCC GND AVCC e AREF) usando i registri atmega, quindi leggiti il manuale del microcontrollore. quì un'esempio di codice, se ti si blocca il codice buol dire che hai cannato quialcosa con gli interrupt ;D http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1288131711
@lesto: la gestione con interrupt, provero' ad attuarla piu' avanti con qualche prova.
@Ambrogio: ho trovato qualcosa di simile, nella gestione di un encoder rotativo Arduino Playground - RotaryEncoders. E' qualcosa di simile a quello che mi avevi proposto. L'ho adattata al mio progetto.
quella ch stai proponendo è una soluzione accettabile solo se l'arduinon non deve fare altre cose...
per esempio se esegue un ciclo di 100microsec, e i segnale salita/discesa dura 50microsec, non vedrai mai tutti i cambi. (ricordo che da questo punto di vista le Serial I/O son lentissime)
Invece con gli interrupt te la cavi, salvo che il codice degli interrupt sia più lento da eseguire del tempo tra un'iterrupt e un'altro. gli inteerrupt si chiamano ricorsivamente e quindi per qualche accavallameno arduino ce la fa, ma quando lo stack si riempie sei fregato
p.s. gli interrupt son nati apposta per questo genere di problematiche :
Lesto, la mia non era assolutamente una polemica, mi era solo sembrato che per la sua applicazione fosse stato superfluo usare l'interrupt, alla fine deve sentire il passaggio di una persona con una fotocellula, a meno che non passi flash penso che il segnale duri senza alcun dubbio almeno un ciclo di programma.