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:
16:326404a7a8b8
Parent:
15:2b3b5d8bf692
Child:
17:238ccf7e3676
--- a/main.cpp	Fri Mar 12 17:01:39 2021 +0000
+++ b/main.cpp	Wed Mar 17 14:21:51 2021 +0000
@@ -16,6 +16,7 @@
 #include "PinAssignment.h"
 #include "LCD.h"
 #include "Misc.h"
+#include "temp_fans.h"
 #include <string>
 
 #define timer_read_s(x)     chrono::duration_cast<chrono::seconds>((x).elapsed_time()).count()
@@ -35,6 +36,7 @@
 i2c.frequency(I2C_FREQ);
 Accelerometer acc(&i2c); //Accelerometer
 LCD lcd(&i2c);
+temp_fans fan;
 
 float ang_P,ang_R;
 float ref_R1,ref_R2;
@@ -88,9 +90,9 @@
         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);
+                botL = Misc::itos(acc.getAngle(S_R1),3) + 
+                        "||" + Misc::itos(acc.getAngle(S_PANEL),3) + 
+                        "||" + Misc::itos(acc.getAngle(S_R2),3);
                 lcd.LCD_display(topL,botL);
                 flag_disp = 0;
                 wait_us(LCD_RRATE);
@@ -98,10 +100,11 @@
         }
 ////////////////////////////////////////////////////////////////////////////////
         case OP_NORMAL:{
-            ane.checkWind(&mode);
+            fan.checkTemp(&mode);if(mode != OP_NORMAL){break;}
+            ane.checkWind(&mode);if(mode != OP_NORMAL){break;}
             topL = "NORMAL:IDLING";
             if(timer_read_ms(t_disp) >= LCD_RRATE){
-                botL = Misc::itos((int)ane.getWind(&flag_disp),3) + "kph";
+                botL = Misc::itos(ane.getWind(&flag_disp),3) + "kph  |  " + Misc::itos(fan.getTemp()) + "C";
                 t_disp.reset();
                 t_disp.start();
             }
@@ -124,33 +127,31 @@
                 ang_R = acc.getAngle(S_R1);
                 while(ang_R <= ref_R1 && !acc.checkAngle(ref_R1,ang_R) && mode == OP_NORMAL)
                 {
-                    ane.checkWind(&mode);
+                    fan.checkTemp(&mode);if(mode != OP_NORMAL){break;}
+                    ane.checkWind(&mode);if(mode != OP_NORMAL){break;}
                     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";
+                        botL = Misc::itos(ane.getWind(&flag_disp),3) + "kph  |  " + Misc::itos(fan.getTemp()) + "C";
                         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) && mode == OP_NORMAL)
                 {
-                    ane.checkWind(&mode);
+                    fan.checkTemp(&mode);if(mode != OP_NORMAL){break;}
+                    ane.checkWind(&mode);if(mode != OP_NORMAL){break;}
                     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";
+                        botL = Misc::itos(ane.getWind(&flag_disp),3) + "kph  |  " + Misc::itos(fan.getTemp()) + "C";
                         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);
                 }
@@ -160,33 +161,31 @@
                 ang_R = acc.getAngle(S_R2);
                 while(ang_R <= ref_R2 && !acc.checkAngle(ref_R2,ang_R) && mode == OP_NORMAL)
                 {
-                    ane.checkWind(&mode);
+                    fan.checkTemp(&mode);if(mode != OP_NORMAL){break;}
+                    ane.checkWind(&mode);if(mode != OP_NORMAL){break;}
                     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";
+                        botL = Misc::itos(ane.getWind(&flag_disp),3) + "kph  |  " + Misc::itos(fan.getTemp()) + "C";
                         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) && mode == OP_NORMAL)
                 {
-                    ane.checkWind(&mode);
+                    fan.checkTemp(&mode);if(mode != OP_NORMAL){break;}
+                    ane.checkWind(&mode);if(mode != OP_NORMAL){break;}
                     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";
+                        botL = Misc::itos(ane.getWind(&flag_disp),3) + "kph  |  " + Misc::itos(fan.getTemp()) + "C";
                         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);
                 }
