Project aiming to make a self-controlled solar reflector

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

Committer:
khaiminhvn
Date:
Tue Mar 30 13:34:45 2021 +0000
Revision:
28:1b8e1d100b58
Parent:
27:26f41a320436
Child:
29:5b14b0ec5efc
Added Ethernet connection handling at initialization

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 28:1b8e1d100b58 86 botL = "YES[IN] NO[DE]";
khaiminhvn 28:1b8e1d100b58 87 lcd.LCD_display(topL,botL);
khaiminhvn 28:1b8e1d100b58 88 while(true){
khaiminhvn 28:1b8e1d100b58 89 if(bt_inc.read()){
khaiminhvn 28:1b8e1d100b58 90 flag_rec = 1;
khaiminhvn 28:1b8e1d100b58 91 eth.connect();
khaiminhvn 28:1b8e1d100b58 92 gui = new GUI("ws://int-sol-ref.herokuapp.com/", &eth, &flag_eth);
khaiminhvn 28:1b8e1d100b58 93 inverter = new Inverter("int-sol-ref.herokuapp.com", 80, &eth);
khaiminhvn 28:1b8e1d100b58 94 bt_fn.setConnected(flag_eth);
khaiminhvn 28:1b8e1d100b58 95
khaiminhvn 28:1b8e1d100b58 96 if (flag_eth){gui->getSunAngle();}
khaiminhvn 28:1b8e1d100b58 97 if (flag_eth){
khaiminhvn 28:1b8e1d100b58 98 topL = "ETHERNET";
khaiminhvn 28:1b8e1d100b58 99 botL = "CONNECTED";
khaiminhvn 28:1b8e1d100b58 100 lcd.LCD_display(topL, botL);
khaiminhvn 28:1b8e1d100b58 101 }
khaiminhvn 28:1b8e1d100b58 102 else{
khaiminhvn 28:1b8e1d100b58 103 topL = "ETHERNET";
khaiminhvn 28:1b8e1d100b58 104 botL = "NOT CONNECTED";
khaiminhvn 28:1b8e1d100b58 105 lcd.LCD_display(topL, botL);
khaiminhvn 28:1b8e1d100b58 106 }
khaiminhvn 28:1b8e1d100b58 107 wait_us(1000000);
khaiminhvn 28:1b8e1d100b58 108 t_recon.start();
khaiminhvn 28:1b8e1d100b58 109 break;
khaiminhvn 28:1b8e1d100b58 110 }
khaiminhvn 28:1b8e1d100b58 111 else if(bt_dec.read()){
khaiminhvn 28:1b8e1d100b58 112 flag_rec = 0;
khaiminhvn 28:1b8e1d100b58 113 break;
khaiminhvn 28:1b8e1d100b58 114 }
khaiminhvn 28:1b8e1d100b58 115 }
khaiminhvn 28:1b8e1d100b58 116
khaiminhvn 28:1b8e1d100b58 117 mode = OP_CALIBRATION;
khaiminhvn 28:1b8e1d100b58 118 break;
khaiminhvn 28:1b8e1d100b58 119 }
khaiminhvn 28:1b8e1d100b58 120 ////////////////////////////////////////////////////////////////////////////////
khaiminhvn 28:1b8e1d100b58 121 case OP_CALIBRATION:{
khaiminhvn 28:1b8e1d100b58 122 if(flag_disp){
khaiminhvn 28:1b8e1d100b58 123 topL = "PUT SENSORS IN";
khaiminhvn 28:1b8e1d100b58 124 botL = "CALIBRATION SLOT";
khaiminhvn 28:1b8e1d100b58 125 lcd.LCD_display(topL, botL);
khaiminhvn 28:1b8e1d100b58 126 flag_disp = 0;
khaiminhvn 28:1b8e1d100b58 127 }
khaiminhvn 28:1b8e1d100b58 128 break;
khaiminhvn 28:1b8e1d100b58 129 }
khaiminhvn 28:1b8e1d100b58 130 ////////////////////////////////////////////////////////////////////////////////
khaiminhvn 7:2b6438e586e6 131 case OP_PLACEMENT:{
khaiminhvn 24:ea7abc25a697 132 if(flag_cali == 0){
khaiminhvn 24:ea7abc25a697 133 topL = "CALIBRATING";
khaiminhvn 24:ea7abc25a697 134 botL = "";
khaiminhvn 24:ea7abc25a697 135 lcd.LCD_display(topL,botL);
khaiminhvn 24:ea7abc25a697 136 acc.calibrate();
khaiminhvn 24:ea7abc25a697 137 topL = "PUT SENSOR ON";
khaiminhvn 24:ea7abc25a697 138 botL = "PANEL&REFLECTORS";
khaiminhvn 24:ea7abc25a697 139 lcd.LCD_display(topL,botL);
khaiminhvn 24:ea7abc25a697 140 flag_cali = 1;
khaiminhvn 24:ea7abc25a697 141 }
khaiminhvn 28:1b8e1d100b58 142 flag_disp = 1;
khaiminhvn 7:2b6438e586e6 143 break;
khaiminhvn 8:a1481d5f0572 144 }
khaiminhvn 0:74d6e93ec977 145 ////////////////////////////////////////////////////////////////////////////////
khaiminhvn 14:3989d03a8b98 146 case OP_CONFIRM:{
khaiminhvn 14:3989d03a8b98 147 while(mode == OP_CONFIRM){
khaiminhvn 14:3989d03a8b98 148 topL = "R1 || P || R2";
khaiminhvn 16:326404a7a8b8 149 botL = Misc::itos(acc.getAngle(S_R1),3) +
khaiminhvn 16:326404a7a8b8 150 "||" + Misc::itos(acc.getAngle(S_PANEL),3) +
khaiminhvn 16:326404a7a8b8 151 "||" + Misc::itos(acc.getAngle(S_R2),3);
khaiminhvn 14:3989d03a8b98 152 lcd.LCD_display(topL,botL);
khaiminhvn 14:3989d03a8b98 153 flag_disp = 0;
khaiminhvn 14:3989d03a8b98 154 wait_us(LCD_RRATE);
khaiminhvn 14:3989d03a8b98 155 }
khaiminhvn 14:3989d03a8b98 156 }
khaiminhvn 14:3989d03a8b98 157 ////////////////////////////////////////////////////////////////////////////////
khaiminhvn 7:2b6438e586e6 158 case OP_NORMAL:{
khaiminhvn 28:1b8e1d100b58 159 if (flag_eth && prevm != mode){gui->state(mode);}
khaiminhvn 28:1b8e1d100b58 160 if (flag_eth){gui->getSunAngle();}
khaiminhvn 28:1b8e1d100b58 161 if (flag_eth){gui->receives(&wthres, &flag_aTrack, &flag_powerOn,&sun_angle);}
khaiminhvn 27:26f41a320436 162 prevm = mode;
khaiminhvn 26:b30a61a55b2f 163 mode = (flag_powerOn) ? mode : OP_POWER_OFF; if(mode != OP_NORMAL){break;}
khaiminhvn 16:326404a7a8b8 164 fan.checkTemp(&mode);if(mode != OP_NORMAL){break;}
khaiminhvn 16:326404a7a8b8 165 ane.checkWind(&mode);if(mode != OP_NORMAL){break;}
khaiminhvn 28:1b8e1d100b58 166 if (flag_eth){gui->windSpeed(ane.getWind());}
khaiminhvn 12:14bac44e33b9 167 topL = "NORMAL:IDLING";
khaiminhvn 24:ea7abc25a697 168 topL = (flag_aTrack) ? topL : "*" + topL;
khaiminhvn 14:3989d03a8b98 169 if(timer_read_ms(t_disp) >= LCD_RRATE){
khaiminhvn 25:b04abb0930ef 170 botL = Misc::itos(ane.getWind(&flag_disp)) + "kph*" + Misc::itos(fan.getTemp()) + "C*"
khaiminhvn 28:1b8e1d100b58 171 + ((flag_eth)?Misc::itos(inverter->getPower()):"---") + "W";
khaiminhvn 10:566529fff615 172 t_disp.reset();
khaiminhvn 10:566529fff615 173 t_disp.start();
khaiminhvn 10:566529fff615 174 }
khaiminhvn 8:a1481d5f0572 175 if(flag_disp){
khaiminhvn 8:a1481d5f0572 176 lcd.LCD_display(topL,botL);
khaiminhvn 8:a1481d5f0572 177 flag_disp = 0;
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 25:b04abb0930ef 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 25:b04abb0930ef 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 25:b04abb0930ef 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 25:b04abb0930ef 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 26:b30a61a55b2f 296 mode = (flag_powerOn) ? mode : OP_POWER_OFF; if(mode != OP_NORMAL){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 25:b04abb0930ef 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 10:566529fff615 306 t_disp.reset();
khaiminhvn 10:566529fff615 307 t_disp.start();
khaiminhvn 10:566529fff615 308 }
khaiminhvn 8:a1481d5f0572 309 if(flag_disp){
khaiminhvn 8:a1481d5f0572 310 lcd.LCD_display(topL,botL);
khaiminhvn 8:a1481d5f0572 311 flag_disp = 0;
khaiminhvn 8:a1481d5f0572 312 }
khaiminhvn 0:74d6e93ec977 313
khaiminhvn 11:2ade1ad7bad6 314 //Move all motor backward
khaiminhvn 11:2ade1ad7bad6 315 motor.moveBackward(M_ALL);
khaiminhvn 11:2ade1ad7bad6 316 flag_time = 1; //Set the system in motion once windspeed has subsided
khaiminhvn 11:2ade1ad7bad6 317 break;
khaiminhvn 11:2ade1ad7bad6 318
khaiminhvn 9:6e950b9a9a81 319 flag_idle = 0;
khaiminhvn 7:2b6438e586e6 320 break;
khaiminhvn 8:a1481d5f0572 321 }
khaiminhvn 0:74d6e93ec977 322 ////////////////////////////////////////////////////////////////////////////////
khaiminhvn 7:2b6438e586e6 323 case OP_MANUAL1:{
khaiminhvn 28:1b8e1d100b58 324 if (flag_eth && prevm != mode){gui->state(mode);}
khaiminhvn 28:1b8e1d100b58 325 if (flag_eth){gui->windSpeed(ane.getWind());}
khaiminhvn 27:26f41a320436 326 prevm = mode;
khaiminhvn 16:326404a7a8b8 327 fan.checkTemp(&mode);if(mode != OP_MANUAL1){break;}
khaiminhvn 15:2b3b5d8bf692 328 topL = "MANUAL:M1";
jump_man 17:238ccf7e3676 329 botL = Misc::itos(ane.getWind(&flag_disp)) + "kph*" + Misc::itos(fan.getTemp()) + "C*"
khaiminhvn 28:1b8e1d100b58 330 + ((flag_eth)?Misc::itos(inverter->getPower()):"---") + "W";
khaiminhvn 8:a1481d5f0572 331 if(flag_disp){
khaiminhvn 8:a1481d5f0572 332 lcd.LCD_display(topL,botL);
khaiminhvn 8:a1481d5f0572 333 flag_disp = 0;
khaiminhvn 8:a1481d5f0572 334 }
khaiminhvn 0:74d6e93ec977 335
khaiminhvn 12:14bac44e33b9 336 //TIMEOUT
khaiminhvn 12:14bac44e33b9 337 ////////////////////////////////////////////////////////////////////
khaiminhvn 12:14bac44e33b9 338 if(!flag_idle) //Check if button is not pressed
khaiminhvn 12:14bac44e33b9 339 {
khaiminhvn 12:14bac44e33b9 340 t_mode.reset();
khaiminhvn 12:14bac44e33b9 341 t_mode.start();
khaiminhvn 12:14bac44e33b9 342 flag_idle = 1; //Indicate idling
khaiminhvn 12:14bac44e33b9 343 }
khaiminhvn 12:14bac44e33b9 344 else if(timer_read_s(t_mode) > TIME_MANUAL_TIMEOUT)
khaiminhvn 12:14bac44e33b9 345 {
khaiminhvn 12:14bac44e33b9 346 mode = OP_NORMAL;
khaiminhvn 12:14bac44e33b9 347 flag_disp = 1;
khaiminhvn 12:14bac44e33b9 348 break;
khaiminhvn 12:14bac44e33b9 349 }
khaiminhvn 12:14bac44e33b9 350 ////////////////////////////////////////////////////////////////////
khaiminhvn 12:14bac44e33b9 351
khaiminhvn 12:14bac44e33b9 352 while(bt_inc.read()) //Extend
khaiminhvn 12:14bac44e33b9 353 {
khaiminhvn 28:1b8e1d100b58 354 if (flag_eth){gui->windSpeed(ane.getWind());}
khaiminhvn 15:2b3b5d8bf692 355 if(timer_read_ms(t_disp) >= LCD_RRATE){
khaiminhvn 15:2b3b5d8bf692 356 topL = (flag_flas)? "MANUAL:M1 <=> " : "MANUAL:M1 <-=->";
khaiminhvn 15:2b3b5d8bf692 357 flag_flas = !flag_flas;
khaiminhvn 15:2b3b5d8bf692 358 t_disp.reset();
khaiminhvn 15:2b3b5d8bf692 359 t_disp.start();
khaiminhvn 12:14bac44e33b9 360 botL = "EXTENDING";
khaiminhvn 12:14bac44e33b9 361 lcd.LCD_display(topL,botL);
khaiminhvn 12:14bac44e33b9 362 }
khaiminhvn 15:2b3b5d8bf692 363
khaiminhvn 12:14bac44e33b9 364 flag_idle = 0;
khaiminhvn 12:14bac44e33b9 365 motor.moveForward(M1);
khaiminhvn 12:14bac44e33b9 366 }
khaiminhvn 12:14bac44e33b9 367 while(bt_dec.read()) //Retract
khaiminhvn 12:14bac44e33b9 368 {
khaiminhvn 28:1b8e1d100b58 369 if (flag_eth){gui->windSpeed(ane.getWind());}
khaiminhvn 15:2b3b5d8bf692 370 if(timer_read_ms(t_disp) >= LCD_RRATE){
khaiminhvn 15:2b3b5d8bf692 371 topL = (flag_flas)? "MANUAL:M1 > = <" : "MANUAL:M1 ->=<-";
khaiminhvn 15:2b3b5d8bf692 372 flag_flas = !flag_flas;
khaiminhvn 15:2b3b5d8bf692 373 t_disp.reset();
khaiminhvn 15:2b3b5d8bf692 374 t_disp.start();
khaiminhvn 12:14bac44e33b9 375 botL = "RETRACTING";
khaiminhvn 12:14bac44e33b9 376 lcd.LCD_display(topL,botL);
khaiminhvn 12:14bac44e33b9 377 }
khaiminhvn 12:14bac44e33b9 378 flag_idle = 0;
khaiminhvn 12:14bac44e33b9 379 motor.moveBackward(M1);
khaiminhvn 12:14bac44e33b9 380 }
khaiminhvn 12:14bac44e33b9 381 if(!bt_inc.read() && !bt_dec.read() && !flag_disp)
khaiminhvn 12:14bac44e33b9 382 {
khaiminhvn 12:14bac44e33b9 383 flag_disp = 1;
khaiminhvn 12:14bac44e33b9 384 motor.stop();
khaiminhvn 12:14bac44e33b9 385 }
khaiminhvn 15:2b3b5d8bf692 386 flag_time = 1;
khaiminhvn 7:2b6438e586e6 387 break;
khaiminhvn 8:a1481d5f0572 388 }
khaiminhvn 7:2b6438e586e6 389 ////////////////////////////////////////////////////////////////////////////////
khaiminhvn 7:2b6438e586e6 390 case OP_MANUAL2:{
khaiminhvn 28:1b8e1d100b58 391 if (flag_eth && prevm != mode){gui->state(mode);}
khaiminhvn 28:1b8e1d100b58 392 if (flag_eth){gui->windSpeed(ane.getWind());}
khaiminhvn 27:26f41a320436 393 prevm = mode;
khaiminhvn 16:326404a7a8b8 394 fan.checkTemp(&mode);if(mode != OP_MANUAL2){break;}
khaiminhvn 15:2b3b5d8bf692 395 topL = "MANUAL:M2";
khaiminhvn 16:326404a7a8b8 396 botL = Misc::itos(ane.getWind(&flag_disp),3) + "kph | " + Misc::itos(fan.getTemp()) + "C";
khaiminhvn 8:a1481d5f0572 397 if(flag_disp){
khaiminhvn 8:a1481d5f0572 398 lcd.LCD_display(topL,botL);
khaiminhvn 8:a1481d5f0572 399 flag_disp = 0;
khaiminhvn 8:a1481d5f0572 400 }
khaiminhvn 12:14bac44e33b9 401
khaiminhvn 12:14bac44e33b9 402 //TIMEOUT
khaiminhvn 12:14bac44e33b9 403 ////////////////////////////////////////////////////////////////////
khaiminhvn 12:14bac44e33b9 404 if(!flag_idle) //Check if button is not pressed
khaiminhvn 12:14bac44e33b9 405 {
khaiminhvn 12:14bac44e33b9 406 t_mode.reset();
khaiminhvn 12:14bac44e33b9 407 t_mode.start();
khaiminhvn 12:14bac44e33b9 408 flag_idle = 1; //Indicate idling
khaiminhvn 12:14bac44e33b9 409 }
khaiminhvn 12:14bac44e33b9 410 else if(timer_read_s(t_mode) > TIME_MANUAL_TIMEOUT)
khaiminhvn 12:14bac44e33b9 411 {
khaiminhvn 12:14bac44e33b9 412 mode = OP_NORMAL;
khaiminhvn 12:14bac44e33b9 413 flag_disp = 1;
khaiminhvn 12:14bac44e33b9 414 break;
khaiminhvn 12:14bac44e33b9 415 }
khaiminhvn 12:14bac44e33b9 416 ////////////////////////////////////////////////////////////////////
khaiminhvn 12:14bac44e33b9 417
khaiminhvn 12:14bac44e33b9 418 while(bt_inc.read()) //Extend
khaiminhvn 12:14bac44e33b9 419 {
khaiminhvn 28:1b8e1d100b58 420 if (flag_eth){gui->windSpeed(ane.getWind());}
khaiminhvn 15:2b3b5d8bf692 421 if(timer_read_ms(t_disp) >= LCD_RRATE){
khaiminhvn 15:2b3b5d8bf692 422 topL = (flag_flas)? "MANUAL:M2 <=> " : "MANUAL:M2 <-=->";
khaiminhvn 15:2b3b5d8bf692 423 flag_flas = !flag_flas;
khaiminhvn 15:2b3b5d8bf692 424 t_disp.reset();
khaiminhvn 15:2b3b5d8bf692 425 t_disp.start();
khaiminhvn 12:14bac44e33b9 426 botL = "EXTENDING";
khaiminhvn 12:14bac44e33b9 427 lcd.LCD_display(topL,botL);
khaiminhvn 12:14bac44e33b9 428 }
khaiminhvn 15:2b3b5d8bf692 429
khaiminhvn 12:14bac44e33b9 430 flag_idle = 0;
khaiminhvn 16:326404a7a8b8 431 motor.moveForward(M2);
khaiminhvn 12:14bac44e33b9 432 }
khaiminhvn 12:14bac44e33b9 433 while(bt_dec.read()) //Retract
khaiminhvn 12:14bac44e33b9 434 {
khaiminhvn 28:1b8e1d100b58 435 if (flag_eth){gui->windSpeed(ane.getWind());}
khaiminhvn 15:2b3b5d8bf692 436 if(timer_read_ms(t_disp) >= LCD_RRATE){
khaiminhvn 15:2b3b5d8bf692 437 topL = (flag_flas)? "MANUAL:M2 > = <" : "MANUAL:M2 ->=<-";
khaiminhvn 15:2b3b5d8bf692 438 flag_flas = !flag_flas;
khaiminhvn 15:2b3b5d8bf692 439 t_disp.reset();
khaiminhvn 15:2b3b5d8bf692 440 t_disp.start();
khaiminhvn 12:14bac44e33b9 441 botL = "RETRACTING";
khaiminhvn 12:14bac44e33b9 442 lcd.LCD_display(topL,botL);
khaiminhvn 12:14bac44e33b9 443 }
khaiminhvn 12:14bac44e33b9 444 flag_idle = 0;
khaiminhvn 16:326404a7a8b8 445 motor.moveBackward(M2);
khaiminhvn 12:14bac44e33b9 446 }
khaiminhvn 12:14bac44e33b9 447 if(!bt_inc.read() && !bt_dec.read() && !flag_disp)
khaiminhvn 12:14bac44e33b9 448 {
khaiminhvn 12:14bac44e33b9 449 flag_disp = 1;
khaiminhvn 12:14bac44e33b9 450 motor.stop();
khaiminhvn 12:14bac44e33b9 451 }
khaiminhvn 15:2b3b5d8bf692 452 flag_time = 1;
khaiminhvn 15:2b3b5d8bf692 453 break;
khaiminhvn 15:2b3b5d8bf692 454 }
khaiminhvn 15:2b3b5d8bf692 455 ////////////////////////////////////////////////////////////////////////////////
khaiminhvn 15:2b3b5d8bf692 456 case OP_MANUAL_ALL:{
khaiminhvn 28:1b8e1d100b58 457 if (flag_eth && prevm != mode){gui->state(mode);}
khaiminhvn 28:1b8e1d100b58 458 if (flag_eth){gui->windSpeed(ane.getWind());}
khaiminhvn 27:26f41a320436 459 prevm = mode;
khaiminhvn 16:326404a7a8b8 460 fan.checkTemp(&mode);if(mode != OP_MANUAL_ALL){break;}
khaiminhvn 15:2b3b5d8bf692 461 topL = "MANUAL:ALL";
khaiminhvn 16:326404a7a8b8 462 botL = Misc::itos(ane.getWind(&flag_disp),3) + "kph | " + Misc::itos(fan.getTemp()) + "C";
khaiminhvn 15:2b3b5d8bf692 463 if(flag_disp){
khaiminhvn 15:2b3b5d8bf692 464 lcd.LCD_display(topL,botL);
khaiminhvn 15:2b3b5d8bf692 465 flag_disp = 0;
khaiminhvn 15:2b3b5d8bf692 466 }
khaiminhvn 15:2b3b5d8bf692 467
khaiminhvn 15:2b3b5d8bf692 468 //TIMEOUT
khaiminhvn 15:2b3b5d8bf692 469 ////////////////////////////////////////////////////////////////////
khaiminhvn 15:2b3b5d8bf692 470 if(!flag_idle) //Check if button is not pressed
khaiminhvn 15:2b3b5d8bf692 471 {
khaiminhvn 15:2b3b5d8bf692 472 t_mode.reset();
khaiminhvn 15:2b3b5d8bf692 473 t_mode.start();
khaiminhvn 15:2b3b5d8bf692 474 flag_idle = 1; //Indicate idling
khaiminhvn 15:2b3b5d8bf692 475 }
khaiminhvn 15:2b3b5d8bf692 476 else if(timer_read_s(t_mode) > TIME_MANUAL_TIMEOUT)
khaiminhvn 15:2b3b5d8bf692 477 {
khaiminhvn 15:2b3b5d8bf692 478 mode = OP_NORMAL;
khaiminhvn 15:2b3b5d8bf692 479 flag_disp = 1;
khaiminhvn 15:2b3b5d8bf692 480 break;
khaiminhvn 15:2b3b5d8bf692 481 }
khaiminhvn 15:2b3b5d8bf692 482 ////////////////////////////////////////////////////////////////////
khaiminhvn 15:2b3b5d8bf692 483
khaiminhvn 15:2b3b5d8bf692 484 while(bt_inc.read()) //Extend
khaiminhvn 15:2b3b5d8bf692 485 {
khaiminhvn 28:1b8e1d100b58 486 if (flag_eth){gui->windSpeed(ane.getWind());}
khaiminhvn 15:2b3b5d8bf692 487 if(timer_read_ms(t_disp) >= LCD_RRATE){
khaiminhvn 15:2b3b5d8bf692 488 topL = (flag_flas)? "MANUAL:ALL <=> " : "MANUAL:ALL <-=->";
khaiminhvn 15:2b3b5d8bf692 489 flag_flas = !flag_flas;
khaiminhvn 15:2b3b5d8bf692 490 t_disp.reset();
khaiminhvn 15:2b3b5d8bf692 491 t_disp.start();
khaiminhvn 15:2b3b5d8bf692 492 botL = "EXTENDING";
khaiminhvn 15:2b3b5d8bf692 493 lcd.LCD_display(topL,botL);
khaiminhvn 15:2b3b5d8bf692 494 }
khaiminhvn 15:2b3b5d8bf692 495
khaiminhvn 15:2b3b5d8bf692 496 flag_idle = 0;
khaiminhvn 16:326404a7a8b8 497 motor.moveForward(M_ALL);
khaiminhvn 15:2b3b5d8bf692 498 }
khaiminhvn 15:2b3b5d8bf692 499 while(bt_dec.read()) //Retract
khaiminhvn 15:2b3b5d8bf692 500 {
khaiminhvn 28:1b8e1d100b58 501 if (flag_eth){gui->windSpeed(ane.getWind());}
khaiminhvn 15:2b3b5d8bf692 502 if(timer_read_ms(t_disp) >= LCD_RRATE){
khaiminhvn 15:2b3b5d8bf692 503 topL = (flag_flas)? "MANUAL:ALL > = <" : "MANUAL:ALL ->=<-";
khaiminhvn 15:2b3b5d8bf692 504 flag_flas = !flag_flas;
khaiminhvn 15:2b3b5d8bf692 505 t_disp.reset();
khaiminhvn 15:2b3b5d8bf692 506 t_disp.start();
khaiminhvn 15:2b3b5d8bf692 507 botL = "RETRACTING";
khaiminhvn 15:2b3b5d8bf692 508 lcd.LCD_display(topL,botL);
khaiminhvn 15:2b3b5d8bf692 509 }
khaiminhvn 15:2b3b5d8bf692 510 flag_idle = 0;
khaiminhvn 16:326404a7a8b8 511 motor.moveBackward(M_ALL);
khaiminhvn 15:2b3b5d8bf692 512 }
khaiminhvn 15:2b3b5d8bf692 513 if(!bt_inc.read() && !bt_dec.read() && !flag_disp)
khaiminhvn 15:2b3b5d8bf692 514 {
khaiminhvn 15:2b3b5d8bf692 515 flag_disp = 1;
khaiminhvn 15:2b3b5d8bf692 516 motor.stop();
khaiminhvn 15:2b3b5d8bf692 517 }
khaiminhvn 15:2b3b5d8bf692 518 flag_time = 1;
khaiminhvn 0:74d6e93ec977 519 break;
khaiminhvn 8:a1481d5f0572 520 }
khaiminhvn 7:2b6438e586e6 521 ////////////////////////////////////////////////////////////////////////////////
khaiminhvn 7:2b6438e586e6 522 case OP_WSETTING:{
khaiminhvn 28:1b8e1d100b58 523 if (flag_eth && prevm != mode){gui->state(mode);}
khaiminhvn 28:1b8e1d100b58 524 if (flag_eth){gui->windSpeed(ane.getWind());}
khaiminhvn 27:26f41a320436 525 prevm = mode;
khaiminhvn 16:326404a7a8b8 526 fan.checkTemp(&mode);if(mode != OP_WSETTING){break;}
khaiminhvn 7:2b6438e586e6 527 topL = "Threshold:";
khaiminhvn 9:6e950b9a9a81 528 botL = Misc::itos(wthres) + " kph";
khaiminhvn 8:a1481d5f0572 529 if(flag_disp){
khaiminhvn 8:a1481d5f0572 530 lcd.LCD_display(topL,botL);
khaiminhvn 8:a1481d5f0572 531 flag_disp = 0;
khaiminhvn 8:a1481d5f0572 532 }
khaiminhvn 0:74d6e93ec977 533
khaiminhvn 9:6e950b9a9a81 534 //TIMEOUT
khaiminhvn 9:6e950b9a9a81 535 ////////////////////////////////////////////////////////////////////
khaiminhvn 9:6e950b9a9a81 536 if(!flag_idle) //Check if button is not pressed
khaiminhvn 9:6e950b9a9a81 537 {
khaiminhvn 9:6e950b9a9a81 538 t_mode.reset();
khaiminhvn 9:6e950b9a9a81 539 t_mode.start();
khaiminhvn 9:6e950b9a9a81 540 flag_idle = 1; //Indicate idling
khaiminhvn 9:6e950b9a9a81 541 }
khaiminhvn 9:6e950b9a9a81 542 else if(timer_read_s(t_mode) > TIME_WSETTING_TIMEOUT)
khaiminhvn 9:6e950b9a9a81 543 {
khaiminhvn 9:6e950b9a9a81 544 mode = OP_NORMAL;
khaiminhvn 9:6e950b9a9a81 545 flag_disp = 1;
khaiminhvn 9:6e950b9a9a81 546 break;
khaiminhvn 9:6e950b9a9a81 547 }
khaiminhvn 9:6e950b9a9a81 548 ////////////////////////////////////////////////////////////////////
khaiminhvn 9:6e950b9a9a81 549
khaiminhvn 9:6e950b9a9a81 550 if(!(flag_bres == 1 && bt_inc.read()) && !(flag_bres == -1 && bt_dec.read())){
khaiminhvn 9:6e950b9a9a81 551 if(bt_inc.read() && wthres < WIND_THRES_MAX)
khaiminhvn 9:6e950b9a9a81 552 {
khaiminhvn 24:ea7abc25a697 553 wthres += WIND_INC;
khaiminhvn 24:ea7abc25a697 554 ane.setThres(wthres);
khaiminhvn 28:1b8e1d100b58 555 if(flag_eth){gui->survivalSpeed(wthres);}
khaiminhvn 9:6e950b9a9a81 556 botL = Misc::itos(wthres) + " kph";
khaiminhvn 9:6e950b9a9a81 557 lcd.LCD_display(topL,botL);
khaiminhvn 9:6e950b9a9a81 558 flag_idle = 0;
khaiminhvn 9:6e950b9a9a81 559 flag_bres = 1;
khaiminhvn 9:6e950b9a9a81 560 }
khaiminhvn 9:6e950b9a9a81 561 else if(bt_dec.read() && wthres > WIND_THRES_MIN)
khaiminhvn 9:6e950b9a9a81 562 {
khaiminhvn 24:ea7abc25a697 563 wthres -= WIND_INC;
khaiminhvn 24:ea7abc25a697 564 ane.setThres(wthres);
khaiminhvn 28:1b8e1d100b58 565 if(flag_eth){gui->survivalSpeed(wthres);}
khaiminhvn 9:6e950b9a9a81 566 botL = Misc::itos(wthres) + " kph";
khaiminhvn 9:6e950b9a9a81 567 lcd.LCD_display(topL,botL);
khaiminhvn 9:6e950b9a9a81 568 flag_idle = 0;
khaiminhvn 9:6e950b9a9a81 569 flag_bres = -1;
khaiminhvn 9:6e950b9a9a81 570 }
khaiminhvn 9:6e950b9a9a81 571 else{
khaiminhvn 9:6e950b9a9a81 572 flag_bres = 0;
khaiminhvn 9:6e950b9a9a81 573 }
khaiminhvn 9:6e950b9a9a81 574 }
khaiminhvn 9:6e950b9a9a81 575
khaiminhvn 9:6e950b9a9a81 576 flag_time = 1; //Set the system in motion once done adjusting
khaiminhvn 7:2b6438e586e6 577 break;
khaiminhvn 8:a1481d5f0572 578 }
khaiminhvn 16:326404a7a8b8 579 ////////////////////////////////////////////////////////////////////////
khaiminhvn 16:326404a7a8b8 580 case OP_OVERHEAT:{
khaiminhvn 28:1b8e1d100b58 581 if (flag_eth && prevm != mode){gui->state(mode);}
khaiminhvn 28:1b8e1d100b58 582 if (flag_eth){gui->windSpeed(ane.getWind());}
khaiminhvn 27:26f41a320436 583 prevm = mode;
khaiminhvn 16:326404a7a8b8 584 if(timer_read_ms(t_disp) >= LCD_RRATE){
khaiminhvn 16:326404a7a8b8 585 topL = (flag_flas)? "*!* OVERHEAT *!*": " OVERHEAT ";
khaiminhvn 16:326404a7a8b8 586 botL = (flag_flas)? " KEEP DISTANCE " : (" " + Misc::itos(fan.getTemp(),3) + "C");
khaiminhvn 16:326404a7a8b8 587 flag_flas = !flag_flas;
khaiminhvn 16:326404a7a8b8 588 t_disp.reset();
khaiminhvn 16:326404a7a8b8 589 t_disp.start();
khaiminhvn 16:326404a7a8b8 590 lcd.LCD_display(topL,botL);
khaiminhvn 16:326404a7a8b8 591 }
khaiminhvn 16:326404a7a8b8 592 motor.moveBackward(M_ALL);
khaiminhvn 16:326404a7a8b8 593 fan.checkTemp(&mode);
khaiminhvn 16:326404a7a8b8 594 flag_disp = 1;
khaiminhvn 16:326404a7a8b8 595 flag_time = 1;
khaiminhvn 16:326404a7a8b8 596 break;
khaiminhvn 16:326404a7a8b8 597 }
khaiminhvn 16:326404a7a8b8 598 ////////////////////////////////////////////////////////////////////////
khaiminhvn 16:326404a7a8b8 599 case OP_OVERHEAT_MAN:{
khaiminhvn 28:1b8e1d100b58 600 if (flag_eth && prevm != mode){gui->state(mode);}
khaiminhvn 28:1b8e1d100b58 601 if (flag_eth){gui->windSpeed(ane.getWind());}
khaiminhvn 27:26f41a320436 602 prevm = mode;
khaiminhvn 16:326404a7a8b8 603 if(timer_read_ms(t_disp) >= LCD_RRATE){
khaiminhvn 16:326404a7a8b8 604 topL = (flag_flas)? "*!* OVERHEAT *!*": " OVERHEAT ";
khaiminhvn 16:326404a7a8b8 605 botL = (flag_flas)? " PRESS FN " : (" " + Misc::itos(fan.getTemp(),3) + "C");
khaiminhvn 16:326404a7a8b8 606 flag_flas = !flag_flas;
khaiminhvn 16:326404a7a8b8 607 t_disp.reset();
khaiminhvn 16:326404a7a8b8 608 t_disp.start();
khaiminhvn 16:326404a7a8b8 609 lcd.LCD_display(topL,botL);
khaiminhvn 16:326404a7a8b8 610 }
khaiminhvn 16:326404a7a8b8 611 motor.stop();
khaiminhvn 16:326404a7a8b8 612 flag_disp = 1;
khaiminhvn 16:326404a7a8b8 613 break;
khaiminhvn 16:326404a7a8b8 614 }
jump_man 17:238ccf7e3676 615 ////////////////////////////////////////////////////////////////////////
jump_man 17:238ccf7e3676 616 case OP_POWER_OFF:{
khaiminhvn 28:1b8e1d100b58 617 if (flag_eth && prevm != mode){gui->state(mode);}
khaiminhvn 28:1b8e1d100b58 618 if (flag_eth){gui->receives(&wthres, &flag_aTrack, &flag_powerOn,&sun_angle);}
khaiminhvn 27:26f41a320436 619 prevm = mode;
jump_man 17:238ccf7e3676 620 if(mode != OP_POWER_OFF){break;}
khaiminhvn 26:b30a61a55b2f 621 if(flag_powerOn){
khaiminhvn 26:b30a61a55b2f 622 mode = OP_NORMAL;
khaiminhvn 26:b30a61a55b2f 623 break;
khaiminhvn 26:b30a61a55b2f 624 }
khaiminhvn 28:1b8e1d100b58 625 if (flag_eth){gui->windSpeed(ane.getWind());}
khaiminhvn 26:b30a61a55b2f 626 fan.checkTemp(&mode);if(mode != OP_POWER_OFF){break;}
jump_man 17:238ccf7e3676 627 if(timer_read_ms(t_disp) >= LCD_RRATE){
jump_man 17:238ccf7e3676 628 topL = "SLEEP MODE";
jump_man 17:238ccf7e3676 629 flag_flas = !flag_flas;
jump_man 17:238ccf7e3676 630 botL = Misc::itos(ane.getWind(&flag_disp),3) + "kph | " + Misc::itos(fan.getTemp()) + "C";
jump_man 17:238ccf7e3676 631 t_disp.reset();
jump_man 17:238ccf7e3676 632 t_disp.start();
jump_man 17:238ccf7e3676 633 lcd.LCD_display(topL,botL);
jump_man 17:238ccf7e3676 634 }
jump_man 17:238ccf7e3676 635
jump_man 17:238ccf7e3676 636 //Move all motor backward
jump_man 17:238ccf7e3676 637 motor.moveBackward(M_ALL);
jump_man 17:238ccf7e3676 638 flag_time = 1; //Set the system in motion once windspeed has subsided
jump_man 17:238ccf7e3676 639 break;
jump_man 17:238ccf7e3676 640 }
khaiminhvn 20:0a6609515810 641 ////////////////////////////////////////////////////////////////////////
khaiminhvn 20:0a6609515810 642 case OP_ATRACK:{
khaiminhvn 28:1b8e1d100b58 643 if (flag_eth && prevm != mode){gui->state(mode);}
khaiminhvn 27:26f41a320436 644 prevm = mode;
khaiminhvn 20:0a6609515810 645 flag_aTrack = !flag_aTrack;
khaiminhvn 28:1b8e1d100b58 646 gui->activeTracking(flag_aTrack);
khaiminhvn 28:1b8e1d100b58 647 if (flag_eth){gui->windSpeed(ane.getWind());}
khaiminhvn 21:e9978d9823fe 648 fan.checkTemp(&mode);if(mode != OP_ATRACK){break;}
khaiminhvn 20:0a6609515810 649 topL = "TRACKING MODE:";
khaiminhvn 20:0a6609515810 650 botL = (flag_aTrack) ? "ACTIVE (ACC)" : "AUTO (ONLINE)";
khaiminhvn 20:0a6609515810 651 lcd.LCD_display(topL,botL);
khaiminhvn 20:0a6609515810 652 flag_disp = 0;
khaiminhvn 20:0a6609515810 653 wait_us(TIME_ATRACK_TIMEOUT);
khaiminhvn 20:0a6609515810 654
khaiminhvn 20:0a6609515810 655 mode = OP_NORMAL;
khaiminhvn 20:0a6609515810 656 flag_time = 1; //Set the system in motion once done adjusting
khaiminhvn 20:0a6609515810 657 break;
khaiminhvn 20:0a6609515810 658 }
khaiminhvn 20:0a6609515810 659 ////////////////////////////////////////////////////////////////////////
khaiminhvn 23:5dff9aed3727 660 case OP_RECONNECT:{
khaiminhvn 23:5dff9aed3727 661 topL = "CONNECTING";
khaiminhvn 23:5dff9aed3727 662 botL = "";
khaiminhvn 23:5dff9aed3727 663 lcd.LCD_display(topL,botL);
khaiminhvn 26:b30a61a55b2f 664
khaiminhvn 26:b30a61a55b2f 665 for(int i = 0; (i < CONN_N && !flag_eth); i++){
khaiminhvn 26:b30a61a55b2f 666 eth.connect();
khaiminhvn 28:1b8e1d100b58 667 gui->refreshConnection(URL,&flag_eth);
khaiminhvn 26:b30a61a55b2f 668 wait_us(1000000);
khaiminhvn 28:1b8e1d100b58 669 inverter->connect(URL, PORT);
khaiminhvn 26:b30a61a55b2f 670 }
khaiminhvn 26:b30a61a55b2f 671 wait_us(1000000);
khaiminhvn 23:5dff9aed3727 672 bt_fn.setConnected(flag_eth);
khaiminhvn 23:5dff9aed3727 673
khaiminhvn 28:1b8e1d100b58 674 if (flag_eth){gui->getSunAngle();}
khaiminhvn 23:5dff9aed3727 675 if (flag_eth){
khaiminhvn 23:5dff9aed3727 676 topL = "ETHERNET";
khaiminhvn 23:5dff9aed3727 677 botL = "CONNECTED";
khaiminhvn 23:5dff9aed3727 678 lcd.LCD_display(topL, botL);
khaiminhvn 23:5dff9aed3727 679 }
khaiminhvn 23:5dff9aed3727 680 else{
khaiminhvn 23:5dff9aed3727 681 topL = "ETHERNET";
khaiminhvn 23:5dff9aed3727 682 botL = "NOT CONNECTED";
khaiminhvn 23:5dff9aed3727 683 lcd.LCD_display(topL, botL);
khaiminhvn 23:5dff9aed3727 684 }
khaiminhvn 23:5dff9aed3727 685 wait_us(TIME_RECONNECT_TIMEOUT);
khaiminhvn 23:5dff9aed3727 686
khaiminhvn 23:5dff9aed3727 687 mode = OP_NORMAL;
khaiminhvn 23:5dff9aed3727 688 flag_time = 1; //Set the system in motion once done adjusting
khaiminhvn 23:5dff9aed3727 689 break;
khaiminhvn 23:5dff9aed3727 690 }
khaiminhvn 23:5dff9aed3727 691 ////////////////////////////////////////////////////////////////////////
khaiminhvn 0:74d6e93ec977 692 }
khaiminhvn 28:1b8e1d100b58 693 if(!flag_eth && timer_read_s(t_recon) >= TIME_RECON && flag_rec){
khaiminhvn 26:b30a61a55b2f 694 eth.connect();
khaiminhvn 28:1b8e1d100b58 695 gui->refreshConnection(URL,&flag_eth);
khaiminhvn 28:1b8e1d100b58 696 inverter->connect(URL, PORT);
khaiminhvn 26:b30a61a55b2f 697 bt_fn.setConnected(flag_eth);
khaiminhvn 26:b30a61a55b2f 698 }
jump_man 17:238ccf7e3676 699
khaiminhvn 7:2b6438e586e6 700 wait_us(LOOP_DELAY);
jump_man 17:238ccf7e3676 701 flag_disp = 1;
khaiminhvn 0:74d6e93ec977 702 }
khaiminhvn 0:74d6e93ec977 703
khaiminhvn 0:74d6e93ec977 704 }
khaiminhvn 0:74d6e93ec977 705 ////////////////////////////////////////////////////////////////////////////////
khaiminhvn 7:2b6438e586e6 706 ////////////////////////////////////////////////////////////////////////////////