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 01:48:28 2021 +0000
Revision:
20:0a6609515810
Parent:
18:ee0aa6db3c8d
Child:
21:e9978d9823fe
Added auto-tracking to the system

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