@@ -202,11 +201,12 @@
         }
 ////////////////////////////////////////////////////////////////////////////////
         case OP_WIND:{
-            ane.checkWind(&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){
                 topL = (flag_flas)? "WIND SAFETY *!*" : "WIND SAFETY";
                 flag_flas = !flag_flas;
-                botL = Misc::itos((int)ane.getWind(&flag_disp),3) + "kph";
+                botL = Misc::itos(ane.getWind(&flag_disp),3) + "kph  |  " + Misc::itos(fan.getTemp()) + "C";
                 t_disp.reset();
                 t_disp.start();
             }
@@ -225,8 +225,9 @@
         }
 ////////////////////////////////////////////////////////////////////////////////
         case OP_MANUAL1:{
+            fan.checkTemp(&mode);if(mode != OP_MANUAL1){break;}
             topL = "MANUAL:M1";
-            botL = "";
+            botL = Misc::itos(ane.getWind(&flag_disp),3) + "kph  |  " + Misc::itos(fan.getTemp()) + "C";
             if(flag_disp){
                 lcd.LCD_display(topL,botL);
                 flag_disp = 0;
@@ -285,8 +286,9 @@
         }
 ////////////////////////////////////////////////////////////////////////////////
         case OP_MANUAL2:{
+            fan.checkTemp(&mode);if(mode != OP_MANUAL2){break;}
             topL = "MANUAL:M2";
-            botL = "";
+            botL = Misc::itos(ane.getWind(&flag_disp),3) + "kph  |  " + Misc::itos(fan.getTemp()) + "C";
             if(flag_disp){
                 lcd.LCD_display(topL,botL);
                 flag_disp = 0;
@@ -320,7 +322,7 @@
                 }
                     
                 flag_idle = 0;
-                motor.moveForward(M1);
+                motor.moveForward(M2);
             }
             while(bt_dec.read()) //Retract
             {
@@ -333,7 +335,7 @@
                     lcd.LCD_display(topL,botL);
                 }
                 flag_idle = 0;
-                motor.moveBackward(M1);
+                motor.moveBackward(M2);
             }
             if(!bt_inc.read() && !bt_dec.read() && !flag_disp)
             {
@@ -345,8 +347,9 @@
         }
 ////////////////////////////////////////////////////////////////////////////////
         case OP_MANUAL_ALL:{
+            fan.checkTemp(&mode);if(mode != OP_MANUAL_ALL){break;}
             topL = "MANUAL:ALL";
-            botL = "";
+            botL = Misc::itos(ane.getWind(&flag_disp),3) + "kph  |  " + Misc::itos(fan.getTemp()) + "C";
             if(flag_disp){
                 lcd.LCD_display(topL,botL);
                 flag_disp = 0;
@@ -380,7 +383,7 @@
                 }
                     
                 flag_idle = 0;
-                motor.moveForward(M1);
+                motor.moveForward(M_ALL);
             }
             while(bt_dec.read()) //Retract
             {
@@ -393,7 +396,7 @@
                     lcd.LCD_display(topL,botL);
                 }
                 flag_idle = 0;
-                motor.moveBackward(M1);
+                motor.moveBackward(M_ALL);
             }
             if(!bt_inc.read() && !bt_dec.read() && !flag_disp)
             {
@@ -405,6 +408,7 @@
         }
 ////////////////////////////////////////////////////////////////////////////////
         case OP_WSETTING:{
+            fan.checkTemp(&mode);if(mode != OP_WSETTING){break;}
             topL = "Threshold:";
             botL = Misc::itos(wthres) + " kph";
             if(flag_disp){
@@ -453,6 +457,36 @@
             flag_time = 1; //Set the system in motion once done adjusting
             break;
         }
+        ////////////////////////////////////////////////////////////////////////
+        case OP_OVERHEAT:{
+            if(timer_read_ms(t_disp) >= LCD_RRATE){
+                    topL = (flag_flas)? "*!* OVERHEAT *!*": "    OVERHEAT    ";
+                    botL = (flag_flas)? " KEEP DISTANCE " : ("    " + Misc::itos(fan.getTemp(),3) + "C");
+                    flag_flas = !flag_flas;
+                    t_disp.reset();
+                    t_disp.start();
+                    lcd.LCD_display(topL,botL);
+            }
+            motor.moveBackward(M_ALL);
+            fan.checkTemp(&mode);
+            flag_disp = 1;
+            flag_time = 1;
+            break;
+        }
+        ////////////////////////////////////////////////////////////////////////
+        case OP_OVERHEAT_MAN:{
+            if(timer_read_ms(t_disp) >= LCD_RRATE){
+                    topL = (flag_flas)? "*!* OVERHEAT *!*": "    OVERHEAT    ";
+                    botL = (flag_flas)? "    PRESS FN    " : ("    " + Misc::itos(fan.getTemp(),3) + "C");
+                    flag_flas = !flag_flas;
+                    t_disp.reset();
+                    t_disp.start();
+                    lcd.LCD_display(topL,botL);
+            }
+            motor.stop();
+            flag_disp = 1;
+            break;
+        }
     }
     wait_us(LOOP_DELAY);
 }