#INCLUDE "plumbing.module" VAL pir.pin IS 5 : PROC monitor.pin (VAL INT pin, suspend.time, CHAN SIGNAL out!, term?, suspend?) --general pin interrupt monitor LEVEL now, prev: TIMER tim: INT t: SEQ digital.read (pin, prev) INITIAL BOOL active IS TRUE: WHILE active SEQ tim ? t PRI ALT term ? SIGNAL active := FALSE suspend ? SIGNAL delay (suspend.time) tim ? AFTER t PLUS 10 SEQ digital.read (pin, now) IF (now = LOW) AND (prev = HIGH) SEQ out ! SIGNAL TRUE SKIP prev := now : PROC main() CHAN SIGNAL pir, pir.term, pir.suspend: INITIAL BOOL on IS FALSE: SEQ digital.mode (pir.pin, INPUT) digital.mode (13, OUTPUT) serial.setup (TX0, 9600) PAR monitor.pin (pir.pin, 0, pir!, pir.term?, pir.suspend?) WHILE TRUE SEQ pir ? SIGNAL IF NOT on SEQ serial.write.byte (TX0, #AA) digital.write (13, HIGH) on := TRUE on SEQ serial.write.byte (TX0, #AB) digital.write (13, LOW) on := FALSE :