]> git.0d.be Git - PanikSwitch.git/blobdiff - FINAL2013V2.ino
use a simple int for active selection
[PanikSwitch.git] / FINAL2013V2.ino
index a486110e1625f991b2af29dc2c90fa1ffffd9f61..c9f3829e6d9a0a00e13d93daf013b8b09181430f 100644 (file)
@@ -22,9 +22,6 @@
 // include third party libraries
 #include "WebServer.h"
 
-// include in-house libs
-#include "PanikSwitch.h"    // contains variable types for panik switch
-
 // define SD and Ethernet select ports
 #define  SD_SELECT            4
 #define  ETHERNET_SELECT     10
 #define NONSTOP_VIA_STUD1       14   // is nonstop coming out of studio 1
 #define NONSTOP_VIA_STUD2       15   // is nonstop coming out of studio 2
 
+/* status */
+#define NONSTOP 0
+#define STUDIO1 1
+#define STUDIO2 2
+
+
+/* relay positions */
+typedef enum { RELAY_STATE_OPEN, RELAY_STATE_CLOSED } relayState_t;
 
 
 /* define an array with led pins,
@@ -62,10 +67,10 @@ const int ledsArray[] = { RELAY_GREEN_LEDS, RELAY_RED_LEDS, RELAY_YELLOW_LEDS };
 /* activeSelection is the variable that holds the active output of the switch
    it is declared as an attribute that keeps its value between arduino resets
 */
-switchSelection_t activeSelection = 0;  // __attribute__ ((section (".noinit")));
+int activeSelection = NONSTOP;
 
 // variables and timers for blinking selection (selected but not confirmed)
-switchSelection_t blinkingSelection = nonstop;
+int blinkingSelection = NONSTOP;
 bool blinkingLedState = RELAY_STATE_CLOSED;
 unsigned long blinkingStartTime = 0, blinkingAbortTime = 0;
 
@@ -107,6 +112,21 @@ IPAddress udp_remote_ip(192, 168, 17, 224);
 typedef enum responseStatus { NO_POST, POST_OK, POST_ERROR };
 
 
+inline void notify_udp()  // notify over UDP
+{
+#ifdef ENABLE_UDP
+  char str_selection[20];
+  snprintf(str_selection, 19, "{\"active\": %d}", activeSelection);
+  #ifdef SERIAL_DEBUG
+  Serial.println(F("Sending UDP... "));
+  Serial.println(str_selection);
+  #endif
+  Udp.beginPacket(udp_remote_ip, 1312);
+  Udp.write(str_selection);
+  Udp.endPacket();
+#endif
+}
+
 // web resource
 void webCmd(WebServer &server, WebServer::ConnectionType type, char *url_tail, bool tail_complete)
 {
@@ -130,25 +150,12 @@ void webCmd(WebServer &server, WebServer::ConnectionType type, char *url_tail, b
     while (server.readPOSTparam(name, NAMELEN, value, VALUELEN))
     {
       if (strcmp(name, "s") == 0) {
-        char str_selection[20];
-
         digitalWrite(ledsArray[activeSelection], RELAY_STATE_CLOSED);
-        blinkingSelection = static_cast<switchSelection_t>(atoi(value));
-        activeSelection = static_cast<switchSelection_t>(atoi(value));
+        blinkingSelection = atoi(value);
+        activeSelection = atoi(value);
         response_status = POST_OK;
 
-        #ifdef ENABLE_UDP
-        // notify over UDP
-        snprintf(str_selection, 19, "{\"active\": %d}", activeSelection);
-        #ifdef SERIAL_DEBUG
-        Serial.println(F("Sending UDP... "));
-        Serial.println(str_selection);
-        #endif
-        Udp.beginPacket(udp_remote_ip, 1312);
-        Udp.write(str_selection);
-        Udp.endPacket();
-        #endif
-
+        notify_udp();
       }
     }
   }
@@ -173,7 +180,7 @@ void webCmd(WebServer &server, WebServer::ConnectionType type, char *url_tail, b
 // setup function
 void setup()
 {
-  blinkingSelection = activeSelection = nonstop;
+  blinkingSelection = activeSelection = NONSTOP;
 
   // open serial communication for debugging
   Serial.begin(9600);
@@ -263,6 +270,9 @@ void loop()
       #endif
       digitalWrite(ledsArray[blinkingSelection], RELAY_STATE_CLOSED);
       blinkingSelection++;
+      if (blinkingSelection > STUDIO2) {
+        blinkingSelection = NONSTOP;
+      }
       blinkingStartTime = millis(),
       blinkingAbortTime = millis();
       blinkingLedState = RELAY_STATE_OPEN;
@@ -291,24 +301,13 @@ void loop()
       #endif
       if (activeSelection != blinkingSelection)
       {
-        char str_selection[20];
         digitalWrite(ledsArray[activeSelection], RELAY_STATE_CLOSED);
         activeSelection = blinkingSelection;  // relay states must be changed now
         #ifdef SERIAL_DEBUG
         Serial.print(F("Active Selection: "));
         Serial.println(activeSelection);
         #endif
-        #ifdef ENABLE_UDP
-        // notify over UDP
-        snprintf(str_selection, 19, "{\"active\": %d}", activeSelection);
-        #ifdef SERIAL_DEBUG
-        Serial.println(F("Sending UDP... "));
-        Serial.println(str_selection);
-        #endif
-        Udp.beginPacket(udp_remote_ip, 1312);
-        Udp.write(str_selection);
-        Udp.endPacket();
-        #endif
+        notify_udp();
         break;
       }
   }
@@ -337,17 +336,17 @@ void loop()
   digitalWrite(ledsArray[activeSelection], RELAY_STATE_OPEN);
 
   // update audio channel relays
-  if (activeSelection == nonstop)
+  if (activeSelection == NONSTOP)
   {
     digitalWrite(RELAY_NONSTOP_OR_STUD, RELAY_STATE_CLOSED);
     digitalWrite(RELAY_STUD1_OR_STUD2, RELAY_STATE_CLOSED);
   }
-  else if (activeSelection == studio1)
+  else if (activeSelection == STUDIO1)
   {
     digitalWrite(RELAY_NONSTOP_OR_STUD, RELAY_STATE_OPEN);
     digitalWrite(RELAY_STUD1_OR_STUD2, RELAY_STATE_CLOSED);
   }
-  else if (activeSelection == studio2)
+  else if (activeSelection == STUDIO2)
   {
     digitalWrite(RELAY_NONSTOP_OR_STUD, RELAY_STATE_OPEN);
     digitalWrite(RELAY_STUD1_OR_STUD2, RELAY_STATE_OPEN);