Project aiming to make a self-controlled solar reflector
Dependencies: Accelerometer LCD Inverter Algorithm MotorDriver Anemometer GUI ArduinoJson Misc Definitions Pushbutton WebSocketClient temp_fan
Diff: main.cpp
- Revision:
- 14:3989d03a8b98
- Parent:
- 12:14bac44e33b9
- Child:
- 15:2b3b5d8bf692
--- a/main.cpp Fri Mar 12 03:20:04 2021 +0000 +++ b/main.cpp Fri Mar 12 04:15:49 2021 +0000 @@ -47,6 +47,7 @@ int flag_idle = 0; //Idling time int flag_disp = 1; //Anti-flickering int flag_bres = 0; //Flag for checking button released +int flag_flas = 1; //Flag for flashing symbol //PUSH BUTTONS Pushbutton bt_fn(PIN_BTFN,&mode,&flag_disp); @@ -84,10 +85,22 @@ break; } //////////////////////////////////////////////////////////////////////////////// + case OP_CONFIRM:{ + while(mode == OP_CONFIRM){ + topL = "R1 || P || R2"; + botL = Misc::itos((int)acc.getAngle(S_R1),3) + + "||" + Misc::itos((int)acc.getAngle(S_PANEL),3) + + "||" + Misc::itos((int)acc.getAngle(S_R2),3); + lcd.LCD_display(topL,botL); + flag_disp = 0; + wait_us(LCD_RRATE); + } + } +//////////////////////////////////////////////////////////////////////////////// case OP_NORMAL:{ ane.checkWind(&mode); topL = "NORMAL:IDLING"; - if(timer_read_ms(t_disp) >= LCD_WRATE){ + if(timer_read_ms(t_disp) >= LCD_RRATE){ botL = Misc::itos((int)ane.getWind(&flag_disp)) + " kph"; t_disp.reset(); t_disp.start(); @@ -107,26 +120,36 @@ ref_R1 = Algorithm::calcAngle(1,ang_P); ref_R2 = Algorithm::calcAngle(2,ang_P); - //Moving Reflector 1 - topL = "NORMAL:MOVING R1"; - if(timer_read_ms(t_disp) >= LCD_WRATE){ - botL = Misc::itos((int)ane.getWind(&flag_disp)) + " kph"; - t_disp.reset(); - t_disp.start(); - } - lcd.LCD_display(topL,botL); - + //Moving Reflector 1 ang_R = acc.getAngle(S_R1); - while(ang_R <= ref_R1 && acc.checkAngle(ref_R1,ang_R)) + while(ang_R <= ref_R1 && !acc.checkAngle(ref_R1,ang_R)) { ane.checkWind(&mode); + if(timer_read_ms(t_disp) >= LCD_RRATE){ + topL = (flag_flas)? "NORMAL:R1 <->" : "NORMAL:R1 <<->>"; + flag_flas = !flag_flas; + botL = Misc::itos((int)ane.getWind(&flag_disp),3) + " kph"; + t_disp.reset(); + t_disp.start(); + } + lcd.LCD_display(topL,botL); + if(mode != OP_NORMAL) {break;} motor.moveForward(M1); ang_R = acc.getAngle(S_R1); } - while(ang_R >= ref_R1 && acc.checkAngle(ref_R1,ang_R)) + while(ang_R >= ref_R1 && !acc.checkAngle(ref_R1,ang_R)) { ane.checkWind(&mode); + if(timer_read_ms(t_disp) >= LCD_RRATE){ + topL = (flag_flas)? "NORMAL:R1 >>-<<" : "NORMAL:R1 > - <"; + flag_flas = !flag_flas; + botL = Misc::itos((int)ane.getWind(&flag_disp),3) + " kph"; + t_disp.reset(); + t_disp.start(); + } + lcd.LCD_display(topL,botL); + if(mode != OP_NORMAL) {break;} motor.moveBackward(M1); ang_R = acc.getAngle(S_R1); @@ -134,25 +157,35 @@ motor.stop(); //Moving Reflector 2 - topL = "NORMAL:MOVING R1"; - if(timer_read_ms(t_disp) >= LCD_WRATE){ - botL = Misc::itos((int)ane.getWind(&flag_disp)) + " kph"; - t_disp.reset(); - t_disp.start(); - } - lcd.LCD_display(topL,botL); - ang_R = acc.getAngle(S_R2); - while(ang_R <= ref_R2 && acc.checkAngle(ref_R2,ang_R)) + while(ang_R <= ref_R2 && !acc.checkAngle(ref_R2,ang_R)) { ane.checkWind(&mode); + if(timer_read_ms(t_disp) >= LCD_RRATE){ + topL = (flag_flas)? "NORMAL:R2 <->" : "NORMAL:R2 <<->>"; + flag_flas = !flag_flas; + botL = Misc::itos((int)ane.getWind(&flag_disp),3) + " kph"; + t_disp.reset(); + t_disp.start(); + } + lcd.LCD_display(topL,botL); + if(mode != OP_NORMAL) {break;} motor.moveForward(M2); ang_R = acc.getAngle(S_R2); } - while(ang_R >= ref_R2 && acc.checkAngle(ref_R2,ang_R)) + while(ang_R >= ref_R2 && !acc.checkAngle(ref_R2,ang_R)) { ane.checkWind(&mode); + if(timer_read_ms(t_disp) >= LCD_RRATE){ + topL = (flag_flas)? "NORMAL:R2 >>-<<" : "NORMAL:R2 > - <"; + flag_flas = !flag_flas; + botL = Misc::itos((int)ane.getWind(&flag_disp),3) + " kph"; + t_disp.reset(); + t_disp.start(); + } + lcd.LCD_display(topL,botL); + if(mode != OP_NORMAL) {break;} motor.moveBackward(M2); ang_R = acc.getAngle(S_R2); @@ -171,7 +204,7 @@ case OP_WIND:{ ane.checkWind(&mode); topL = "WIND SAFETY"; - if(timer_read_ms(t_disp) >= LCD_WRATE){ + if(timer_read_ms(t_disp) >= LCD_RRATE){ botL = Misc::itos((int)ane.getWind(&flag_disp)) + " kph"; t_disp.reset(); t_disp.start();