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