Project aiming to make a self-controlled solar reflector

Dependencies:   Accelerometer LCD Inverter Algorithm MotorDriver Anemometer GUI ArduinoJson Misc Definitions Pushbutton WebSocketClient temp_fan

Committer:
khaiminhvn
Date:
Tue Mar 30 13:05:34 2021 +0000
Revision:
27:26f41a320436
Parent:
26:b30a61a55b2f
Child:
28:1b8e1d100b58
Reduce the frequency of sending mode to the server

Who changed what in which revision?

UserRevisionLine numberNew contents of line
khaiminhvn 0:74d6e93ec977 1 /*
khaiminhvn 0:74d6e93ec977 2 For settings of system behaviour, see Defs_sett.h
khaiminhvn 0:74d6e93ec977 3 For pin assignment list, see PinAssignment.h
khaiminhvn 0:74d6e93ec977 4 */
khaiminhvn 0:74d6e93ec977 5
khaiminhvn 0:74d6e93ec977 6 //INCLUDES
khaiminhvn 0:74d6e93ec977 7 #include "mbed.h"
khaiminhvn 6:0b7a6e51cdf8 8 #include "stdio.h"
khaiminhvn 2:944511c6c55f 9 #include "string" // std::string, std::to_string
khaiminhvn 0:74d6e93ec977 10 #include "Accelerometer.h"
khaiminhvn 0:74d6e93ec977 11 #include "Anemometer.h"
khaiminhvn 0:74d6e93ec977 12 #include "Algorithm.h"
khaiminhvn 0:74d6e93ec977 13 #include "MotorDriver.h"
khaiminhvn 0:74d6e93ec977 14 #include "Defs_Sett.h"
khaiminhvn 0:74d6e93ec977 15 #include "Pushbutton.h"
khaiminhvn 7:2b6438e586e6 16 #include "PinAssignment.h"
khaiminhvn 2:944511c6c55f 17 #include "LCD.h"
khaiminhvn 9:6e950b9a9a81 18 #include "Misc.h"
khaiminhvn 16:326404a7a8b8 19 #include "temp_fans.h"
khaiminhvn 6:0b7a6e51cdf8 20 #include <string>
jump_man 17:238ccf7e3676 21 #include "EthernetInterface.h"
jump_man 17:238ccf7e3676 22 #include "Inverter.h"
jump_man 17:238ccf7e3676 23 #include "GUI.h"
khaiminhvn 0:74d6e93ec977 24
khaiminhvn 0:74d6e93ec977 25 #define timer_read_s(x) chrono::duration_cast<chrono::seconds>((x).elapsed_time()).count()
khaiminhvn 11:2ade1ad7bad6 26 #define timer_read_ms(x) chrono::duration_cast<chrono::milliseconds>((x).elapsed_time()).count()
khaiminhvn 0:74d6e93ec977 27
khaiminhvn 0:74d6e93ec977 28 //Initialize Global Variables
khaiminhvn 7:2b6438e586e6 29 I2C i2c(PIN_SDA,PIN_SCL);
khaiminhvn 0:74d6e93ec977 30 Anemometer ane; //
khaiminhvn 11:2ade1ad7bad6 31 MotorDriver motor;
khaiminhvn 26:b30a61a55b2f 32 LowPowerTimer t,t_mode, t_disp, t_recon;
khaiminhvn 7:2b6438e586e6 33 int mode = OP_CALIBRATION;
khaiminhvn 27:26f41a320436 34 int prevm = mode;
jump_man 17:238ccf7e3676 35 EthernetInterface eth;
khaiminhvn 0:74d6e93ec977 36
khaiminhvn 0:74d6e93ec977 37 ////////////////////////////////////////////////////////////////////////////////
khaiminhvn 0:74d6e93ec977 38 ////////////////////////////////////////////////////////////////////////////////
khaiminhvn 0:74d6e93ec977 39 int main()
khaiminhvn 0:74d6e93ec977 40 {
khaiminhvn 7:2b6438e586e6 41 i2c.frequency(I2C_FREQ);
khaiminhvn 10:566529fff615 42 Accelerometer acc(&i2c); //Accelerometer
khaiminhvn 7:2b6438e586e6 43 LCD lcd(&i2c);
khaiminhvn 16:326404a7a8b8 44 temp_fans fan;
khaiminhvn 7:2b6438e586e6 45
khaiminhvn 0:74d6e93ec977 46 float ang_P,ang_R;
khaiminhvn 0:74d6e93ec977 47 float ref_R1,ref_R2;
khaiminhvn 0:74d6e93ec977 48 int t_elapsed;
khaiminhvn 0:74d6e93ec977 49 int wthres = WIND_THRES_INIT;
khaiminhvn 6:0b7a6e51cdf8 50
khaiminhvn 8:a1481d5f0572 51 //FLAGS
khaiminhvn 8:a1481d5f0572 52 int flag_time = 1; //Normal mode time
khaiminhvn 8:a1481d5f0572 53 int flag_idle = 0; //Idling time
khaiminhvn 8:a1481d5f0572 54 int flag_disp = 1; //Anti-flickering
khaiminhvn 9:6e950b9a9a81 55 int flag_bres = 0; //Flag for checking button released
khaiminhvn 14:3989d03a8b98 56 int flag_flas = 1; //Flag for flashing symbol
khaiminhvn 24:ea7abc25a697 57 int flag_cali = 0; //Flag for calibration
khaiminhvn 26:b30a61a55b2f 58 bool flag_eth = false; //Flag for ethernet connection
jump_man 17:238ccf7e3676 59 bool flag_aTrack; //Flag for active tracking (0 - offline, 1 - online)
khaiminhvn 26:b30a61a55b2f 60 bool flag_powerOn = true;
khaiminhvn 20:0a6609515810 61 float sun_angle;
khaiminhvn 8:a1481d5f0572 62
khaiminhvn 8:a1481d5f0572 63 //PUSH BUTTONS
khaiminhvn 8:a1481d5f0572 64 Pushbutton bt_inc(PIN_BTINC);
khaiminhvn 8:a1481d5f0572 65 Pushbutton bt_dec(PIN_BTDEC);
khaiminhvn 20:0a6609515810 66 Pushbutton bt_fn(PIN_BTFN,&mode,&flag_disp,PIN_BTINC);
khaiminhvn 8:a1481d5f0572 67
khaiminhvn 11:2ade1ad7bad6 68 string topL = "INITIALIZING";
khaiminhvn 11:2ade1ad7bad6 69 string botL = "";
khaiminhvn 11:2ade1ad7bad6 70 lcd.LCD_display(topL, botL);
khaiminhvn 0:74d6e93ec977 71
jump_man 17:238ccf7e3676 72 eth.connect();
jump_man 17:238ccf7e3676 73 GUI gui("ws://int-sol-ref.herokuapp.com/", &eth, &flag_eth);
jump_man 17:238ccf7e3676 74 Inverter inverter("int-sol-ref.herokuapp.com", 80, &eth);
khaiminhvn 20:0a6609515810 75 bt_fn.setConnected(flag_eth);
khaiminhvn 20:0a6609515810 76
khaiminhvn 0:74d6e93ec977 77 t.start(); //Start timer
khaiminhvn 10:566529fff615 78 t_disp.start();
khaiminhvn 26:b30a61a55b2f 79 t_recon.start();
khaiminhvn 20:0a6609515810 80 if (flag_eth){gui.getSunAngle();}
khaiminhvn 22:6c8535dab84a 81 if (flag_eth){
khaiminhvn 22:6c8535dab84a 82 topL = "ETHERNET";
khaiminhvn 22:6c8535dab84a 83 botL = "CONNECTED";
khaiminhvn 22:6c8535dab84a 84 lcd.LCD_display(topL, botL);
khaiminhvn 22:6c8535dab84a 85 }
khaiminhvn 22:6c8535dab84a 86 else{
khaiminhvn 22:6c8535dab84a 87 topL = "ETHERNET";
khaiminhvn 22:6c8535dab84a 88 botL = "NOT CONNECTED";
khaiminhvn 22:6c8535dab84a 89 lcd.LCD_display(topL, botL);
khaiminhvn 22:6c8535dab84a 90 }
khaiminhvn 11:2ade1ad7bad6 91 wait_us(1000000);
khaiminhvn 0:74d6e93ec977 92
khaiminhvn 11:2ade1ad7bad6 93 topL = "PUT SENSORS IN";
khaiminhvn 11:2ade1ad7bad6 94 botL = "CALIBRATION SLOT";
khaiminhvn 6:0b7a6e51cdf8 95 lcd.LCD_display(topL, botL);
khaiminhvn 6:0b7a6e51cdf8 96
khaiminhvn 0:74d6e93ec977 97 while(1)
khaiminhvn 0:74d6e93ec977 98 {
khaiminhvn 0:74d6e93ec977 99 switch(mode)
khaiminhvn 0:74d6e93ec977 100 {
khaiminhvn 7:2b6438e586e6 101 case OP_PLACEMENT:{
khaiminhvn 24:ea7abc25a697 102 if(flag_cali == 0){
khaiminhvn 24:ea7abc25a697 103 topL = "CALIBRATING";
khaiminhvn 24:ea7abc25a697 104 botL = "";
khaiminhvn 24:ea7abc25a697 105 lcd.LCD_display(topL,botL);
khaiminhvn 24:ea7abc25a697 106 acc.calibrate();
khaiminhvn 24:ea7abc25a697 107 topL = "PUT SENSOR ON";
khaiminhvn 24:ea7abc25a697 108 botL = "PANEL&REFLECTORS";
khaiminhvn 24:ea7abc25a697 109 lcd.LCD_display(topL,botL);
khaiminhvn 24:ea7abc25a697 110 flag_cali = 1;
khaiminhvn 24:ea7abc25a697 111 }
khaiminhvn 7:2b6438e586e6 112 break;
khaiminhvn 8:a1481d5f0572 113 }
khaiminhvn 0:74d6e93ec977 114 ////////////////////////////////////////////////////////////////////////////////
khaiminhvn 14:3989d03a8b98 115 case OP_CONFIRM:{
khaiminhvn 14:3989d03a8b98 116 while(mode == OP_CONFIRM){
khaiminhvn 14:3989d03a8b98 117 topL = "R1 || P || R2";
khaiminhvn 16:326404a7a8b8 118 botL = Misc::itos(acc.getAngle(S_R1),3) +
khaiminhvn 16:326404a7a8b8 119 "||" + Misc::itos(acc.getAngle(S_PANEL),3) +
khaiminhvn 16:326404a7a8b8 120 "||" + Misc::itos(acc.getAngle(S_R2),3);
khaiminhvn 14:3989d03a8b98 121 lcd.LCD_display(topL,botL);
khaiminhvn 14:3989d03a8b98 122 flag_disp = 0;
khaiminhvn 14:3989d03a8b98 123 wait_us(LCD_RRATE);
khaiminhvn 14:3989d03a8b98 124 }
khaiminhvn 14:3989d03a8b98 125 }
khaiminhvn 14:3989d03a8b98 126 ////////////////////////////////////////////////////////////////////////////////
khaiminhvn 7:2b6438e586e6 127 case OP_NORMAL:{
khaiminhvn 27:26f41a320436 128 if (flag_eth && prevm != mode){gui.state(mode);}
khaiminhvn 20:0a6609515810 129 if (flag_eth){gui.getSunAngle();}
khaiminhvn 20:0a6609515810 130 if (flag_eth){gui.receives(&wthres, &flag_aTrack, &flag_powerOn,&sun_angle);}
khaiminhvn 27:26f41a320436 131 prevm = mode;
khaiminhvn 26:b30a61a55b2f 132 mode = (flag_powerOn) ? mode : OP_POWER_OFF; if(mode != OP_NORMAL){break;}
khaiminhvn 16:326404a7a8b8 133 fan.checkTemp(&mode);if(mode != OP_NORMAL){break;}
khaiminhvn 16:326404a7a8b8 134 ane.checkWind(&mode);if(mode != OP_NORMAL){break;}
jump_man 17:238ccf7e3676 135 if (flag_eth){gui.windSpeed(ane.getWind());}
khaiminhvn 12:14bac44e33b9 136 topL = "NORMAL:IDLING";
khaiminhvn 24:ea7abc25a697 137 topL = (flag_aTrack) ? topL : "*" + topL;
khaiminhvn 14:3989d03a8b98 138 if(timer_read_ms(t_disp) >= LCD_RRATE){
khaiminhvn 25:b04abb0930ef 139 botL = Misc::itos(ane.getWind(&flag_disp)) + "kph*" + Misc::itos(fan.getTemp()) + "C*"
khaiminhvn 25:b04abb0930ef 140 + ((flag_eth)?Misc::itos(inverter.getPower()):"---") + "W";
khaiminhvn 10:566529fff615 141 t_disp.reset();
khaiminhvn 10:566529fff615 142 t_disp.start();
khaiminhvn 10:566529fff615 143 }
khaiminhvn 8:a1481d5f0572 144 if(flag_disp){
khaiminhvn 8:a1481d5f0572 145 lcd.LCD_display(topL,botL);
khaiminhvn 8:a1481d5f0572 146 flag_disp = 0;
khaiminhvn 8:a1481d5f0572 147 }
khaiminhvn 0:74d6e93ec977 148
khaiminhvn 12:14bac44e33b9 149 if(flag_time) //If delay interval has passed
khaiminhvn 12:14bac44e33b9 150 {
khaiminhvn 12:14bac44e33b9 151 ane.checkWind(&mode);
khaiminhvn 12:14bac44e33b9 152 //Get Angle of Panel
khaiminhvn 20:0a6609515810 153 if(flag_aTrack)
khaiminhvn 20:0a6609515810 154 ang_P = acc.getAngle(S_PANEL);
khaiminhvn 20:0a6609515810 155 else{
khaiminhvn 20:0a6609515810 156 if (flag_eth){gui.receives(&wthres, &flag_aTrack, &flag_powerOn,&sun_angle);}
khaiminhvn 26:b30a61a55b2f 157 mode = (flag_powerOn) ? mode : OP_POWER_OFF; if(mode != OP_NORMAL){break;}
khaiminhvn 20:0a6609515810 158 ang_P = sun_angle;
khaiminhvn 20:0a6609515810 159 }
khaiminhvn 12:14bac44e33b9 160
khaiminhvn 12:14bac44e33b9 161 //Calculate the Angle of Both Reflector
khaiminhvn 12:14bac44e33b9 162 ref_R1 = Algorithm::calcAngle(1,ang_P);
khaiminhvn 12:14bac44e33b9 163 ref_R2 = Algorithm::calcAngle(2,ang_P);
khaiminhvn 12:14bac44e33b9 164
khaiminhvn 14:3989d03a8b98 165 //Moving Reflector 1
khaiminhvn 12:14bac44e33b9 166 ang_R = acc.getAngle(S_R1);
khaiminhvn 15:2b3b5d8bf692 167 while(ang_R <= ref_R1 && !acc.checkAngle(ref_R1,ang_R) && mode == OP_NORMAL)
khaiminhvn 12:14bac44e33b9 168 {
khaiminhvn 20:0a6609515810 169 if (flag_eth){gui.receives(&wthres, &flag_aTrack, &flag_powerOn,&sun_angle);}
khaiminhvn 26:b30a61a55b2f 170 mode = (flag_powerOn) ? mode : OP_POWER_OFF; if(mode != OP_NORMAL){break;}
jump_man 17:238ccf7e3676 171 if (flag_eth){gui.windSpeed(ane.getWind());}
khaiminhvn 16:326404a7a8b8 172 fan.checkTemp(&mode);if(mode != OP_NORMAL){break;}
khaiminhvn 16:326404a7a8b8 173 ane.checkWind(&mode);if(mode != OP_NORMAL){break;}
khaiminhvn 14:3989d03a8b98 174 if(timer_read_ms(t_disp) >= LCD_RRATE){
khaiminhvn 15:2b3b5d8bf692 175 topL = (flag_flas)? "NORMAL:R1 <=>" : "NORMAL:R1 <-=->";
khaiminhvn 24:ea7abc25a697 176 topL = (flag_aTrack) ? topL : "*" + topL;
khaiminhvn 14:3989d03a8b98 177 flag_flas = !flag_flas;
khaiminhvn 25:b04abb0930ef 178 botL = Misc::itos(ane.getWind(&flag_disp)) + "kph*" + Misc::itos(fan.getTemp()) + "C*"
khaiminhvn 25:b04abb0930ef 179 + ((flag_eth)?Misc::itos(inverter.getPower()):"---") + "W";
khaiminhvn 14:3989d03a8b98 180 t_disp.reset();
khaiminhvn 14:3989d03a8b98 181 t_disp.start();
khaiminhvn 14:3989d03a8b98 182 }
khaiminhvn 14:3989d03a8b98 183 lcd.LCD_display(topL,botL);
khaiminhvn 12:14bac44e33b9 184 motor.moveForward(M1);
khaiminhvn 12:14bac44e33b9 185 ang_R = acc.getAngle(S_R1);
khaiminhvn 12:14bac44e33b9 186 }
khaiminhvn 15:2b3b5d8bf692 187 while(ang_R >= ref_R1 && !acc.checkAngle(ref_R1,ang_R) && mode == OP_NORMAL)
khaiminhvn 12:14bac44e33b9 188 {
khaiminhvn 20:0a6609515810 189 if (flag_eth){gui.receives(&wthres, &flag_aTrack, &flag_powerOn,&sun_angle);}
khaiminhvn 26:b30a61a55b2f 190 mode = (flag_powerOn) ? mode : OP_POWER_OFF; if(mode != OP_NORMAL){break;}
jump_man 17:238ccf7e3676 191 if (flag_eth){gui.windSpeed(ane.getWind());}
khaiminhvn 16:326404a7a8b8 192 fan.checkTemp(&mode);if(mode != OP_NORMAL){break;}
khaiminhvn 16:326404a7a8b8 193 ane.checkWind(&mode);if(mode != OP_NORMAL){break;}
khaiminhvn 14:3989d03a8b98 194 if(timer_read_ms(t_disp) >= LCD_RRATE){
khaiminhvn 15:2b3b5d8bf692 195 topL = (flag_flas)? "NORMAL:R1 > = < " : "NORMAL:R1 ->=<-";
khaiminhvn 24:ea7abc25a697 196 topL = (flag_aTrack) ? topL : "*" + topL;
khaiminhvn 14:3989d03a8b98 197 flag_flas = !flag_flas;
khaiminhvn 25:b04abb0930ef 198 botL = Misc::itos(ane.getWind(&flag_disp)) + "kph*" + Misc::itos(fan.getTemp()) + "C*"
khaiminhvn 25:b04abb0930ef 199 + ((flag_eth)?Misc::itos(inverter.getPower()):"---") + "W";
khaiminhvn 14:3989d03a8b98 200 t_disp.reset();
khaiminhvn 14:3989d03a8b98 201 t_disp.start();
khaiminhvn 14:3989d03a8b98 202 }
khaiminhvn 14:3989d03a8b98 203 lcd.LCD_display(topL,botL);
khaiminhvn 12:14bac44e33b9 204 motor.moveBackward(M1);
khaiminhvn 12:14bac44e33b9 205 ang_R = acc.getAngle(S_R1);
khaiminhvn 12:14bac44e33b9 206 }
khaiminhvn 12:14bac44e33b9 207 motor.stop();
khaiminhvn 12:14bac44e33b9 208
khaiminhvn 12:14bac44e33b9 209 //Moving Reflector 2
khaiminhvn 12:14bac44e33b9 210 ang_R = acc.getAngle(S_R2);
khaiminhvn 15:2b3b5d8bf692 211 while(ang_R <= ref_R2 && !acc.checkAngle(ref_R2,ang_R) && mode == OP_NORMAL)
khaiminhvn 12:14bac44e33b9 212 {
khaiminhvn 20:0a6609515810 213 if (flag_eth){gui.receives(&wthres, &flag_aTrack, &flag_powerOn,&sun_angle);}
khaiminhvn 26:b30a61a55b2f 214 mode = (flag_powerOn) ? mode : OP_POWER_OFF; if(mode != OP_NORMAL){break;}
jump_man 17:238ccf7e3676 215 if (flag_eth){gui.windSpeed(ane.getWind());}
khaiminhvn 16:326404a7a8b8 216 fan.checkTemp(&mode);if(mode != OP_NORMAL){break;}
khaiminhvn 16:326404a7a8b8 217 ane.checkWind(&mode);if(mode != OP_NORMAL){break;}
khaiminhvn 14:3989d03a8b98 218 if(timer_read_ms(t_disp) >= LCD_RRATE){
khaiminhvn 15:2b3b5d8bf692 219 topL = (flag_flas)? "NORMAL:R2 <=>" : "NORMAL:R2 <-=->";
khaiminhvn 24:ea7abc25a697 220 topL = (flag_aTrack) ? topL : "*" + topL;
khaiminhvn 14:3989d03a8b98 221 flag_flas = !flag_flas;
khaiminhvn 25:b04abb0930ef 222 botL = Misc::itos(ane.getWind(&flag_disp)) + "kph*" + Misc::itos(fan.getTemp()) + "C*"
khaiminhvn 25:b04abb0930ef 223 + ((flag_eth)?Misc::itos(inverter.getPower()):"---") + "W";
khaiminhvn 14:3989d03a8b98 224 t_disp.reset();
khaiminhvn 14:3989d03a8b98 225 t_disp.start();
khaiminhvn 14:3989d03a8b98 226 }
khaiminhvn 14:3989d03a8b98 227 lcd.LCD_display(topL,botL);
khaiminhvn 12:14bac44e33b9 228 motor.moveForward(M2);
khaiminhvn 12:14bac44e33b9 229 ang_R = acc.getAngle(S_R2);
khaiminhvn 12:14bac44e33b9 230 }
khaiminhvn 15:2b3b5d8bf692 231 while(ang_R >= ref_R2 && !acc.checkAngle(ref_R2,ang_R) && mode == OP_NORMAL)
khaiminhvn 12:14bac44e33b9 232 {
khaiminhvn 20:0a6609515810 233 if (flag_eth){gui.receives(&wthres, &flag_aTrack, &flag_powerOn,&sun_angle);}
khaiminhvn 26:b30a61a55b2f 234 mode = (flag_powerOn) ? mode : OP_POWER_OFF; if(mode != OP_NORMAL){break;}
jump_man 17:238ccf7e3676 235 if (flag_eth){gui.windSpeed(ane.getWind());}
khaiminhvn 16:326404a7a8b8 236 fan.checkTemp(&mode);if(mode != OP_NORMAL){break;}
khaiminhvn 16:326404a7a8b8 237 ane.checkWind(&mode);if(mode != OP_NORMAL){break;}
khaiminhvn 14:3989d03a8b98 238 if(timer_read_ms(t_disp) >= LCD_RRATE){
khaiminhvn 15:2b3b5d8bf692 239 topL = (flag_flas)? "NORMAL:R2 > = < " : "NORMAL:R2 ->=<-";
khaiminhvn 24:ea7abc25a697 240 topL = (flag_aTrack) ? topL : "*" + topL;
khaiminhvn 14:3989d03a8b98 241 flag_flas = !flag_flas;
khaiminhvn 25:b04abb0930ef 242 botL = Misc::itos(ane.getWind(&flag_disp)) + "kph*" + Misc::itos(fan.getTemp()) + "C*"
khaiminhvn 25:b04abb0930ef 243 + ((flag_eth)?Misc::itos(inverter.getPower()):"---") + "W";
khaiminhvn 14:3989d03a8b98 244 t_disp.reset();
khaiminhvn 14:3989d03a8b98 245 t_disp.start();
khaiminhvn 14:3989d03a8b98 246 }
khaiminhvn 14:3989d03a8b98 247 lcd.LCD_display(topL,botL);
khaiminhvn 12:14bac44e33b9 248 motor.moveBackward(M2);
khaiminhvn 12:14bac44e33b9 249 ang_R = acc.getAngle(S_R2);
khaiminhvn 12:14bac44e33b9 250 }
khaiminhvn 12:14bac44e33b9 251 motor.stop();
khaiminhvn 12:14bac44e33b9 252 flag_time = 0; //Reset timer flag
khaiminhvn 12:14bac44e33b9 253 flag_disp = 1; //Reset display flag
khaiminhvn 12:14bac44e33b9 254 t.reset(); //Reset timer
khaiminhvn 12:14bac44e33b9 255 }
khaiminhvn 12:14bac44e33b9 256 t_elapsed = (int)timer_read_s(t);
khaiminhvn 12:14bac44e33b9 257 flag_time = (t_elapsed >= TIME_NORMAL) ? 1 : 0; //Enable flag if delay interval has passed
khaiminhvn 9:6e950b9a9a81 258 flag_idle = 0;
khaiminhvn 7:2b6438e586e6 259 break;
khaiminhvn 8:a1481d5f0572 260 }
khaiminhvn 7:2b6438e586e6 261 ////////////////////////////////////////////////////////////////////////////////
khaiminhvn 7:2b6438e586e6 262 case OP_WIND:{
khaiminhvn 27:26f41a320436 263 if (flag_eth && prevm != mode){gui.state(mode);}
khaiminhvn 20:0a6609515810 264 if (flag_eth){gui.receives(&wthres, &flag_aTrack, &flag_powerOn,&sun_angle);}
khaiminhvn 26:b30a61a55b2f 265 mode = (flag_powerOn) ? mode : OP_POWER_OFF; if(mode != OP_NORMAL){break;}
jump_man 17:238ccf7e3676 266 if (flag_eth){gui.windSpeed(ane.getWind());}
khaiminhvn 27:26f41a320436 267 prevm = mode;
khaiminhvn 16:326404a7a8b8 268 fan.checkTemp(&mode);if(mode != OP_WIND){break;}
khaiminhvn 16:326404a7a8b8 269 ane.checkWind(&mode);if(mode != OP_WIND){break;}
khaiminhvn 14:3989d03a8b98 270 if(timer_read_ms(t_disp) >= LCD_RRATE){
khaiminhvn 15:2b3b5d8bf692 271 topL = (flag_flas)? "WIND SAFETY *!*" : "WIND SAFETY";
khaiminhvn 15:2b3b5d8bf692 272 flag_flas = !flag_flas;
khaiminhvn 25:b04abb0930ef 273 botL = Misc::itos(ane.getWind(&flag_disp)) + "kph*" + Misc::itos(fan.getTemp()) + "C*"
khaiminhvn 25:b04abb0930ef 274 + ((flag_eth)?Misc::itos(inverter.getPower()):"---") + "W";
khaiminhvn 10:566529fff615 275 t_disp.reset();
khaiminhvn 10:566529fff615 276 t_disp.start();
khaiminhvn 10:566529fff615 277 }
khaiminhvn 8:a1481d5f0572 278 if(flag_disp){
khaiminhvn 8:a1481d5f0572 279 lcd.LCD_display(topL,botL);
khaiminhvn 8:a1481d5f0572 280 flag_disp = 0;
khaiminhvn 8:a1481d5f0572 281 }
khaiminhvn 0:74d6e93ec977 282
khaiminhvn 11:2ade1ad7bad6 283 //Move all motor backward
khaiminhvn 11:2ade1ad7bad6 284 motor.moveBackward(M_ALL);
khaiminhvn 11:2ade1ad7bad6 285 flag_time = 1; //Set the system in motion once windspeed has subsided
khaiminhvn 11:2ade1ad7bad6 286 break;
khaiminhvn 11:2ade1ad7bad6 287
khaiminhvn 9:6e950b9a9a81 288 flag_idle = 0;
khaiminhvn 7:2b6438e586e6 289 break;
khaiminhvn 8:a1481d5f0572 290 }
khaiminhvn 0:74d6e93ec977 291 ////////////////////////////////////////////////////////////////////////////////
khaiminhvn 7:2b6438e586e6 292 case OP_MANUAL1:{
khaiminhvn 27:26f41a320436 293 if (flag_eth && prevm != mode){gui.state(mode);}
jump_man 17:238ccf7e3676 294 if (flag_eth){gui.windSpeed(ane.getWind());}
khaiminhvn 27:26f41a320436 295 prevm = mode;
khaiminhvn 16:326404a7a8b8 296 fan.checkTemp(&mode);if(mode != OP_MANUAL1){break;}
khaiminhvn 15:2b3b5d8bf692 297 topL = "MANUAL:M1";
jump_man 17:238ccf7e3676 298 botL = Misc::itos(ane.getWind(&flag_disp)) + "kph*" + Misc::itos(fan.getTemp()) + "C*"
jump_man 17:238ccf7e3676 299 + ((flag_eth)?Misc::itos(inverter.getPower()):"---") + "W";
khaiminhvn 8:a1481d5f0572 300 if(flag_disp){
khaiminhvn 8:a1481d5f0572 301 lcd.LCD_display(topL,botL);
khaiminhvn 8:a1481d5f0572 302 flag_disp = 0;
khaiminhvn 8:a1481d5f0572 303 }
khaiminhvn 0:74d6e93ec977 304
khaiminhvn 12:14bac44e33b9 305 //TIMEOUT
khaiminhvn 12:14bac44e33b9 306 ////////////////////////////////////////////////////////////////////
khaiminhvn 12:14bac44e33b9 307 if(!flag_idle) //Check if button is not pressed
khaiminhvn 12:14bac44e33b9 308 {
khaiminhvn 12:14bac44e33b9 309 t_mode.reset();
khaiminhvn 12:14bac44e33b9 310 t_mode.start();
khaiminhvn 12:14bac44e33b9 311 flag_idle = 1; //Indicate idling
khaiminhvn 12:14bac44e33b9 312 }
khaiminhvn 12:14bac44e33b9 313 else if(timer_read_s(t_mode) > TIME_MANUAL_TIMEOUT)
khaiminhvn 12:14bac44e33b9 314 {
khaiminhvn 12:14bac44e33b9 315 mode = OP_NORMAL;
khaiminhvn 12:14bac44e33b9 316 flag_disp = 1;
khaiminhvn 12:14bac44e33b9 317 break;
khaiminhvn 12:14bac44e33b9 318 }
khaiminhvn 12:14bac44e33b9 319 ////////////////////////////////////////////////////////////////////
khaiminhvn 12:14bac44e33b9 320
khaiminhvn 12:14bac44e33b9 321 while(bt_inc.read()) //Extend
khaiminhvn 12:14bac44e33b9 322 {
jump_man 17:238ccf7e3676 323 if (flag_eth){gui.windSpeed(ane.getWind());}
khaiminhvn 15:2b3b5d8bf692 324 if(timer_read_ms(t_disp) >= LCD_RRATE){
khaiminhvn 15:2b3b5d8bf692 325 topL = (flag_flas)? "MANUAL:M1 <=> " : "MANUAL:M1 <-=->";
khaiminhvn 15:2b3b5d8bf692 326 flag_flas = !flag_flas;
khaiminhvn 15:2b3b5d8bf692 327 t_disp.reset();
khaiminhvn 15:2b3b5d8bf692 328 t_disp.start();
khaiminhvn 12:14bac44e33b9 329 botL = "EXTENDING";
khaiminhvn 12:14bac44e33b9 330 lcd.LCD_display(topL,botL);
khaiminhvn 12:14bac44e33b9 331 }
khaiminhvn 15:2b3b5d8bf692 332
khaiminhvn 12:14bac44e33b9 333 flag_idle = 0;
khaiminhvn 12:14bac44e33b9 334 motor.moveForward(M1);
khaiminhvn 12:14bac44e33b9 335 }
khaiminhvn 12:14bac44e33b9 336 while(bt_dec.read()) //Retract
khaiminhvn 12:14bac44e33b9 337 {
jump_man 17:238ccf7e3676 338 if (flag_eth){gui.windSpeed(ane.getWind());}
khaiminhvn 15:2b3b5d8bf692 339 if(timer_read_ms(t_disp) >= LCD_RRATE){
khaiminhvn 15:2b3b5d8bf692 340 topL = (flag_flas)? "MANUAL:M1 > = <" : "MANUAL:M1 ->=<-";
khaiminhvn 15:2b3b5d8bf692 341 flag_flas = !flag_flas;
khaiminhvn 15:2b3b5d8bf692 342 t_disp.reset();
khaiminhvn 15:2b3b5d8bf692 343 t_disp.start();
khaiminhvn 12:14bac44e33b9 344 botL = "RETRACTING";
khaiminhvn 12:14bac44e33b9 345 lcd.LCD_display(topL,botL);
khaiminhvn 12:14bac44e33b9 346 }
khaiminhvn 12:14bac44e33b9 347 flag_idle = 0;
khaiminhvn 12:14bac44e33b9 348 motor.moveBackward(M1);
khaiminhvn 12:14bac44e33b9 349 }
khaiminhvn 12:14bac44e33b9 350 if(!bt_inc.read() && !bt_dec.read() && !flag_disp)
khaiminhvn 12:14bac44e33b9 351 {
khaiminhvn 12:14bac44e33b9 352 flag_disp = 1;
khaiminhvn 12:14bac44e33b9 353 motor.stop();
khaiminhvn 12:14bac44e33b9 354 }
khaiminhvn 15:2b3b5d8bf692 355 flag_time = 1;
khaiminhvn 7:2b6438e586e6 356 break;
khaiminhvn 8:a1481d5f0572 357 }
khaiminhvn 7:2b6438e586e6 358 ////////////////////////////////////////////////////////////////////////////////
khaiminhvn 7:2b6438e586e6 359 case OP_MANUAL2:{
khaiminhvn 27:26f41a320436 360 if (flag_eth && prevm != mode){gui.state(mode);}
jump_man 17:238ccf7e3676 361 if (flag_eth){gui.windSpeed(ane.getWind());}
khaiminhvn 27:26f41a320436 362 prevm = mode;
khaiminhvn 16:326404a7a8b8 363 fan.checkTemp(&mode);if(mode != OP_MANUAL2){break;}
khaiminhvn 15:2b3b5d8bf692 364 topL = "MANUAL:M2";
khaiminhvn 16:326404a7a8b8 365 botL = Misc::itos(ane.getWind(&flag_disp),3) + "kph | " + Misc::itos(fan.getTemp()) + "C";
khaiminhvn 8:a1481d5f0572 366 if(flag_disp){
khaiminhvn 8:a1481d5f0572 367 lcd.LCD_display(topL,botL);
khaiminhvn 8:a1481d5f0572 368 flag_disp = 0;
khaiminhvn 8:a1481d5f0572 369 }
khaiminhvn 12:14bac44e33b9 370
khaiminhvn 12:14bac44e33b9 371 //TIMEOUT
khaiminhvn 12:14bac44e33b9 372 ////////////////////////////////////////////////////////////////////
khaiminhvn 12:14bac44e33b9 373 if(!flag_idle) //Check if button is not pressed
khaiminhvn 12:14bac44e33b9 374 {
khaiminhvn 12:14bac44e33b9 375 t_mode.reset();
khaiminhvn 12:14bac44e33b9 376 t_mode.start();
khaiminhvn 12:14bac44e33b9 377 flag_idle = 1; //Indicate idling
khaiminhvn 12:14bac44e33b9 378 }
khaiminhvn 12:14bac44e33b9 379 else if(timer_read_s(t_mode) > TIME_MANUAL_TIMEOUT)
khaiminhvn 12:14bac44e33b9 380 {
khaiminhvn 12:14bac44e33b9 381 mode = OP_NORMAL;
khaiminhvn 12:14bac44e33b9 382 flag_disp = 1;
khaiminhvn 12:14bac44e33b9 383 break;
khaiminhvn 12:14bac44e33b9 384 }
khaiminhvn 12:14bac44e33b9 385 ////////////////////////////////////////////////////////////////////
khaiminhvn 12:14bac44e33b9 386
khaiminhvn 12:14bac44e33b9 387 while(bt_inc.read()) //Extend
khaiminhvn 12:14bac44e33b9 388 {
jump_man 17:238ccf7e3676 389 if (flag_eth){gui.windSpeed(ane.getWind());}
khaiminhvn 15:2b3b5d8bf692 390 if(timer_read_ms(t_disp) >= LCD_RRATE){
khaiminhvn 15:2b3b5d8bf692 391 topL = (flag_flas)? "MANUAL:M2 <=> " : "MANUAL:M2 <-=->";
khaiminhvn 15:2b3b5d8bf692 392 flag_flas = !flag_flas;
khaiminhvn 15:2b3b5d8bf692 393 t_disp.reset();
khaiminhvn 15:2b3b5d8bf692 394 t_disp.start();
khaiminhvn 12:14bac44e33b9 395 botL = "EXTENDING";
khaiminhvn 12:14bac44e33b9 396 lcd.LCD_display(topL,botL);
khaiminhvn 12:14bac44e33b9 397 }
khaiminhvn 15:2b3b5d8bf692 398
khaiminhvn 12:14bac44e33b9 399 flag_idle = 0;
khaiminhvn 16:326404a7a8b8 400 motor.moveForward(M2);
khaiminhvn 12:14bac44e33b9 401 }
khaiminhvn 12:14bac44e33b9 402 while(bt_dec.read()) //Retract
khaiminhvn 12:14bac44e33b9 403 {
jump_man 17:238ccf7e3676 404 if (flag_eth){gui.windSpeed(ane.getWind());}
khaiminhvn 15:2b3b5d8bf692 405 if(timer_read_ms(t_disp) >= LCD_RRATE){
khaiminhvn 15:2b3b5d8bf692 406 topL = (flag_flas)? "MANUAL:M2 > = <" : "MANUAL:M2 ->=<-";
khaiminhvn 15:2b3b5d8bf692 407 flag_flas = !flag_flas;
khaiminhvn 15:2b3b5d8bf692 408 t_disp.reset();
khaiminhvn 15:2b3b5d8bf692 409 t_disp.start();
khaiminhvn 12:14bac44e33b9 410 botL = "RETRACTING";
khaiminhvn 12:14bac44e33b9 411 lcd.LCD_display(topL,botL);
khaiminhvn 12:14bac44e33b9 412 }
khaiminhvn 12:14bac44e33b9 413 flag_idle = 0;
khaiminhvn 16:326404a7a8b8 414 motor.moveBackward(M2);
khaiminhvn 12:14bac44e33b9 415 }
khaiminhvn 12:14bac44e33b9 416 if(!bt_inc.read() && !bt_dec.read() && !flag_disp)
khaiminhvn 12:14bac44e33b9 417 {
khaiminhvn 12:14bac44e33b9 418 flag_disp = 1;
khaiminhvn 12:14bac44e33b9 419 motor.stop();
khaiminhvn 12:14bac44e33b9 420 }
khaiminhvn 15:2b3b5d8bf692 421 flag_time = 1;
khaiminhvn 15:2b3b5d8bf692 422 break;
khaiminhvn 15:2b3b5d8bf692 423 }
khaiminhvn 15:2b3b5d8bf692 424 ////////////////////////////////////////////////////////////////////////////////
khaiminhvn 15:2b3b5d8bf692 425 case OP_MANUAL_ALL:{
khaiminhvn 27:26f41a320436 426 if (flag_eth && prevm != mode){gui.state(mode);}
jump_man 17:238ccf7e3676 427 if (flag_eth){gui.windSpeed(ane.getWind());}
khaiminhvn 27:26f41a320436 428 prevm = mode;
khaiminhvn 16:326404a7a8b8 429 fan.checkTemp(&mode);if(mode != OP_MANUAL_ALL){break;}
khaiminhvn 15:2b3b5d8bf692 430 topL = "MANUAL:ALL";
khaiminhvn 16:326404a7a8b8 431 botL = Misc::itos(ane.getWind(&flag_disp),3) + "kph | " + Misc::itos(fan.getTemp()) + "C";
khaiminhvn 15:2b3b5d8bf692 432 if(flag_disp){
khaiminhvn 15:2b3b5d8bf692 433 lcd.LCD_display(topL,botL);
khaiminhvn 15:2b3b5d8bf692 434 flag_disp = 0;
khaiminhvn 15:2b3b5d8bf692 435 }
khaiminhvn 15:2b3b5d8bf692 436
khaiminhvn 15:2b3b5d8bf692 437 //TIMEOUT
khaiminhvn 15:2b3b5d8bf692 438 ////////////////////////////////////////////////////////////////////
khaiminhvn 15:2b3b5d8bf692 439 if(!flag_idle) //Check if button is not pressed
khaiminhvn 15:2b3b5d8bf692 440 {
khaiminhvn 15:2b3b5d8bf692 441 t_mode.reset();
khaiminhvn 15:2b3b5d8bf692 442 t_mode.start();
khaiminhvn 15:2b3b5d8bf692 443 flag_idle = 1; //Indicate idling
khaiminhvn 15:2b3b5d8bf692 444 }
khaiminhvn 15:2b3b5d8bf692 445 else if(timer_read_s(t_mode) > TIME_MANUAL_TIMEOUT)
khaiminhvn 15:2b3b5d8bf692 446 {
khaiminhvn 15:2b3b5d8bf692 447 mode = OP_NORMAL;
khaiminhvn 15:2b3b5d8bf692 448 flag_disp = 1;
khaiminhvn 15:2b3b5d8bf692 449 break;
khaiminhvn 15:2b3b5d8bf692 450 }
khaiminhvn 15:2b3b5d8bf692 451 ////////////////////////////////////////////////////////////////////
khaiminhvn 15:2b3b5d8bf692 452
khaiminhvn 15:2b3b5d8bf692 453 while(bt_inc.read()) //Extend
khaiminhvn 15:2b3b5d8bf692 454 {
jump_man 17:238ccf7e3676 455 if (flag_eth){gui.windSpeed(ane.getWind());}
khaiminhvn 15:2b3b5d8bf692 456 if(timer_read_ms(t_disp) >= LCD_RRATE){
khaiminhvn 15:2b3b5d8bf692 457 topL = (flag_flas)? "MANUAL:ALL <=> " : "MANUAL:ALL <-=->";
khaiminhvn 15:2b3b5d8bf692 458 flag_flas = !flag_flas;
khaiminhvn 15:2b3b5d8bf692 459 t_disp.reset();
khaiminhvn 15:2b3b5d8bf692 460 t_disp.start();
khaiminhvn 15:2b3b5d8bf692 461 botL = "EXTENDING";
khaiminhvn 15:2b3b5d8bf692 462 lcd.LCD_display(topL,botL);
khaiminhvn 15:2b3b5d8bf692 463 }
khaiminhvn 15:2b3b5d8bf692 464
khaiminhvn 15:2b3b5d8bf692 465 flag_idle = 0;
khaiminhvn 16:326404a7a8b8 466 motor.moveForward(M_ALL);
khaiminhvn 15:2b3b5d8bf692 467 }
khaiminhvn 15:2b3b5d8bf692 468 while(bt_dec.read()) //Retract
khaiminhvn 15:2b3b5d8bf692 469 {
jump_man 17:238ccf7e3676 470 if (flag_eth){gui.windSpeed(ane.getWind());}
khaiminhvn 15:2b3b5d8bf692 471 if(timer_read_ms(t_disp) >= LCD_RRATE){
khaiminhvn 15:2b3b5d8bf692 472 topL = (flag_flas)? "MANUAL:ALL > = <" : "MANUAL:ALL ->=<-";
khaiminhvn 15:2b3b5d8bf692 473 flag_flas = !flag_flas;
khaiminhvn 15:2b3b5d8bf692 474 t_disp.reset();
khaiminhvn 15:2b3b5d8bf692 475 t_disp.start();
khaiminhvn 15:2b3b5d8bf692 476 botL = "RETRACTING";
khaiminhvn 15:2b3b5d8bf692 477 lcd.LCD_display(topL,botL);
khaiminhvn 15:2b3b5d8bf692 478 }
khaiminhvn 15:2b3b5d8bf692 479 flag_idle = 0;
khaiminhvn 16:326404a7a8b8 480 motor.moveBackward(M_ALL);
khaiminhvn 15:2b3b5d8bf692 481 }
khaiminhvn 15:2b3b5d8bf692 482 if(!bt_inc.read() && !bt_dec.read() && !flag_disp)
khaiminhvn 15:2b3b5d8bf692 483 {
khaiminhvn 15:2b3b5d8bf692 484 flag_disp = 1;
khaiminhvn 15:2b3b5d8bf692 485 motor.stop();
khaiminhvn 15:2b3b5d8bf692 486 }
khaiminhvn 15:2b3b5d8bf692 487 flag_time = 1;
khaiminhvn 0:74d6e93ec977 488 break;
khaiminhvn 8:a1481d5f0572 489 }
khaiminhvn 7:2b6438e586e6 490 ////////////////////////////////////////////////////////////////////////////////
khaiminhvn 7:2b6438e586e6 491 case OP_WSETTING:{
khaiminhvn 27:26f41a320436 492 if (flag_eth && prevm != mode){gui.state(mode);}
jump_man 17:238ccf7e3676 493 if (flag_eth){gui.windSpeed(ane.getWind());}
khaiminhvn 27:26f41a320436 494 prevm = mode;
khaiminhvn 16:326404a7a8b8 495 fan.checkTemp(&mode);if(mode != OP_WSETTING){break;}
khaiminhvn 7:2b6438e586e6 496 topL = "Threshold:";
khaiminhvn 9:6e950b9a9a81 497 botL = Misc::itos(wthres) + " kph";
khaiminhvn 8:a1481d5f0572 498 if(flag_disp){
khaiminhvn 8:a1481d5f0572 499 lcd.LCD_display(topL,botL);
khaiminhvn 8:a1481d5f0572 500 flag_disp = 0;
khaiminhvn 8:a1481d5f0572 501 }
khaiminhvn 0:74d6e93ec977 502
khaiminhvn 9:6e950b9a9a81 503 //TIMEOUT
khaiminhvn 9:6e950b9a9a81 504 ////////////////////////////////////////////////////////////////////
khaiminhvn 9:6e950b9a9a81 505 if(!flag_idle) //Check if button is not pressed
khaiminhvn 9:6e950b9a9a81 506 {
khaiminhvn 9:6e950b9a9a81 507 t_mode.reset();
khaiminhvn 9:6e950b9a9a81 508 t_mode.start();
khaiminhvn 9:6e950b9a9a81 509 flag_idle = 1; //Indicate idling
khaiminhvn 9:6e950b9a9a81 510 }
khaiminhvn 9:6e950b9a9a81 511 else if(timer_read_s(t_mode) > TIME_WSETTING_TIMEOUT)
khaiminhvn 9:6e950b9a9a81 512 {
khaiminhvn 9:6e950b9a9a81 513 mode = OP_NORMAL;
khaiminhvn 9:6e950b9a9a81 514 flag_disp = 1;
khaiminhvn 9:6e950b9a9a81 515 break;
khaiminhvn 9:6e950b9a9a81 516 }
khaiminhvn 9:6e950b9a9a81 517 ////////////////////////////////////////////////////////////////////
khaiminhvn 9:6e950b9a9a81 518
khaiminhvn 9:6e950b9a9a81 519 if(!(flag_bres == 1 && bt_inc.read()) && !(flag_bres == -1 && bt_dec.read())){
khaiminhvn 9:6e950b9a9a81 520 if(bt_inc.read() && wthres < WIND_THRES_MAX)
khaiminhvn 9:6e950b9a9a81 521 {
khaiminhvn 24:ea7abc25a697 522 wthres += WIND_INC;
khaiminhvn 24:ea7abc25a697 523 ane.setThres(wthres);
jump_man 17:238ccf7e3676 524 if(flag_eth){gui.survivalSpeed(wthres);}
khaiminhvn 9:6e950b9a9a81 525 botL = Misc::itos(wthres) + " kph";
khaiminhvn 9:6e950b9a9a81 526 lcd.LCD_display(topL,botL);
khaiminhvn 9:6e950b9a9a81 527 flag_idle = 0;
khaiminhvn 9:6e950b9a9a81 528 flag_bres = 1;
khaiminhvn 9:6e950b9a9a81 529 }
khaiminhvn 9:6e950b9a9a81 530 else if(bt_dec.read() && wthres > WIND_THRES_MIN)
khaiminhvn 9:6e950b9a9a81 531 {
khaiminhvn 24:ea7abc25a697 532 wthres -= WIND_INC;
khaiminhvn 24:ea7abc25a697 533 ane.setThres(wthres);
jump_man 17:238ccf7e3676 534 if(flag_eth){gui.survivalSpeed(wthres);}
khaiminhvn 9:6e950b9a9a81 535 botL = Misc::itos(wthres) + " kph";
khaiminhvn 9:6e950b9a9a81 536 lcd.LCD_display(topL,botL);
khaiminhvn 9:6e950b9a9a81 537 flag_idle = 0;
khaiminhvn 9:6e950b9a9a81 538 flag_bres = -1;
khaiminhvn 9:6e950b9a9a81 539 }
khaiminhvn 9:6e950b9a9a81 540 else{
khaiminhvn 9:6e950b9a9a81 541 flag_bres = 0;
khaiminhvn 9:6e950b9a9a81 542 }
khaiminhvn 9:6e950b9a9a81 543 }
khaiminhvn 9:6e950b9a9a81 544
khaiminhvn 9:6e950b9a9a81 545 flag_time = 1; //Set the system in motion once done adjusting
khaiminhvn 7:2b6438e586e6 546 break;
khaiminhvn 8:a1481d5f0572 547 }
khaiminhvn 16:326404a7a8b8 548 ////////////////////////////////////////////////////////////////////////
khaiminhvn 16:326404a7a8b8 549 case OP_OVERHEAT:{
khaiminhvn 27:26f41a320436 550 if (flag_eth && prevm != mode){gui.state(mode);}
jump_man 17:238ccf7e3676 551 if (flag_eth){gui.windSpeed(ane.getWind());}
khaiminhvn 27:26f41a320436 552 prevm = mode;
khaiminhvn 16:326404a7a8b8 553 if(timer_read_ms(t_disp) >= LCD_RRATE){
khaiminhvn 16:326404a7a8b8 554 topL = (flag_flas)? "*!* OVERHEAT *!*": " OVERHEAT ";
khaiminhvn 16:326404a7a8b8 555 botL = (flag_flas)? " KEEP DISTANCE " : (" " + Misc::itos(fan.getTemp(),3) + "C");
khaiminhvn 16:326404a7a8b8 556 flag_flas = !flag_flas;
khaiminhvn 16:326404a7a8b8 557 t_disp.reset();
khaiminhvn 16:326404a7a8b8 558 t_disp.start();
khaiminhvn 16:326404a7a8b8 559 lcd.LCD_display(topL,botL);
khaiminhvn 16:326404a7a8b8 560 }
khaiminhvn 16:326404a7a8b8 561 motor.moveBackward(M_ALL);
khaiminhvn 16:326404a7a8b8 562 fan.checkTemp(&mode);
khaiminhvn 16:326404a7a8b8 563 flag_disp = 1;
khaiminhvn 16:326404a7a8b8 564 flag_time = 1;
khaiminhvn 16:326404a7a8b8 565 break;
khaiminhvn 16:326404a7a8b8 566 }
khaiminhvn 16:326404a7a8b8 567 ////////////////////////////////////////////////////////////////////////
khaiminhvn 16:326404a7a8b8 568 case OP_OVERHEAT_MAN:{
khaiminhvn 27:26f41a320436 569 if (flag_eth && prevm != mode){gui.state(mode);}
jump_man 17:238ccf7e3676 570 if (flag_eth){gui.windSpeed(ane.getWind());}
khaiminhvn 27:26f41a320436 571 prevm = mode;
khaiminhvn 16:326404a7a8b8 572 if(timer_read_ms(t_disp) >= LCD_RRATE){
khaiminhvn 16:326404a7a8b8 573 topL = (flag_flas)? "*!* OVERHEAT *!*": " OVERHEAT ";
khaiminhvn 16:326404a7a8b8 574 botL = (flag_flas)? " PRESS FN " : (" " + Misc::itos(fan.getTemp(),3) + "C");
khaiminhvn 16:326404a7a8b8 575 flag_flas = !flag_flas;
khaiminhvn 16:326404a7a8b8 576 t_disp.reset();
khaiminhvn 16:326404a7a8b8 577 t_disp.start();
khaiminhvn 16:326404a7a8b8 578 lcd.LCD_display(topL,botL);
khaiminhvn 16:326404a7a8b8 579 }
khaiminhvn 16:326404a7a8b8 580 motor.stop();
khaiminhvn 16:326404a7a8b8 581 flag_disp = 1;
khaiminhvn 16:326404a7a8b8 582 break;
khaiminhvn 16:326404a7a8b8 583 }
jump_man 17:238ccf7e3676 584 ////////////////////////////////////////////////////////////////////////
jump_man 17:238ccf7e3676 585 case OP_POWER_OFF:{
khaiminhvn 27:26f41a320436 586 if (flag_eth && prevm != mode){gui.state(mode);}
khaiminhvn 20:0a6609515810 587 if (flag_eth){gui.receives(&wthres, &flag_aTrack, &flag_powerOn,&sun_angle);}
khaiminhvn 27:26f41a320436 588 prevm = mode;
jump_man 17:238ccf7e3676 589 if(mode != OP_POWER_OFF){break;}
khaiminhvn 26:b30a61a55b2f 590 if(flag_powerOn){
khaiminhvn 26:b30a61a55b2f 591 mode = OP_NORMAL;
khaiminhvn 26:b30a61a55b2f 592 break;
khaiminhvn 26:b30a61a55b2f 593 }
jump_man 17:238ccf7e3676 594 if (flag_eth){gui.windSpeed(ane.getWind());}
khaiminhvn 26:b30a61a55b2f 595 fan.checkTemp(&mode);if(mode != OP_POWER_OFF){break;}
jump_man 17:238ccf7e3676 596 if(timer_read_ms(t_disp) >= LCD_RRATE){
jump_man 17:238ccf7e3676 597 topL = "SLEEP MODE";
jump_man 17:238ccf7e3676 598 flag_flas = !flag_flas;
jump_man 17:238ccf7e3676 599 botL = Misc::itos(ane.getWind(&flag_disp),3) + "kph | " + Misc::itos(fan.getTemp()) + "C";
jump_man 17:238ccf7e3676 600 t_disp.reset();
jump_man 17:238ccf7e3676 601 t_disp.start();
jump_man 17:238ccf7e3676 602 lcd.LCD_display(topL,botL);
jump_man 17:238ccf7e3676 603 }
jump_man 17:238ccf7e3676 604
jump_man 17:238ccf7e3676 605 //Move all motor backward
jump_man 17:238ccf7e3676 606 motor.moveBackward(M_ALL);
jump_man 17:238ccf7e3676 607 flag_time = 1; //Set the system in motion once windspeed has subsided
jump_man 17:238ccf7e3676 608 break;
jump_man 17:238ccf7e3676 609 }
khaiminhvn 20:0a6609515810 610 ////////////////////////////////////////////////////////////////////////
khaiminhvn 20:0a6609515810 611 case OP_ATRACK:{
khaiminhvn 27:26f41a320436 612 if (flag_eth && prevm != mode){gui.state(mode);}
khaiminhvn 27:26f41a320436 613 prevm = mode;
khaiminhvn 20:0a6609515810 614 flag_aTrack = !flag_aTrack;
khaiminhvn 22:6c8535dab84a 615 gui.activeTracking(flag_aTrack);
khaiminhvn 20:0a6609515810 616 if (flag_eth){gui.windSpeed(ane.getWind());}
khaiminhvn 21:e9978d9823fe 617 fan.checkTemp(&mode);if(mode != OP_ATRACK){break;}
khaiminhvn 20:0a6609515810 618 topL = "TRACKING MODE:";
khaiminhvn 20:0a6609515810 619 botL = (flag_aTrack) ? "ACTIVE (ACC)" : "AUTO (ONLINE)";
khaiminhvn 20:0a6609515810 620 lcd.LCD_display(topL,botL);
khaiminhvn 20:0a6609515810 621 flag_disp = 0;
khaiminhvn 20:0a6609515810 622 wait_us(TIME_ATRACK_TIMEOUT);
khaiminhvn 20:0a6609515810 623
khaiminhvn 20:0a6609515810 624 mode = OP_NORMAL;
khaiminhvn 20:0a6609515810 625 flag_time = 1; //Set the system in motion once done adjusting
khaiminhvn 20:0a6609515810 626 break;
khaiminhvn 20:0a6609515810 627 }
khaiminhvn 20:0a6609515810 628 ////////////////////////////////////////////////////////////////////////
khaiminhvn 23:5dff9aed3727 629 case OP_RECONNECT:{
khaiminhvn 23:5dff9aed3727 630 topL = "CONNECTING";
khaiminhvn 23:5dff9aed3727 631 botL = "";
khaiminhvn 23:5dff9aed3727 632 lcd.LCD_display(topL,botL);
khaiminhvn 26:b30a61a55b2f 633
khaiminhvn 26:b30a61a55b2f 634 for(int i = 0; (i < CONN_N && !flag_eth); i++){
khaiminhvn 26:b30a61a55b2f 635 eth.connect();
khaiminhvn 26:b30a61a55b2f 636 gui.refreshConnection(URL,&flag_eth);
khaiminhvn 26:b30a61a55b2f 637 wait_us(1000000);
khaiminhvn 26:b30a61a55b2f 638 inverter.connect(URL, PORT);
khaiminhvn 26:b30a61a55b2f 639 }
khaiminhvn 26:b30a61a55b2f 640 wait_us(1000000);
khaiminhvn 23:5dff9aed3727 641 bt_fn.setConnected(flag_eth);
khaiminhvn 23:5dff9aed3727 642
khaiminhvn 23:5dff9aed3727 643 if (flag_eth){gui.getSunAngle();}
khaiminhvn 23:5dff9aed3727 644 if (flag_eth){
khaiminhvn 23:5dff9aed3727 645 topL = "ETHERNET";
khaiminhvn 23:5dff9aed3727 646 botL = "CONNECTED";
khaiminhvn 23:5dff9aed3727 647 lcd.LCD_display(topL, botL);
khaiminhvn 23:5dff9aed3727 648 }
khaiminhvn 23:5dff9aed3727 649 else{
khaiminhvn 23:5dff9aed3727 650 topL = "ETHERNET";
khaiminhvn 23:5dff9aed3727 651 botL = "NOT CONNECTED";
khaiminhvn 23:5dff9aed3727 652 lcd.LCD_display(topL, botL);
khaiminhvn 23:5dff9aed3727 653 }
khaiminhvn 23:5dff9aed3727 654 wait_us(TIME_RECONNECT_TIMEOUT);
khaiminhvn 23:5dff9aed3727 655
khaiminhvn 23:5dff9aed3727 656 mode = OP_NORMAL;
khaiminhvn 23:5dff9aed3727 657 flag_time = 1; //Set the system in motion once done adjusting
khaiminhvn 23:5dff9aed3727 658 break;
khaiminhvn 23:5dff9aed3727 659 }
khaiminhvn 23:5dff9aed3727 660 ////////////////////////////////////////////////////////////////////////
khaiminhvn 0:74d6e93ec977 661 }
khaiminhvn 26:b30a61a55b2f 662 if(!flag_eth && timer_read_s(t_recon) >= TIME_RECON){
khaiminhvn 26:b30a61a55b2f 663 eth.connect();
khaiminhvn 26:b30a61a55b2f 664 gui.refreshConnection(URL,&flag_eth);
khaiminhvn 26:b30a61a55b2f 665 inverter.connect(URL, PORT);
khaiminhvn 26:b30a61a55b2f 666 bt_fn.setConnected(flag_eth);
khaiminhvn 26:b30a61a55b2f 667 }
jump_man 17:238ccf7e3676 668
khaiminhvn 7:2b6438e586e6 669 wait_us(LOOP_DELAY);
jump_man 17:238ccf7e3676 670 flag_disp = 1;
khaiminhvn 0:74d6e93ec977 671 }
khaiminhvn 0:74d6e93ec977 672
khaiminhvn 0:74d6e93ec977 673 }
khaiminhvn 0:74d6e93ec977 674 ////////////////////////////////////////////////////////////////////////////////
khaiminhvn 7:2b6438e586e6 675 ////////////////////////////////////////////////////////////////////////////////