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:
- 26:b30a61a55b2f
- Parent:
- 25:b04abb0930ef
- Child:
- 27:26f41a320436
diff -r b04abb0930ef -r b30a61a55b2f main.cpp --- a/main.cpp Thu Mar 25 01:17:46 2021 +0000 +++ b/main.cpp Thu Mar 25 02:30:21 2021 +0000 @@ -29,7 +29,7 @@ I2C i2c(PIN_SDA,PIN_SCL); Anemometer ane; // MotorDriver motor; -LowPowerTimer t,t_mode, t_disp; +LowPowerTimer t,t_mode, t_disp, t_recon; int mode = OP_CALIBRATION; EthernetInterface eth; @@ -54,9 +54,9 @@ int flag_bres = 0; //Flag for checking button released int flag_flas = 1; //Flag for flashing symbol int flag_cali = 0; //Flag for calibration -bool flag_eth; //Flag for ethernet connection +bool flag_eth = false; //Flag for ethernet connection bool flag_aTrack; //Flag for active tracking (0 - offline, 1 - online) -bool flag_powerOn; +bool flag_powerOn = true; float sun_angle; //PUSH BUTTONS @@ -75,6 +75,7 @@ t.start(); //Start timer t_disp.start(); +t_recon.start(); if (flag_eth){gui.getSunAngle();} if (flag_eth){ topL = "ETHERNET"; @@ -125,6 +126,7 @@ case OP_NORMAL:{ if (flag_eth){gui.getSunAngle();} if (flag_eth){gui.receives(&wthres, &flag_aTrack, &flag_powerOn,&sun_angle);} + 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());} @@ -149,6 +151,7 @@ ang_P = acc.getAngle(S_PANEL); else{ if (flag_eth){gui.receives(&wthres, &flag_aTrack, &flag_powerOn,&sun_angle);} + mode = (flag_powerOn) ? mode : OP_POWER_OFF; if(mode != OP_NORMAL){break;} ang_P = sun_angle; } @@ -161,6 +164,7 @@ while(ang_R <= ref_R1 && !acc.checkAngle(ref_R1,ang_R) && mode == OP_NORMAL) { 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());} fan.checkTemp(&mode);if(mode != OP_NORMAL){break;} ane.checkWind(&mode);if(mode != OP_NORMAL){break;} @@ -180,6 +184,7 @@ while(ang_R >= ref_R1 && !acc.checkAngle(ref_R1,ang_R) && mode == OP_NORMAL) { 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());} fan.checkTemp(&mode);if(mode != OP_NORMAL){break;} ane.checkWind(&mode);if(mode != OP_NORMAL){break;} @@ -203,6 +208,7 @@ while(ang_R <= ref_R2 && !acc.checkAngle(ref_R2,ang_R) && mode == OP_NORMAL) { 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());} fan.checkTemp(&mode);if(mode != OP_NORMAL){break;} ane.checkWind(&mode);if(mode != OP_NORMAL){break;} @@ -222,6 +228,7 @@ while(ang_R >= ref_R2 && !acc.checkAngle(ref_R2,ang_R) && mode == OP_NORMAL) { 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());} fan.checkTemp(&mode);if(mode != OP_NORMAL){break;} ane.checkWind(&mode);if(mode != OP_NORMAL){break;} @@ -251,6 +258,7 @@ //////////////////////////////////////////////////////////////////////////////// case OP_WIND:{ 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());} fan.checkTemp(&mode);if(mode != OP_WIND){break;} ane.checkWind(&mode);if(mode != OP_WIND){break;} @@ -560,27 +568,25 @@ case OP_POWER_OFF:{ if (flag_eth){gui.receives(&wthres, &flag_aTrack, &flag_powerOn,&sun_angle);} if(mode != OP_POWER_OFF){break;} + if(flag_powerOn){ + mode = OP_NORMAL; + break; + } if (flag_eth){gui.windSpeed(ane.getWind());} - fan.checkTemp(&mode);if(mode != OP_WIND){break;} + fan.checkTemp(&mode);if(mode != OP_POWER_OFF){break;} if(timer_read_ms(t_disp) >= LCD_RRATE){ topL = "SLEEP MODE"; flag_flas = !flag_flas; botL = Misc::itos(ane.getWind(&flag_disp),3) + "kph | " + Misc::itos(fan.getTemp()) + "C"; t_disp.reset(); t_disp.start(); - } - if(flag_disp){ lcd.LCD_display(topL,botL); - flag_disp = 0; } //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_ATRACK:{ @@ -603,11 +609,15 @@ topL = "CONNECTING"; botL = ""; lcd.LCD_display(topL,botL); - eth.connect(); - gui.refreshConnection(URL,&flag_eth); - inverter.connect(URL, PORT); + + for(int i = 0; (i < CONN_N && !flag_eth); i++){ + eth.connect(); + gui.refreshConnection(URL,&flag_eth); + wait_us(1000000); + inverter.connect(URL, PORT); + } + wait_us(1000000); bt_fn.setConnected(flag_eth); - wait_us(1000000); if (flag_eth){gui.getSunAngle();} if (flag_eth){ @@ -632,6 +642,12 @@ if (flag_eth){ gui.state(mode); } + if(!flag_eth && timer_read_s(t_recon) >= TIME_RECON){ + eth.connect(); + gui.refreshConnection(URL,&flag_eth); + inverter.connect(URL, PORT); + bt_fn.setConnected(flag_eth); + } wait_us(LOOP_DELAY); flag_disp = 1;