Driver for a binary on/off presence device

Dependents:   mbed-IBooth-ETH

Committer:
andcor02
Date:
Wed Feb 11 12:36:27 2015 +0000
Revision:
7:f12e18827f3e
Parent:
6:b1c665320f0c
Working Set for long distance door

Who changed what in which revision?

UserRevisionLine numberNew 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
andcor02 7:f12e18827f3e 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 }