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:
30:7fce3ae08754
Parent:
29:5b14b0ec5efc
Child:
32:7b58f5574b7a
--- a/main.cpp	Tue Mar 30 18:13:01 2021 +0000
+++ b/main.cpp	Thu Apr 01 14:46:41 2021 +0000
@@ -29,7 +29,7 @@
 I2C i2c(PIN_SDA,PIN_SCL);
 Anemometer ane; //
 MotorDriver motor;
-LowPowerTimer t,t_mode, t_disp, t_recon;
+LowPowerTimer t,t_mode, t_disp, t_recon, t_wind;
 int mode = OP_ETHERNET;
 int prevm = mode;
 EthernetInterface eth;
@@ -76,6 +76,7 @@
 
 t.start(); //Start timer
 t_disp.start();
+t_wind.start();
 
 while(1)
 {
@@ -166,7 +167,7 @@
             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;}
-            if (flag_eth){gui->windSpeed(ane.getWind());}
+            if (flag_eth && timer_read_ms(t_wind) >= TIME_GUIWIND){gui->windSpeed(ane.getWind());t_wind.reset();t_wind.start();}
             topL = "NORMAL:IDLING";
             topL = (flag_aTrack) ? topL : "*" + topL;
             if(timer_read_ms(t_disp) >= LCD_RRATE){
@@ -199,7 +200,7 @@
                 {
                     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());}
+                    if (flag_eth && timer_read_ms(t_wind) >= TIME_GUIWIND){gui->windSpeed(ane.getWind());t_wind.reset();t_wind.start();}
                     fan.checkTemp(&mode);if(mode != OP_NORMAL){break;}
                     ane.checkWind(&mode);if(mode != OP_NORMAL){break;}
                     if(timer_read_ms(t_disp) >= LCD_RRATE){
@@ -219,7 +220,7 @@
                 {
                     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());}
+                    if (flag_eth && timer_read_ms(t_wind) >= TIME_GUIWIND){gui->windSpeed(ane.getWind());t_wind.reset();t_wind.start();}
                     fan.checkTemp(&mode);if(mode != OP_NORMAL){break;}
                     ane.checkWind(&mode);if(mode != OP_NORMAL){break;}
                     if(timer_read_ms(t_disp) >= LCD_RRATE){
@@ -243,7 +244,7 @@
                 {
                     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());}
+                    if (flag_eth && timer_read_ms(t_wind) >= TIME_GUIWIND){gui->windSpeed(ane.getWind());t_wind.reset();t_wind.start();}
                     fan.checkTemp(&mode);if(mode != OP_NORMAL){break;}
                     ane.checkWind(&mode);if(mode != OP_NORMAL){break;}
                     if(timer_read_ms(t_disp) >= LCD_RRATE){
@@ -263,7 +264,7 @@
                 {
                     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());}
+                    if (flag_eth && timer_read_ms(t_wind) >= TIME_GUIWIND){gui->windSpeed(ane.getWind());t_wind.reset();t_wind.start();}
                     fan.checkTemp(&mode);if(mode != OP_NORMAL){break;}
                     ane.checkWind(&mode);if(mode != OP_NORMAL){break;}
                     if(timer_read_ms(t_disp) >= LCD_RRATE){
@@ -294,7 +295,7 @@
             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_WIND){break;}
-            if (flag_eth){gui->windSpeed(ane.getWind());}
+            if (flag_eth && timer_read_ms(t_wind) >= TIME_GUIWIND){gui->windSpeed(ane.getWind());t_wind.reset();t_wind.start();}
             prevm = mode;
             fan.checkTemp(&mode);if(mode != OP_WIND){break;}
             ane.checkWind(&mode);if(mode != OP_WIND){break;}
@@ -311,15 +312,13 @@
             //Move all motor backward
             motor.moveBackward(M_ALL);
             flag_time = 1; //Set the system in motion once windspeed has subsided
