Driver for a binary on/off presence device
Presence.cpp@6:b1c665320f0c, 2015-02-09 (annotated)
- Committer:
- erigow01
- Date:
- Mon Feb 09 16:36:27 2015 +0000
- Revision:
- 6:b1c665320f0c
- Parent:
- 5:1d5ca464ac89
- Parent:
- 4:ac5cfd7e90ea
- Child:
- 7:f12e18827f3e
Merged
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
erigow01 | 0:21320a151be0 | 1 | /* |
andcor02 | 1:9d2b641a9280 | 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 | |
andcor02 | 1:9d2b641a9280 | 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) { |
andcor02 | 1:9d2b641a9280 | 20 | // _myint.rise(this, &presence::presence_interrupt_off); |
andcor02 | 1:9d2b641a9280 | 21 | // _myint.fall(this, &presence::presence_interrupt_on); |
erigow01 | 0:21320a151be0 | 22 | // } else { |
andcor02 | 1:9d2b641a9280 | 23 | // _myint.rise(this, &presence::presence_interrupt_on); |
andcor02 | 1:9d2b641a9280 | 24 | // _myint.fall(this, &presence::presence_interrupt_off); |
erigow01 | 0:21320a151be0 | 25 | // } |
erigow01 | 0:21320a151be0 | 26 | _detection=false; |
erigow01 | 5:1d5ca464ac89 | 27 | debounce_timer.start(); |
erigow01 | 0:21320a151be0 | 28 | _led1=1; |
erigow01 | 0:21320a151be0 | 29 | |
erigow01 | 0:21320a151be0 | 30 | } |
erigow01 | 0:21320a151be0 | 31 | |
andcor02 | 1:9d2b641a9280 | 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 | |
andcor02 | 1:9d2b641a9280 | 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 | 5:1d5ca464ac89 | 47 | |
erigow01 | 0:21320a151be0 | 48 | bool Presence::isPresent(){ |
erigow01 | 5:1d5ca464ac89 | 49 | bool new_detection = (_true_on_rise && _myint == 1) || (!_true_on_rise && _myint == 0); |
erigow01 | 5:1d5ca464ac89 | 50 | if(new_detection)debounce_timer.reset(); |
erigow01 | 5:1d5ca464ac89 | 51 | //Poll the pin and update value... |
erigow01 | 5:1d5ca464ac89 | 52 | if(!_detection || debounce_timer.read_ms() > debounce_ms) { |
erigow01 | 5:1d5ca464ac89 | 53 | _detection = new_detection; |
erigow01 | 0:21320a151be0 | 54 | if(_detection) _led1 = 0; else _led1 = 1; |
erigow01 | 5:1d5ca464ac89 | 55 | } |
erigow01 | 0:21320a151be0 | 56 | return _detection; |
erigow01 | 0:21320a151be0 | 57 | } |