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:
Fri Mar 12 01:08:32 2021 +0000
Revision:
8:a1481d5f0572
Parent:
7:2b6438e586e6
Child:
9:6e950b9a9a81
Added anti-flickering for display

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 6:0b7a6e51cdf8 18 #include <string>
khaiminhvn 0:74d6e93ec977 19
khaiminhvn 0:74d6e93ec977 20 #define timer_read_s(x) chrono::duration_cast<chrono::seconds>((x).elapsed_time()).count()
khaiminhvn 0:74d6e93ec977 21
khaiminhvn 0:74d6e93ec977 22 //Initialize Global Variables
khaiminhvn 7:2b6438e586e6 23 I2C i2c(PIN_SDA,PIN_SCL);
khaiminhvn 0:74d6e93ec977 24 Anemometer ane; //
khaiminhvn 7:2b6438e586e6 25 //MotorDriver motor;
khaiminhvn 0:74d6e93ec977 26 LowPowerTimer t,t_mode;
khaiminhvn 7:2b6438e586e6 27 int mode = OP_CALIBRATION;
khaiminhvn 0:74d6e93ec977 28
khaiminhvn 0:74d6e93ec977 29 ////////////////////////////////////////////////////////////////////////////////
khaiminhvn 0:74d6e93ec977 30 ////////////////////////////////////////////////////////////////////////////////
khaiminhvn 0:74d6e93ec977 31 int main()
khaiminhvn 0:74d6e93ec977 32 {
khaiminhvn 7:2b6438e586e6 33 i2c.frequency(I2C_FREQ);
khaiminhvn 7:2b6438e586e6 34 //Accelerometer acc(&i2c); //Accelerometer
khaiminhvn 7:2b6438e586e6 35 LCD lcd(&i2c);
khaiminhvn 7:2b6438e586e6 36
khaiminhvn 0:74d6e93ec977 37 float ang_P,ang_R;
khaiminhvn 0:74d6e93ec977 38 float ref_R1,ref_R2;
khaiminhvn 0:74d6e93ec977 39 int t_elapsed;
khaiminhvn 0:74d6e93ec977 40 int wthres = WIND_THRES_INIT;
khaiminhvn 6:0b7a6e51cdf8 41 char buffer[16];
khaiminhvn 6:0b7a6e51cdf8 42
khaiminhvn 8:a1481d5f0572 43 //FLAGS
khaiminhvn 8:a1481d5f0572 44 int flag_time = 1; //Normal mode time
khaiminhvn 8:a1481d5f0572 45 int flag_idle = 0; //Idling time
khaiminhvn 8:a1481d5f0572 46 int flag_disp = 1; //Anti-flickering
khaiminhvn 8:a1481d5f0572 47
khaiminhvn 8:a1481d5f0572 48 //PUSH BUTTONS
khaiminhvn 8:a1481d5f0572 49 Pushbutton bt_fn(PIN_BTFN,&mode,&flag_disp);
khaiminhvn 8:a1481d5f0572 50 Pushbutton bt_inc(PIN_BTINC);
khaiminhvn 8:a1481d5f0572 51 Pushbutton bt_dec(PIN_BTDEC);
khaiminhvn 8:a1481d5f0572 52
khaiminhvn 7:2b6438e586e6 53 string topL = "PUT SENSORS IN";
khaiminhvn 7:2b6438e586e6 54 string botL = "CALIBRATION SLOT";
khaiminhvn 0:74d6e93ec977 55
khaiminhvn 0:74d6e93ec977 56 t.start(); //Start timer
khaiminhvn 0:74d6e93ec977 57
khaiminhvn 6:0b7a6e51cdf8 58 lcd.LCD_display(topL, botL);
khaiminhvn 6:0b7a6e51cdf8 59
khaiminhvn 0:74d6e93ec977 60 while(1)
khaiminhvn 0:74d6e93ec977 61 {
khaiminhvn 0:74d6e93ec977 62 switch(mode)
khaiminhvn 0:74d6e93ec977 63 {
khaiminhvn 7:2b6438e586e6 64 case OP_PLACEMENT:{
khaiminhvn 7:2b6438e586e6 65 topL = "PUT SENSOR ON";
khaiminhvn 7:2b6438e586e6 66 botL = "PANEL&REFLECTORS";
khaiminhvn 8:a1481d5f0572 67 if(flag_disp){
khaiminhvn 8:a1481d5f0572 68 lcd.LCD_display(topL,botL);
khaiminhvn 8:a1481d5f0572 69 flag_disp = 0;
khaiminhvn 8:a1481d5f0572 70 }
khaiminhvn 7:2b6438e586e6 71
khaiminhvn 7:2b6438e586e6 72 break;
khaiminhvn 8:a1481d5f0572 73 }
khaiminhvn 0:74d6e93ec977 74 ////////////////////////////////////////////////////////////////////////////////
khaiminhvn 7:2b6438e586e6 75 case OP_NORMAL:{
khaiminhvn 7:2b6438e586e6 76 topL = "NORMAL";
khaiminhvn 7:2b6438e586e6 77 botL = "";
khaiminhvn 8:a1481d5f0572 78 if(flag_disp){
khaiminhvn 8:a1481d5f0572 79 lcd.LCD_display(topL,botL);
khaiminhvn 8:a1481d5f0572 80 flag_disp = 0;
khaiminhvn 8:a1481d5f0572 81 }
khaiminhvn 0:74d6e93ec977 82
khaiminhvn 7:2b6438e586e6 83 break;
khaiminhvn 8:a1481d5f0572 84 }
khaiminhvn 7:2b6438e586e6 85 ////////////////////////////////////////////////////////////////////////////////
khaiminhvn 7:2b6438e586e6 86 case OP_WIND:{
khaiminhvn 7:2b6438e586e6 87 ane.checkWind(&mode);
khaiminhvn 7:2b6438e586e6 88 topL = "WIND SAFETY";
khaiminhvn 7:2b6438e586e6 89 botL = "";
khaiminhvn 8:a1481d5f0572 90 if(flag_disp){
khaiminhvn 8:a1481d5f0572 91 lcd.LCD_display(topL,botL);
khaiminhvn 8:a1481d5f0572 92 flag_disp = 0;
khaiminhvn 8:a1481d5f0572 93 }
khaiminhvn 0:74d6e93ec977 94
khaiminhvn 7:2b6438e586e6 95 break;
khaiminhvn 8:a1481d5f0572 96 }
khaiminhvn 0:74d6e93ec977 97 ////////////////////////////////////////////////////////////////////////////////
khaiminhvn 7:2b6438e586e6 98 case OP_MANUAL1:{
khaiminhvn 7:2b6438e586e6 99 topL = "MANUAL: M1";
khaiminhvn 7:2b6438e586e6 100 botL = "";
khaiminhvn 8:a1481d5f0572 101 if(flag_disp){
khaiminhvn 8:a1481d5f0572 102 lcd.LCD_display(topL,botL);
khaiminhvn 8:a1481d5f0572 103 flag_disp = 0;
khaiminhvn 8:a1481d5f0572 104 }
khaiminhvn 0:74d6e93ec977 105
khaiminhvn 7:2b6438e586e6 106 break;
khaiminhvn 8:a1481d5f0572 107 }
khaiminhvn 7:2b6438e586e6 108 ////////////////////////////////////////////////////////////////////////////////
khaiminhvn 7:2b6438e586e6 109 case OP_MANUAL2:{
khaiminhvn 7:2b6438e586e6 110 topL = "MANUAL: M2";
khaiminhvn 7:2b6438e586e6 111 botL = "";
khaiminhvn 8:a1481d5f0572 112 if(flag_disp){
khaiminhvn 8:a1481d5f0572 113 lcd.LCD_display(topL,botL);
khaiminhvn 8:a1481d5f0572 114 flag_disp = 0;
khaiminhvn 8:a1481d5f0572 115 }
khaiminhvn 7:2b6438e586e6 116
khaiminhvn 0:74d6e93ec977 117 break;
khaiminhvn 8:a1481d5f0572 118 }
khaiminhvn 7:2b6438e586e6 119 ////////////////////////////////////////////////////////////////////////////////
khaiminhvn 7:2b6438e586e6 120 case OP_WSETTING:{
khaiminhvn 7:2b6438e586e6 121 topL = "Threshold:";
khaiminhvn 7:2b6438e586e6 122 botL = "";
khaiminhvn 8:a1481d5f0572 123 if(flag_disp){
khaiminhvn 8:a1481d5f0572 124 lcd.LCD_display(topL,botL);
khaiminhvn 8:a1481d5f0572 125 flag_disp = 0;
khaiminhvn 8:a1481d5f0572 126 }
khaiminhvn 0:74d6e93ec977 127
khaiminhvn 7:2b6438e586e6 128 break;
khaiminhvn 8:a1481d5f0572 129 }
khaiminhvn 0:74d6e93ec977 130 }
khaiminhvn 7:2b6438e586e6 131 wait_us(LOOP_DELAY);
khaiminhvn 0:74d6e93ec977 132 }
khaiminhvn 0:74d6e93ec977 133
khaiminhvn 0:74d6e93ec977 134 }
khaiminhvn 0:74d6e93ec977 135 ////////////////////////////////////////////////////////////////////////////////
khaiminhvn 7:2b6438e586e6 136 ////////////////////////////////////////////////////////////////////////////////