-            break;
-            
             flag_idle = 0;
             break;
         }
 ////////////////////////////////////////////////////////////////////////////////
         case OP_MANUAL1:{
             if (flag_eth && prevm != mode){gui->state(mode);}
-            if (flag_eth){gui->windSpeed(ane.getWind());}
+            if (flag_eth && timer_read_ms(t_wind) >= TIME_GUIWIND){gui->windSpeed(ane.getWind());t_wind.reset();t_wind.start();}
             prevm = mode;
             fan.checkTemp(&mode);if(mode != OP_MANUAL1){break;}
             topL = "MANUAL:M1";
@@ -348,7 +347,7 @@
             
             while(bt_inc.read()) //Extend
             {
-                if (flag_eth){gui->windSpeed(ane.getWind());}
+                if (flag_eth && timer_read_ms(t_wind) >= TIME_GUIWIND){gui->windSpeed(ane.getWind());t_wind.reset();t_wind.start();}
                 if(timer_read_ms(t_disp) >= LCD_RRATE){
                     topL = (flag_flas)? "MANUAL:M1   <=> " : "MANUAL:M1  <-=->";
                     flag_flas = !flag_flas;
@@ -363,7 +362,7 @@
             }
             while(bt_dec.read()) //Retract
             {
-                if (flag_eth){gui->windSpeed(ane.getWind());}
+                if (flag_eth && timer_read_ms(t_wind) >= TIME_GUIWIND){gui->windSpeed(ane.getWind());t_wind.reset();t_wind.start();}
                 if(timer_read_ms(t_disp) >= LCD_RRATE){
                     topL = (flag_flas)? "MANUAL:M1  > = <" : "MANUAL:M1  ->=<-";
                     flag_flas = !flag_flas;
@@ -386,7 +385,7 @@
 ////////////////////////////////////////////////////////////////////////////////
         case OP_MANUAL2:{
             if (flag_eth && prevm != mode){gui->state(mode);}
-            if (flag_eth){gui->windSpeed(ane.getWind());}
+            if (flag_eth && timer_read_ms(t_wind) >= TIME_GUIWIND){gui->windSpeed(ane.getWind());t_wind.reset();t_wind.start();}
             prevm = mode;
             fan.checkTemp(&mode);if(mode != OP_MANUAL2){break;}
             topL = "MANUAL:M2";
@@ -415,7 +414,7 @@
             
             while(bt_inc.read()) //Extend
             {
-                if (flag_eth){gui->windSpeed(ane.getWind());}
+                if (flag_eth && timer_read_ms(t_wind) >= TIME_GUIWIND){gui->windSpeed(ane.getWind());t_wind.reset();t_wind.start();}
                 if(timer_read_ms(t_disp) >= LCD_RRATE){
                     topL = (flag_flas)? "MANUAL:M2   <=> " : "MANUAL:M2  <-=->";
                     flag_flas = !flag_flas;
@@ -430,7 +429,7 @@
             }
             while(bt_dec.read()) //Retract
             {
-                if (flag_eth){gui->windSpeed(ane.getWind());}
+                if (flag_eth && timer_read_ms(t_wind) >= TIME_GUIWIND){gui->windSpeed(ane.getWind());t_wind.reset();t_wind.start();}
                 if(timer_read_ms(t_disp) >= LCD_RRATE){
                     topL = (flag_flas)? "MANUAL:M2  > = <" : "MANUAL:M2  ->=<-";
                     flag_flas = !flag_flas;
@@ -453,7 +452,7 @@
 ////////////////////////////////////////////////////////////////////////////////
         case OP_MANUAL_ALL:{
             if (flag_eth && prevm != mode){gui->state(mode);}
-            if (flag_eth){gui->windSpeed(ane.getWind());}
+            if (flag_eth && timer_read_ms(t_wind) >= TIME_GUIWIND){gui->windSpeed(ane.getWind());t_wind.reset();t_wind.start();}
             prevm = mode;
             fan.checkTemp(&mode);if(mode != OP_MANUAL_ALL){break;}
             topL = "MANUAL:ALL";
@@ -482,7 +481,7 @@
             
             while(bt_inc.read()) //Extend
             {
-                if (flag_eth){gui->windSpeed(ane.getWind());}
+                if (flag_eth && timer_read_ms(t_wind) >= TIME_GUIWIND){gui->windSpeed(ane.getWind());t_wind.reset();t_wind.start();}
                 if(timer_read_ms(t_disp) >= LCD_RRATE){
                     topL = (flag_flas)? "MANUAL:ALL  <=> " : "MANUAL:ALL <-=->";
                     flag_flas = !flag_flas;
@@ -497,7 +496,7 @@
             }
             while(bt_dec.read()) //Retract
             {
-                if (flag_eth){gui->windSpeed(ane.getWind());}
+                if (flag_eth && timer_read_ms(t_wind) >= TIME_GUIWIND){gui->windSpeed(ane.getWind());t_wind.reset();t_wind.start();}
                 if(timer_read_ms(t_disp) >= LCD_RRATE){
                     topL = (flag_flas)? "MANUAL:ALL > = <" : "MANUAL:ALL ->=<-";
                     flag_flas = !flag_flas;
@@ -520,7 +519,7 @@
 ////////////////////////////////////////////////////////////////////////////////
         case OP_WSETTING:{
             if (flag_eth && prevm != mode){gui->state(mode);}
-            if (flag_eth){gui->windSpeed(ane.getWind());}
+            if (flag_eth && timer_read_ms(t_wind) >= TIME_GUIWIND){gui->windSpeed(ane.getWind());t_wind.reset();t_wind.start();}
             prevm = mode;
             fan.checkTemp(&mode);if(mode != OP_WSETTING){break;}
             topL = "Threshold:";
@@ -578,7 +577,7 @@
         ////////////////////////////////////////////////////////////////////////
         case OP_OVERHEAT:{
             if (flag_eth && prevm != mode){gui->state(mode);}
-            if (flag_eth){gui->windSpeed(ane.getWind());}
+            if (flag_eth && timer_read_ms(t_wind) >= TIME_GUIWIND){gui->windSpeed(ane.getWind());t_wind.reset();t_wind.start();}
             prevm = mode;
             if(timer_read_ms(t_disp) >= LCD_RRATE){
                     topL = (flag_flas)? "*!* OVERHEAT *!*": "    OVERHEAT    ";
@@ -597,7 +596,7 @@
         ////////////////////////////////////////////////////////////////////////
         case OP_OVERHEAT_MAN:{
             if (flag_eth && prevm != mode){gui->state(mode);}
-            if (flag_eth){gui->windSpeed(ane.getWind());}
+            if (flag_eth && timer_read_ms(t_wind) >= TIME_GUIWIND){gui->windSpeed(ane.getWind());t_wind.reset();t_wind.start();}
             prevm = mode;
             if(timer_read_ms(t_disp) >= LCD_RRATE){
                     topL = (flag_flas)? "*!* OVERHEAT *!*": "    OVERHEAT    ";
@@ -621,7 +620,7 @@
                 mode = OP_NORMAL;
                 break;
             }
-            if (flag_eth){gui->windSpeed(ane.getWind());}
+            if (flag_eth && timer_read_ms(t_wind) >= TIME_GUIWIND){gui->windSpeed(ane.getWind());t_wind.reset();t_wind.start();}
             fan.checkTemp(&mode);if(mode != OP_POWER_OFF){break;}
             if(timer_read_ms(t_disp) >= LCD_RRATE){
                 topL = "SLEEP MODE";
@@ -643,7 +642,7 @@
             prevm = mode;
             flag_aTrack = !flag_aTrack;
             gui->activeTracking(flag_aTrack);
-            if (flag_eth){gui->windSpeed(ane.getWind());}
+            if (flag_eth && timer_read_ms(t_wind) >= TIME_GUIWIND){gui->windSpeed(ane.getWind());t_wind.reset();t_wind.start();}
             fan.checkTemp(&mode);if(mode != OP_ATRACK){break;}
             topL = "TRACKING MODE:";
             botL = (flag_aTrack) ? "ACTIVE (ACC)" : "AUTO (ONLINE)";