Driver for a binary on/off presence device

Dependents:   mbed-IBooth-ETH

Presence.cpp

Committer:
erigow01
Date:
2014-12-10
Revision:
0:21320a151be0
Child:
1:9d2b641a9280
Child:
2:4ab67ace383b
Child:
5:1d5ca464ac89

File content as of revision 0:21320a151be0:

/*
    Presence.cpp -  presence sensor library
    Developed by Andrea Corrado & Eric Gowland
    
    Connect to a hardware device that is boolean present/not present. Such as PIR or Rangefinder with appropriate signalling.
    Also drives LED as presence indicator.
*/


#include "mbed.h"
#include "Presence.h"



Presence::Presence(PinName pin, bool true_on_rise, int debounce_time_ms):_myint(pin), _led1(LED1)
{
    debounce_ms = debounce_time_ms;
    _true_on_rise = true_on_rise;
//    if(true_on_rise) {
//        _myint.rise(this, &Presence::presence_interrupt_off);
//        _myint.fall(this, &Presence::presence_interrupt_on);
//    } else {
//        _myint.rise(this, &Presence::presence_interrupt_on);
//        _myint.fall(this, &Presence::presence_interrupt_off);
//    }
    _detection=false;
//    debounce_timer.start();
    _led1=1;

}

void Presence::presence_interrupt_off(){
    if(debounce_timer.read_ms() > debounce_ms) {
        _detection=false;
        _led1=1;
    }
}

void Presence::presence_interrupt_on() //Detection of motion.
{
    //Always trigger detection..
    _detection=true;
    _led1=0;
    debounce_timer.reset(); // Reset counter to 0...
}

bool Presence::isPresent(){
//    if (debounce_timer.read_ms() > debounce_ms) {
        //Poll the pin and update value...
        _detection = (_true_on_rise && _myint == 1) || (!_true_on_rise && _myint == 0);
        if(_detection) _led1 = 0; else _led1 = 1;
//    }
    return _detection;
}