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:
15:2b3b5d8bf692
Parent:
14:3989d03a8b98
Child:
16:326404a7a8b8
--- a/main.cpp	Fri Mar 12 04:15:49 2021 +0000
+++ b/main.cpp	Fri Mar 12 17:01:39 2021 +0000
@@ -101,7 +101,7 @@
             ane.checkWind(&mode);
             topL = "NORMAL:IDLING";
             if(timer_read_ms(t_disp) >= LCD_RRATE){
-                botL = Misc::itos((int)ane.getWind(&flag_disp)) + " kph";
+                botL = Misc::itos((int)ane.getWind(&flag_disp),3) + "kph";
                 t_disp.reset();
                 t_disp.start();
             }
@@ -122,13 +122,13 @@
                 
                 //Moving Reflector 1                
                 ang_R = acc.getAngle(S_R1);
-                while(ang_R <= ref_R1 && !acc.checkAngle(ref_R1,ang_R))
+                while(ang_R <= ref_R1 && !acc.checkAngle(ref_R1,ang_R) && mode == OP_NORMAL)
                 {
                     ane.checkWind(&mode);
                     if(timer_read_ms(t_disp) >= LCD_RRATE){
-                        topL = (flag_flas)? "NORMAL:R1  <->" : "NORMAL:R1 <<->>";
+                        topL = (flag_flas)? "NORMAL:R1  <=>" : "NORMAL:R1 <-=->";
                         flag_flas = !flag_flas;
-                        botL = Misc::itos((int)ane.getWind(&flag_disp),3) + " kph";
+                        botL = Misc::itos((int)ane.getWind(&flag_disp),3) + "kph";
                         t_disp.reset();
                         t_disp.start();
                     }
@@ -138,13 +138,13 @@
                     motor.moveForward(M1);
                     ang_R = acc.getAngle(S_R1);
                 }
