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:
14:3989d03a8b98
Parent:
12:14bac44e33b9
Child:
15:2b3b5d8bf692
--- a/main.cpp	Fri Mar 12 03:20:04 2021 +0000
+++ b/main.cpp	Fri Mar 12 04:15:49 2021 +0000
@@ -47,6 +47,7 @@
 int flag_idle = 0; //Idling time
 int flag_disp = 1; //Anti-flickering
 int flag_bres = 0; //Flag for checking button released
+int flag_flas = 1; //Flag for flashing symbol
 
 //PUSH BUTTONS
 Pushbutton bt_fn(PIN_BTFN,&mode,&flag_disp);
@@ -84,10 +85,22 @@
             break;
         }
 ////////////////////////////////////////////////////////////////////////////////
+        case OP_CONFIRM:{
+            while(mode == OP_CONFIRM){
+                topL = "R1 || P || R2";
+                botL = Misc::itos((int)acc.getAngle(S_R1),3) + 
+                        "||" + Misc::itos((int)acc.getAngle(S_PANEL),3) + 
+                        "||" + Misc::itos((int)acc.getAngle(S_R2),3);
+                lcd.LCD_display(topL,botL);
+                flag_disp = 0;
+                wait_us(LCD_RRATE);
+            }
+        }
+////////////////////////////////////////////////////////////////////////////////
         case OP_NORMAL:{
             ane.checkWind(&mode);
             topL = "NORMAL:IDLING";
-            if(timer_read_ms(t_disp) >= LCD_WRATE){
+            if(timer_read_ms(t_disp) >= LCD_RRATE){
                 botL = Misc::itos((int)ane.getWind(&flag_disp)) + " kph";
                 t_disp.reset();
                 t_disp.start();
@@ -107,26 +120,36 @@
                 ref_R1 = Algorithm::calcAngle(1,ang_P);
                 ref_R2 = Algorithm::calcAngle(2,ang_P);
                 
-                //Moving Reflector 1
-                topL = "NORMAL:MOVING R1";
-                if(timer_read_ms(t_disp) >= LCD_WRATE){
-                    botL = Misc::itos((int)ane.getWind(&flag_disp)) + " kph";
-                    t_disp.reset();
-                    t_disp.start();
-                }
-                lcd.LCD_display(topL,botL);
-                
+                //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))
                 {
                     ane.checkWind(&mode);
+                    if(timer_read_ms(t_disp) >= LCD_RRATE){
+                        topL = (flag_flas)? "NORMAL:R1  <->" : "NORMAL:R1 <<->>";
+                        flag_flas = !flag_flas;
+                        botL = Misc::itos((int)ane.getWind(&flag_disp),3) + " kph";
+                        t_disp.reset();
+                        t_disp.start();
+                    }
+                    lcd.LCD_display(topL,botL);
+                    
                     if(mode != OP_NORMAL) {break;}
                     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))
                 {
                     ane.checkWind(&mode);
+                    if(timer_read_ms(t_disp) >= LCD_RRATE){
+                        topL = (flag_flas)? "NORMAL:R1 >>-<<" : "NORMAL:R1 > - <";
+                        flag_flas = !flag_flas;
+                        botL = Misc::itos((int)ane.getWind(&flag_disp),3) + " kph";
+                        t_disp.reset();
+                        t_disp.start();
+                    }
+                    lcd.LCD_display(topL,botL);
+                    
                     if(mode != OP_NORMAL) {break;}
                     motor.moveBackward(M1);
                     ang_R = acc.getAngle(S_R1);
@@ -134,25 +157,35 @@
                 motor.stop();
                 
                 //Moving Reflector 2
-                topL = "NORMAL:MOVING R1";
-                if(timer_read_ms(t_disp) >= LCD_WRATE){
-                    botL = Misc::itos((int)ane.getWind(&flag_disp)) + " kph";
-                    t_disp.reset();
-                    t_disp.start();
-                }
-                lcd.LCD_display(topL,botL);
-                    
                 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))
                 {
                     ane.checkWind(&mode);
+                    if(timer_read_ms(t_disp) >= LCD_RRATE){
+                        topL = (flag_flas)? "NORMAL:R2  <->" : "NORMAL:R2 <<->>";
+                        flag_flas = !flag_flas;
+                        botL = Misc::itos((int)ane.getWind(&flag_disp),3) + " kph";
+                        t_disp.reset();
+                        t_disp.start();
+                    }
+                    lcd.LCD_display(topL,botL);
+                
                     if(mode != OP_NORMAL) {break;}
                     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))
                 {
                     ane.checkWind(&mode);
+                    if(timer_read_ms(t_disp) >= LCD_RRATE){
+                        topL = (flag_flas)? "NORMAL:R2 >>-<<" : "NORMAL:R2 > - <";
+                        flag_flas = !flag_flas;
+                        botL = Misc::itos((int)ane.getWind(&flag_disp),3) + " kph";
+                        t_disp.reset();
+                        t_disp.start();
+                    }
+                    lcd.LCD_display(topL,botL);
+                    
                     if(mode != OP_NORMAL) {break;}
                     motor.moveBackward(M2);
                     ang_R = acc.getAngle(S_R2);
@@ -171,7 +204,7 @@
         case OP_WIND:{
             ane.checkWind(&mode);
             topL = "WIND SAFETY";
-            if(timer_read_ms(t_disp) >= LCD_WRATE){
+            if(timer_read_ms(t_disp) >= LCD_RRATE){
                 botL = Misc::itos((int)ane.getWind(&flag_disp)) + " kph";
                 t_disp.reset();
                 t_disp.start();