Project aiming to make a self-controlled solar reflector

Dependencies:   Accelerometer LCD Inverter Algorithm MotorDriver Anemometer GUI ArduinoJson Misc Definitions Pushbutton WebSocketClient temp_fan

Revision:
27:26f41a320436
Parent:
26:b30a61a55b2f
Child:
28:1b8e1d100b58
--- a/main.cpp	Thu Mar 25 02:30:21 2021 +0000
+++ b/main.cpp	Tue Mar 30 13:05:34 2021 +0000
@@ -31,6 +31,7 @@
 MotorDriver motor;
 LowPowerTimer t,t_mode, t_disp, t_recon;
 int mode = OP_CALIBRATION;
+int prevm = mode;
 EthernetInterface eth;
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -124,8 +125,10 @@
         }
 ////////////////////////////////////////////////////////////////////////////////
         case OP_NORMAL:{
+            if (flag_eth && prevm != mode){gui.state(mode);}
             if (flag_eth){gui.getSunAngle();}
             if (flag_eth){gui.receives(&wthres, &flag_aTrack, &flag_powerOn,&sun_angle);}
+            prevm = mode;
             mode = (flag_powerOn) ? mode : OP_POWER_OFF; if(mode != OP_NORMAL){break;}
             fan.checkTemp(&mode);if(mode != OP_NORMAL){break;}
             ane.checkWind(&mode);if(mode != OP_NORMAL){break;}
@@ -257,9 +260,11 @@
         }
 ////////////////////////////////////////////////////////////////////////////////
         case OP_WIND:{
+            if (flag_eth && prevm != mode){gui.state(mode);}
             if (flag_eth){gui.receives(&wthres, &flag_aTrack, &flag_powerOn,&sun_angle);}
             mode = (flag_powerOn) ? mode : OP_POWER_OFF; if(mode != OP_NORMAL){break;}
             if (flag_eth){gui.windSpeed(ane.getWind());}
+            prevm = mode;
             fan.checkTemp(&mode);if(mode != OP_WIND){break;}
             ane.checkWind(&mode);if(mode != OP_WIND){break;}
             if(timer_read_ms(t_disp) >= LCD_RRATE){
@@ -285,7 +290,9 @@
         }
 ////////////////////////////////////////////////////////////////////////////////
         case OP_MANUAL1:{
+            if (flag_eth && prevm != mode){gui.state(mode);}
             if (flag_eth){gui.windSpeed(ane.getWind());}
+            prevm = mode;
             fan.checkTemp(&mode);if(mode != OP_MANUAL1){break;}
             topL = "MANUAL:M1";
             botL = Misc::itos(ane.getWind(&flag_disp)) + "kph*" + Misc::itos(fan.getTemp()) + "C*"
@@ -350,7 +357,9 @@
         }
 ////////////////////////////////////////////////////////////////////////////////
         case OP_MANUAL2:{
+            if (flag_eth && prevm != mode){gui.state(mode);}
             if (flag_eth){gui.windSpeed(ane.getWind());}
+            prevm = mode;
             fan.checkTemp(&mode);if(mode != OP_MANUAL2){break;}
             topL = "MANUAL:M2";
             botL = Misc::itos(ane.getWind(&flag_disp),3) + "kph  |  " + Misc::itos(fan.getTemp()) + "C";
@@ -414,7 +423,9 @@
         }
 ////////////////////////////////////////////////////////////////////////////////
         case OP_MANUAL_ALL:{
+            if (flag_eth && prevm != mode){gui.state(mode);}
             if (flag_eth){gui.windSpeed(ane.getWind());}
+            prevm = mode;
             fan.checkTemp(&mode);if(mode != OP_MANUAL_ALL){break;}
             topL = "MANUAL:ALL";
             botL = Misc::itos(ane.getWind(&flag_disp),3) + "kph  |  " + Misc::itos(fan.getTemp()) + "C";
@@ -478,7 +489,9 @@
         }
 ////////////////////////////////////////////////////////////////////////////////
         case OP_WSETTING:{
+            if (flag_eth && prevm != mode){gui.state(mode);}
             if (flag_eth){gui.windSpeed(ane.getWind());}
+            prevm = mode;
             fan.checkTemp(&mode);if(mode != OP_WSETTING){break;}
             topL = "Threshold:";
             botL = Misc::itos(wthres) + " kph";
@@ -534,7 +547,9 @@
         }
         ////////////////////////////////////////////////////////////////////////
         case OP_OVERHEAT:{
+            if (flag_eth && prevm != mode){gui.state(mode);}
             if (flag_eth){gui.windSpeed(ane.getWind());}
+            prevm = mode;
             if(timer_read_ms(t_disp) >= LCD_RRATE){
                     topL = (flag_flas)? "*!* OVERHEAT *!*": "    OVERHEAT    ";
                     botL = (flag_flas)? " KEEP DISTANCE " : ("    " + Misc::itos(fan.getTemp(),3) + "C");
@@ -551,7 +566,9 @@
         }
         ////////////////////////////////////////////////////////////////////////
         case OP_OVERHEAT_MAN:{
+            if (flag_eth && prevm != mode){gui.state(mode);}
             if (flag_eth){gui.windSpeed(ane.getWind());}
+            prevm = mode;
             if(timer_read_ms(t_disp) >= LCD_RRATE){
                     topL = (flag_flas)? "*!* OVERHEAT *!*": "    OVERHEAT    ";
                     botL = (flag_flas)? "    PRESS FN    " : ("    " + Misc::itos(fan.getTemp(),3) + "C");
@@ -566,7 +583,9 @@
         }
         ////////////////////////////////////////////////////////////////////////
         case OP_POWER_OFF:{
+            if (flag_eth && prevm != mode){gui.state(mode);}
             if (flag_eth){gui.receives(&wthres, &flag_aTrack, &flag_powerOn,&sun_angle);}
+            prevm = mode;
             if(mode != OP_POWER_OFF){break;}
             if(flag_powerOn){
                 mode = OP_NORMAL;
@@ -590,6 +609,8 @@
         }
         ////////////////////////////////////////////////////////////////////////
         case OP_ATRACK:{
+            if (flag_eth && prevm != mode){gui.state(mode);}
+            prevm = mode;
             flag_aTrack = !flag_aTrack;
             gui.activeTracking(flag_aTrack);
             if (flag_eth){gui.windSpeed(ane.getWind());}
@@ -638,10 +659,6 @@
         }
         ////////////////////////////////////////////////////////////////////////
     }
-    
-    if (flag_eth){
-        gui.state(mode);
-    }
     if(!flag_eth && timer_read_s(t_recon) >= TIME_RECON){
         eth.connect();
         gui.refreshConnection(URL,&flag_eth);