Project aiming to make a self-controlled solar reflector

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

Revision:
9:6e950b9a9a81
Parent:
8:a1481d5f0572
Child:
10:566529fff615
--- a/main.cpp	Fri Mar 12 01:08:32 2021 +0000
+++ b/main.cpp	Fri Mar 12 01:45:00 2021 +0000
@@ -15,6 +15,7 @@
 #include "Pushbutton.h"
 #include "PinAssignment.h"
 #include "LCD.h"
+#include "Misc.h"
 #include <string>
 
 #define timer_read_s(x)     chrono::duration_cast<chrono::seconds>((x).elapsed_time()).count()
@@ -44,6 +45,7 @@
 int flag_time = 1; //Normal mode time
 int flag_idle = 0; //Idling time
 int flag_disp = 1; //Anti-flickering
+int flag_bres = 0; //Flag for checking button released
 
 //PUSH BUTTONS
 Pushbutton bt_fn(PIN_BTFN,&mode,&flag_disp);
@@ -80,6 +82,7 @@
                 flag_disp = 0;
             }
             
+            flag_idle = 0;
             break;
         }
 ////////////////////////////////////////////////////////////////////////////////
@@ -92,6 +95,7 @@
                 flag_disp = 0;
             }
             
+            flag_idle = 0;
             break;
         }
 ////////////////////////////////////////////////////////////////////////////////
@@ -119,12 +123,52 @@
 ////////////////////////////////////////////////////////////////////////////////
         case OP_WSETTING:{
             topL = "Threshold:";
-            botL = "";
+            botL = Misc::itos(wthres) + " kph";
             if(flag_disp){
                 lcd.LCD_display(topL,botL);
                 flag_disp = 0;
             }
             
+            //TIMEOUT
+            ////////////////////////////////////////////////////////////////////
+            if(!flag_idle) //Check if button is not pressed
+            {
+                t_mode.reset();
+                t_mode.start();
+                flag_idle = 1; //Indicate idling
+            }
+            else if(timer_read_s(t_mode) > TIME_WSETTING_TIMEOUT)
+            {
+                mode = OP_NORMAL;
+                flag_disp = 1;
+                break;
+            }
+            ////////////////////////////////////////////////////////////////////
+            
+            if(!(flag_bres == 1 && bt_inc.read()) && !(flag_bres == -1 && bt_dec.read())){
+                if(bt_inc.read() && wthres < WIND_THRES_MAX)
+                {
+                    ane.setThres(++wthres);
+                    botL = Misc::itos(wthres) + " kph";
+                    lcd.LCD_display(topL,botL);
+                    flag_idle = 0;
+                    flag_bres = 1;
+                }
+                else if(bt_dec.read() && wthres > WIND_THRES_MIN)
+                {
+                    ane.setThres(--wthres);
+                    botL = Misc::itos(wthres) + " kph";
+                    lcd.LCD_display(topL,botL);
+                    flag_idle = 0;
+                    flag_bres = -1;
+                }
+                else{
+                    flag_bres = 0;
+                }
+            }
+            
+            flag_time = 1; //Set the system in motion once done adjusting
+            
             break;
         }
     }