Driver for a binary on/off presence device
Presence.cpp@0:21320a151be0, 2014-12-10 (annotated)
- Committer:
- erigow01
- Date:
- Wed Dec 10 14:06:35 2014 +0000
- Revision:
- 0:21320a151be0
- Child:
- 1:9d2b641a9280
- Child:
- 2:4ab67ace383b
- Child:
- 5:1d5ca464ac89
Driver for a binary (on/off) 'Presence' device.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
erigow01 | 0:21320a151be0 | 1 | /* |
erigow01 | 0:21320a151be0 | 2 | Presence.cpp - presence sensor library |
erigow01 | 0:21320a151be0 | 3 | Developed by Andrea Corrado & Eric Gowland |
erigow01 | 0:21320a151be0 | 4 | |
erigow01 | 0:21320a151be0 | 5 | Connect to a hardware device that is boolean present/not present. Such as PIR or Rangefinder with appropriate signalling. |
erigow01 | 0:21320a151be0 | 6 | Also drives LED as presence indicator. |
erigow01 | 0:21320a151be0 | 7 | */ |
erigow01 | 0:21320a151be0 | 8 | |
erigow01 | 0:21320a151be0 | 9 | |
erigow01 | 0:21320a151be0 | 10 | #include "mbed.h" |
erigow01 | 0:21320a151be0 | 11 | #include "Presence.h" |
erigow01 | 0:21320a151be0 | 12 | |
erigow01 | 0:21320a151be0 | 13 | |
erigow01 | 0:21320a151be0 | 14 | |
erigow01 | 0:21320a151be0 | 15 | Presence::Presence(PinName pin, bool true_on_rise, int debounce_time_ms):_myint(pin), _led1(LED1) |
erigow01 | 0:21320a151be0 | 16 | { |
erigow01 | 0:21320a151be0 | 17 | debounce_ms = debounce_time_ms; |
erigow01 | 0:21320a151be0 | 18 | _true_on_rise = true_on_rise; |
erigow01 | 0:21320a151be0 | 19 | // if(true_on_rise) { |
erigow01 | 0:21320a151be0 | 20 | // _myint.rise(this, &Presence::presence_interrupt_off); |
erigow01 | 0:21320a151be0 | 21 | // _myint.fall(this, &Presence::presence_interrupt_on); |
erigow01 | 0:21320a151be0 | 22 | // } else { |
erigow01 | 0:21320a151be0 | 23 | // _myint.rise(this, &Presence::presence_interrupt_on); |
erigow01 | 0:21320a151be0 | 24 | // _myint.fall(this, &Presence::presence_interrupt_off); |
erigow01 | 0:21320a151be0 | 25 | // } |
erigow01 | 0:21320a151be0 | 26 | _detection=false; |
erigow01 | 0:21320a151be0 | 27 | // debounce_timer.start(); |
erigow01 | 0:21320a151be0 | 28 | _led1=1; |
erigow01 | 0:21320a151be0 | 29 | |
erigow01 | 0:21320a151be0 | 30 | } |
erigow01 | 0:21320a151be0 | 31 | |
erigow01 | 0:21320a151be0 | 32 | void Presence::presence_interrupt_off(){ |
erigow01 | 0:21320a151be0 | 33 | if(debounce_timer.read_ms() > debounce_ms) { |
erigow01 | 0:21320a151be0 | 34 | _detection=false; |
erigow01 | 0:21320a151be0 | 35 | _led1=1; |
erigow01 | 0:21320a151be0 | 36 | } |
erigow01 | 0:21320a151be0 | 37 | } |
erigow01 | 0:21320a151be0 | 38 | |
erigow01 | 0:21320a151be0 | 39 | void Presence::presence_interrupt_on() //Detection of motion. |
erigow01 | 0:21320a151be0 | 40 | { |
erigow01 | 0:21320a151be0 | 41 | //Always trigger detection.. |
erigow01 | 0:21320a151be0 | 42 | _detection=true; |
erigow01 | 0:21320a151be0 | 43 | _led1=0; |
erigow01 | 0:21320a151be0 | 44 | debounce_timer.reset(); // Reset counter to 0... |
erigow01 | 0:21320a151be0 | 45 | } |
erigow01 | 0:21320a151be0 | 46 | |
erigow01 | 0:21320a151be0 | 47 | bool Presence::isPresent(){ |
erigow01 | 0:21320a151be0 | 48 | // if (debounce_timer.read_ms() > debounce_ms) { |
erigow01 | 0:21320a151be0 | 49 | //Poll the pin and update value... |
erigow01 | 0:21320a151be0 | 50 | _detection = (_true_on_rise && _myint == 1) || (!_true_on_rise && _myint == 0); |
erigow01 | 0:21320a151be0 | 51 | if(_detection) _led1 = 0; else _led1 = 1; |
erigow01 | 0:21320a151be0 | 52 | // } |
erigow01 | 0:21320a151be0 | 53 | return _detection; |
erigow01 | 0:21320a151be0 | 54 | } |