Driver for a binary on/off presence device

Dependents:   mbed-IBooth-ETH

Revision:
0:21320a151be0
Child:
1:9d2b641a9280
Child:
2:4ab67ace383b
Child:
5:1d5ca464ac89
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Presence.cpp	Wed Dec 10 14:06:35 2014 +0000
@@ -0,0 +1,54 @@
+/*
+    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;
+}
\ No newline at end of file