Project aiming to make a self-controlled solar reflector
Dependencies: Accelerometer LCD Inverter Algorithm MotorDriver Anemometer GUI ArduinoJson Misc Definitions Pushbutton WebSocketClient temp_fan
Diff: main.cpp
- 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); }