-                while(ang_R >= ref_R1 && !acc.checkAngle(ref_R1,ang_R))
+                while(ang_R >= ref_R1 && !acc.checkAngle(ref_R1,ang_R) && mode == OP_NORMAL)
                 {
                     ane.checkWind(&mode);
                     if(timer_read_ms(t_disp) >= LCD_RRATE){
-                        topL = (flag_flas)? "NORMAL:R1 >>-<<" : "NORMAL:R1 > - <";
+                        topL = (flag_flas)? "NORMAL:R1 > = < " : "NORMAL:R1 ->=<-";
                         flag_flas = !flag_flas;
-                        botL = Misc::itos((int)ane.getWind(&flag_disp),3) + " kph";
+                        botL = Misc::itos((int)ane.getWind(&flag_disp),3) + "kph";
                         t_disp.reset();
                         t_disp.start();
                     }
@@ -158,13 +158,13 @@
                 
                 //Moving Reflector 2
                 ang_R = acc.getAngle(S_R2);
-                while(ang_R <= ref_R2 && !acc.checkAngle(ref_R2,ang_R))
+                while(ang_R <= ref_R2 && !acc.checkAngle(ref_R2,ang_R) && mode == OP_NORMAL)
                 {
                     ane.checkWind(&mode);
                     if(timer_read_ms(t_disp) >= LCD_RRATE){
-                        topL = (flag_flas)? "NORMAL:R2  <->" : "NORMAL:R2 <<->>";
+                        topL = (flag_flas)? "NORMAL:R2  <=>" : "NORMAL:R2 <-=->";
                         flag_flas = !flag_flas;
-                        botL = Misc::itos((int)ane.getWind(&flag_disp),3) + " kph";
+                        botL = Misc::itos((int)ane.getWind(&flag_disp),3) + "kph";
                         t_disp.reset();
                         t_disp.start();
                     }
@@ -174,13 +174,13 @@
                     motor.moveForward(M2);
                     ang_R = acc.getAngle(S_R2);
                 }
-                while(ang_R >= ref_R2 && !acc.checkAngle(ref_R2,ang_R))
+                while(ang_R >= ref_R2 && !acc.checkAngle(ref_R2,ang_R) && mode == OP_NORMAL)
                 {
                     ane.checkWind(&mode);
                     if(timer_read_ms(t_disp) >= LCD_RRATE){
-                        topL = (flag_flas)? "NORMAL:R2 >>-<<" : "NORMAL:R2 > - <";
+                        topL = (flag_flas)? "NORMAL:R2 > = < " : "NORMAL:R2 ->=<-";
                         flag_flas = !flag_flas;
-                        botL = Misc::itos((int)ane.getWind(&flag_disp),3) + " kph";
+                        botL = Misc::itos((int)ane.getWind(&flag_disp),3) + "kph";
                         t_disp.reset();
                         t_disp.start();
                     }
@@ -203,9 +203,10 @@
 ////////////////////////////////////////////////////////////////////////////////
         case OP_WIND:{
             ane.checkWind(&mode);
-            topL = "WIND SAFETY";
             if(timer_read_ms(t_disp) >= LCD_RRATE){
-                botL = Misc::itos((int)ane.getWind(&flag_disp)) + " kph";
+                topL = (flag_flas)? "WIND SAFETY *!*" : "WIND SAFETY";
+                flag_flas = !flag_flas;
+                botL = Misc::itos((int)ane.getWind(&flag_disp),3) + "kph";
                 t_disp.reset();
                 t_disp.start();
             }
@@ -224,7 +225,7 @@
         }
 ////////////////////////////////////////////////////////////////////////////////
         case OP_MANUAL1:{
-            topL = "MANUAL: M1";
+            topL = "MANUAL:M1";
             botL = "";
             if(flag_disp){
                 lcd.LCD_display(topL,botL);
@@ -247,25 +248,31 @@
             }
             ////////////////////////////////////////////////////////////////////
             
-            flag_disp = 1;
             while(bt_inc.read()) //Extend
             {
-                if(flag_disp){
+                if(timer_read_ms(t_disp) >= LCD_RRATE){
+                    topL = (flag_flas)? "MANUAL:M1   <=> " : "MANUAL:M1  <-=->";
+                    flag_flas = !flag_flas;
+                    t_disp.reset();
+                    t_disp.start();
                     botL = "EXTENDING";
                     lcd.LCD_display(topL,botL);
                 }
+                    
                 flag_idle = 0;
-                flag_disp = 0;
                 motor.moveForward(M1);
             }
             while(bt_dec.read()) //Retract
             {
-                if(flag_disp){
+                if(timer_read_ms(t_disp) >= LCD_RRATE){
+                    topL = (flag_flas)? "MANUAL:M1  > = <" : "MANUAL:M1  ->=<-";
+                    flag_flas = !flag_flas;
+                    t_disp.reset();
+                    t_disp.start();
                     botL = "RETRACTING";
                     lcd.LCD_display(topL,botL);
                 }
                 flag_idle = 0;
-                flag_disp = 0;
                 motor.moveBackward(M1);
             }
             if(!bt_inc.read() && !bt_dec.read() && !flag_disp)
@@ -273,11 +280,12 @@
                 flag_disp = 1;
                 motor.stop();
             }
+            flag_time = 1;
             break;
         }
 ////////////////////////////////////////////////////////////////////////////////
         case OP_MANUAL2:{
-            topL = "MANUAL: M2";
+            topL = "MANUAL:M2";
             botL = "";
             if(flag_disp){
                 lcd.LCD_display(topL,botL);
@@ -300,32 +308,99 @@
             }
             ////////////////////////////////////////////////////////////////////
             
-            flag_disp = 1;
             while(bt_inc.read()) //Extend
             {
-                if(flag_disp){
+                if(timer_read_ms(t_disp) >= LCD_RRATE){
+                    topL = (flag_flas)? "MANUAL:M2   <=> " : "MANUAL:M2  <-=->";
+                    flag_flas = !flag_flas;
+                    t_disp.reset();
+                    t_disp.start();
                     botL = "EXTENDING";
                     lcd.LCD_display(topL,botL);
                 }
+                    
                 flag_idle = 0;
-                flag_disp = 0;
-                motor.moveForward(M2);
+                motor.moveForward(M1);
             }
             while(bt_dec.read()) //Retract
             {
-                if(flag_disp){
+                if(timer_read_ms(t_disp) >= LCD_RRATE){
+                    topL = (flag_flas)? "MANUAL:M2  > = <" : "MANUAL:M2  ->=<-";
+                    flag_flas = !flag_flas;
+                    t_disp.reset();
+                    t_disp.start();
                     botL = "RETRACTING";
                     lcd.LCD_display(topL,botL);
                 }
                 flag_idle = 0;
-                flag_disp = 0;
-                motor.moveBackward(M2);
+                motor.moveBackward(M1);
             }
             if(!bt_inc.read() && !bt_dec.read() && !flag_disp)
             {
                 flag_disp = 1;
                 motor.stop();
             }
+            flag_time = 1;
+            break;
+        }
+////////////////////////////////////////////////////////////////////////////////
+        case OP_MANUAL_ALL:{
+            topL = "MANUAL:ALL";
+            botL = "";
+            if(flag_disp){
+                lcd.LCD_display(topL,botL);
+                flag_disp = 0;
+            }
+            
+            //TIMEOUT
+            ////////////////////////////////////////////////////////////////////
+            if(!flag_idle) //Check if button is not pressed
+            {
+                t_mode.reset();
+                t_mode.start();
+                flag_idle = 1; //Indicate idling
+            }
+            else if(timer_read_s(t_mode) > TIME_MANUAL_TIMEOUT)
+            {
+                mode = OP_NORMAL;
+                flag_disp = 1;
+                break;
+            }
+            ////////////////////////////////////////////////////////////////////
+            
+            while(bt_inc.read()) //Extend
+            {
+                if(timer_read_ms(t_disp) >= LCD_RRATE){
+                    topL = (flag_flas)? "MANUAL:ALL  <=> " : "MANUAL:ALL <-=->";
+                    flag_flas = !flag_flas;
+                    t_disp.reset();
+                    t_disp.start();
+                    botL = "EXTENDING";
+                    lcd.LCD_display(topL,botL);
+                }
+                    
+                flag_idle = 0;
+                motor.moveForward(M1);
+            }
+            while(bt_dec.read()) //Retract
+            {
+                if(timer_read_ms(t_disp) >= LCD_RRATE){
+                    topL = (flag_flas)? "MANUAL:ALL > = <" : "MANUAL:ALL ->=<-";
+                    flag_flas = !flag_flas;
+                    t_disp.reset();
+                    t_disp.start();
+                    botL = "RETRACTING";
+                    lcd.LCD_display(topL,botL);
+                }
+                flag_idle = 0;
+                motor.moveBackward(M1);
+            }
+            if(!bt_inc.read() && !bt_dec.read() && !flag_disp)
+            {
+                flag_disp = 1;
+                motor.stop();
+            }
+            flag_time = 1;
             break;
         }
 ////////////////////////////////////////////////////////////////////////////////
@@ -376,7 +451,6 @@
             }
             
             flag_time = 1; //Set the system in motion once done adjusting
-            
             break;
         }
     }