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 18:13:01 2021 +0000
Revision:
29:5b14b0ec5efc
Parent:
28:1b8e1d100b58
Child:
30:7fce3ae08754
Fixed display and wind safety

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