Keith G / Mbed 2 deprecated IOTM-Crossing

Dependencies:   EthernetInterface MQTT mbed-dsp mbed-rtos mbed

Fork of KL25Z_FFT_Demo_tony by Leicester Hackspace

Revision:
5:4152530c0cf5
Parent:
3:54760764be66
Child:
6:78106c78e577
--- a/main.cpp	Fri Jan 08 15:51:04 2016 +0000
+++ b/main.cpp	Mon Jan 11 11:03:24 2016 +0000
@@ -16,6 +16,9 @@
 
 enum Mode {RESPONCIVE, OVERRIDE};
 
+//timer
+Ticker timer;
+
 //buffers
 char mqtt_buffer[100];
 MQTT::Message message;
@@ -39,11 +42,16 @@
     checkPresence = true;
 }
 
+void timeout() {
+    if(mode==RESPONCIVE) pelican = false;
+    timer.detach();
+}
+
 void messageArrived(MQTT::MessageData& md) {
     MQTT::Message &msg = md.message;
     if(msg.payloadlen>0) {
         switch(*(char*)msg.payload) {
-            case 'r': case 'R': mode = RESPONCIVE; pelican=personPresent; break;
+            case 'r': case 'R': mode = RESPONCIVE; if(!personPresent) timer.attach(&timeout,3.0f); break;
             case 'o': case 'O': mode = OVERRIDE; pelican=true; break;
         }
     }
@@ -80,13 +88,7 @@
         if(checkPresence) {
             float s = sensor;
             if((s<0.5f)!=personPresent) { //state changed
-                if(personPresent) {
-                    //last person left
-                    personPresent = false;
-                } else {
-                    //person arrived
-                    personPresent = true;
-                }
+                personPresent = !personPresent;
                 
                 sprintf(mqtt_buffer, "{\"personPresent\":%d}", personPresent);
                 message.qos = MQTT::QOS0;   // Send at least once
@@ -95,8 +97,9 @@
                 message.payload = (void*)mqtt_buffer;
                 m_client.publish(personTopic, message);
                 
-                if(mode==RESPONCIVE) {
-                    pelican = personPresent;
+                if(personPresent) {
+                    timer.attach(&timeout,3.0f);
+                    pelican = true;
                 }
             }
             checkPresence = false;