Browse Source

If we don't get a status update for 30 seconds, turn off.

Robert Marshall 5 years ago
parent
commit
1a9532e38a
1 changed files with 21 additions and 3 deletions
  1. 21 3
      Receiver/src/main.cpp

+ 21 - 3
Receiver/src/main.cpp

@@ -3,11 +3,13 @@
 #include <../../Common/LED.cpp>
 #include <../../Common/Variables.cpp>
 
+#define TIMEOUT_DURATION 30000 // 30 seconds
+
 void messageCallback(char *message);
 Receiver _receiver(2, &messageCallback, 9);
 LED _led(5, FADE_IN_DURATION, FADE_OUT_DURATION);
-
-unsigned long lastSwitch = 0;
+unsigned long _lastMessageTime;
+bool _timedOut = false;
 
 bool validateMessage(char* message){
 	return strncmp("LED On: ", message, 8) == 0; //returns 0 on match
@@ -17,11 +19,26 @@ bool parseMessage(char* message){
 	return validateMessage(message) && message[8] == '1';
 }
 
+void resetTimeout(){
+	_lastMessageTime = millis();
+	_timedOut = false;
+}
+
 void messageCallback(char* message){
 	Serial.print("Message: ");
 	Serial.println(message);
 
 	parseMessage(message) ? _led.on() : _led.off();
+
+	resetTimeout();
+}
+
+void timeout(){
+	if (!_timedOut && millis() >= _lastMessageTime + TIMEOUT_DURATION){
+		Serial.println("No message for 30 seconds.");
+		_led.off();
+		_timedOut = true;
+	}
 }
 
 void setup(){
@@ -30,10 +47,11 @@ void setup(){
 	_receiver.setup();
 	Serial.println("Started");
 	_led.off();
-	lastSwitch = millis();
+	_lastMessageTime = millis();
 }
 
 void loop(){
 	_receiver.loop();
 	_led.loop();
+	timeout();
 }