feat: works
This commit is contained in:
		
							parent
							
								
									8ea6b47708
								
							
						
					
					
						commit
						f056ffda67
					
				|  | @ -12,6 +12,7 @@ | |||
| platform = espressif32 | ||||
| board = esp32dev | ||||
| framework = arduino | ||||
| monitor_speed = 115200 | ||||
| lib_deps = neu-rah/ArduinoMenu library@^4.21.4 | ||||
|          olikraus/U8g2@^2.35.17 | ||||
| ; build_flags = -Ilib -Isrc  | ||||
|  |  | |||
							
								
								
									
										113
									
								
								src/main.cpp
								
								
								
								
							
							
						
						
									
										113
									
								
								src/main.cpp
								
								
								
								
							|  | @ -1,4 +1,5 @@ | |||
| #include "esp32-hal-gpio.h" | ||||
| #include "esp32-hal.h" | ||||
| #include "menuBase.h" | ||||
| #include <Arduino.h> | ||||
| 
 | ||||
|  | @ -30,7 +31,8 @@ mcu: nano328p | |||
| 
 | ||||
| using namespace Menu; | ||||
| 
 | ||||
| #define LEDPIN 9 | ||||
| #define LEDPIN 2 | ||||
| #define LOCKPIN LEDPIN | ||||
| #define BTN_SEL 33 | ||||
| #define BTN_UP 32 | ||||
| #define BTN_DOWN 25 | ||||
|  | @ -95,6 +97,8 @@ const colorDef<uint8_t> colors[6] MEMMODE = { | |||
| }; | ||||
| 
 | ||||
| result doAlert(eventMask e, prompt &item); | ||||
| result doLockScreen(menuOut &o, idleEvent e); | ||||
| void decrement_timer(); | ||||
| 
 | ||||
| int test = 55; | ||||
| 
 | ||||
|  | @ -139,38 +143,48 @@ CHOOSE(chooseTest, chooseMenu, "Choose", doNothing, noEvent, noStyle, | |||
| //   }
 | ||||
| // };
 | ||||
| 
 | ||||
| MENU(subMenu, "Sub-Menu", doNothing, noEvent, noStyle, | ||||
|      OP("Sub1", doNothing, noEvent) | ||||
|      // ,altOP(altPrompt,"",doNothing,noEvent)
 | ||||
|      , | ||||
| char *constMEM hexDigit MEMMODE = "0123456789ABCDEF"; | ||||
| char *constMEM hexNr[] MEMMODE = {"0", "x", hexDigit, hexDigit}; | ||||
| char buf1[] = "0x11"; | ||||
| 
 | ||||
| // char lockTimeBuf[] = "HH:MM:SS";
 | ||||
| 
 | ||||
| MENU(lockMenu, "Lock Now!", doNothing, noEvent, noStyle, | ||||
|      EXIT("Cancel"), //
 | ||||
|      OP("Confirm", doLockScreen, enterEvent)); | ||||
| 
 | ||||
| MENU(subMenu, "Settings", doNothing, noEvent, noStyle, | ||||
|      OP("Sub1", doNothing, noEvent), | ||||
|      // altOP(altPrompt, "", doNothing, noEvent) SUBMENU(setLed), //
 | ||||
|      OP("LED On", myLedOn, enterEvent),                     //
 | ||||
|      OP("LED Off", myLedOff, enterEvent),                   //
 | ||||
|      SUBMENU(setLed),                                       //
 | ||||
|      SUBMENU(selMenu),                                      //
 | ||||
|      SUBMENU(chooseMenu),                                   //
 | ||||
|      OP("Alert test", doAlert, enterEvent),                 //
 | ||||
|      EDIT("Hex", buf1, hexNr, doNothing, noEvent, noStyle), //
 | ||||
|      EXIT("<Back")); | ||||
| 
 | ||||
| uint16_t hrs = 0; | ||||
| uint16_t mins = 0; | ||||
| uint16_t secs = 10; | ||||
| 
 | ||||
| // define a pad style menu (single line menu)
 | ||||
| // here with a set of fields to enter a date in YYYY/MM/DD format
 | ||||
| altMENU(menu, timeMenu, "Time", doNothing, noEvent, noStyle, | ||||
|         (systemStyles)(_asPad | Menu::_menuData | Menu::_canNav | _parentDraw), | ||||
|         FIELD(hrs, "", ":", 0, 11, 1, 0, doNothing, noEvent, noStyle), | ||||
|         FIELD(mins, "", "", 0, 59, 10, 1, doNothing, noEvent, wrapStyle)); | ||||
| 
 | ||||
| char *constMEM hexDigit MEMMODE = "0123456789ABCDEF"; | ||||
| char *constMEM hexNr[] MEMMODE = {"0", "x", hexDigit, hexDigit}; | ||||
| char buf1[] = "0x11"; | ||||
|         FIELD(mins, "", ":", 0, 59, 10, 1, doNothing, noEvent, wrapStyle), | ||||
|         FIELD(secs, "", "", 0, 59, 10, 1, doNothing, noEvent, wrapStyle)); | ||||
| 
 | ||||
| MENU(mainMenu, "Main menu", doNothing, noEvent, wrapStyle, | ||||
|      OP("Op1", doNothing, noEvent), | ||||
|      OP("Op2", doNothing, noEvent) | ||||
|      SUBMENU(lockMenu), //
 | ||||
|      //,FIELD(test,"Test","%",0,100,10,1,doNothing,noEvent,wrapStyle)
 | ||||
|      , | ||||
|      SUBMENU(timeMenu), SUBMENU(subMenu), SUBMENU(setLed), | ||||
|      OP("LED On", myLedOn, enterEvent), OP("LED Off", myLedOff, enterEvent), | ||||
|      SUBMENU(selMenu), SUBMENU(chooseMenu), | ||||
|      OP("Alert test", doAlert, enterEvent), | ||||
|      EDIT("Hex", buf1, hexNr, doNothing, noEvent, noStyle), EXIT("<Exit")); | ||||
|      SUBMENU(timeMenu), //
 | ||||
|      SUBMENU(subMenu),  //
 | ||||
|      EXIT("<Exit")); | ||||
| 
 | ||||
| #define MAX_DEPTH 2 | ||||
| #define MAX_DEPTH 3 | ||||
| 
 | ||||
| // encoderIn<encA,encB> encoder;//simple quad encoder driver
 | ||||
| // encoderInStream<encA,encB> encStream(encoder,4);// simple quad encoder fake
 | ||||
|  | @ -211,13 +225,52 @@ result alert(menuOut &o, idleEvent e) { | |||
|   return proceed; | ||||
| } | ||||
| 
 | ||||
| unsigned long time_s = 0; | ||||
| 
 | ||||
| void activateLock() { | ||||
|   ledCtrl = HIGH; // for demo
 | ||||
|   digitalWrite(LOCKPIN, HIGH); | ||||
| } | ||||
| void deactivateLock() { | ||||
|   ledCtrl = LOW; // for demo
 | ||||
|   digitalWrite(LOCKPIN, LOW); | ||||
| } | ||||
| 
 | ||||
| result lockScreen(menuOut &o, idleEvent e) { | ||||
|   Serial.println("lockScreen()"); | ||||
|   activateLock(); | ||||
|   while (time_s > 0) { | ||||
|     u8g2.firstPage(); | ||||
|     do { | ||||
|       o.setCursor(0, 0); | ||||
|       o.print("Locking"); | ||||
|       o.setCursor(0, 1); | ||||
|       o.print("press [select]"); | ||||
|       o.setCursor(0, 2); | ||||
|       o.print(time_s); | ||||
|       decrement_timer(); | ||||
|     } while (u8g2.nextPage()); | ||||
|   } | ||||
|   return proceed; | ||||
| } | ||||
| 
 | ||||
| result doLockScreen(menuOut &o, idleEvent e) { | ||||
|   Serial.println("doLockScreen()"); | ||||
|   time_s = secs + (mins * 60) + (hrs * 3600); | ||||
|   nav.idleOn(lockScreen); | ||||
|   nav.idleOff(); | ||||
|   return proceed; | ||||
| } | ||||
| 
 | ||||
| result doAlert(eventMask e, prompt &item) { | ||||
|   Serial.println("doAlert()"); | ||||
|   nav.idleOn(alert); | ||||
|   return proceed; | ||||
| } | ||||
| 
 | ||||
| // when menu is suspended
 | ||||
| result idle(menuOut &o, idleEvent e) { | ||||
|   Serial.println("idle()"); | ||||
|   o.clear(); | ||||
|   switch (e) { | ||||
|   case idleStart: | ||||
|  | @ -262,8 +315,9 @@ void setup() { | |||
|   // u8g2.setBitmapMode(0);
 | ||||
| 
 | ||||
|   // disable second option
 | ||||
|   mainMenu[1].enabled = disabledStatus; | ||||
|   // mainMenu[1].enabled = disabledStatus;
 | ||||
|   nav.idleTask = idle; // point a function to be used when menu is suspended
 | ||||
|   options->invertFieldKeys = true; | ||||
|   Serial.println("setup done."); | ||||
|   Serial.flush(); | ||||
| } | ||||
|  | @ -280,3 +334,22 @@ void loop() { | |||
|   } | ||||
|   delay(100); // simulate other tasks delay
 | ||||
| } | ||||
| 
 | ||||
| void decrement_timer() { | ||||
|   unsigned long timer_interval = 1000; // decrement rate
 | ||||
|   static unsigned long timer_previousMillis = | ||||
|       0; // Variable to store the last time the decrement occurred
 | ||||
|   unsigned long currentMillis = | ||||
|       millis(); // Get the current time in milliseconds
 | ||||
| 
 | ||||
|   // Check if it's time to decrement
 | ||||
|   if (currentMillis - timer_previousMillis >= timer_interval) { | ||||
| 
 | ||||
|     // Update the previous time
 | ||||
|     timer_previousMillis = currentMillis; | ||||
| 
 | ||||
|     // Decrement the variable
 | ||||
|     if (time_s > 0) | ||||
|       time_s--; | ||||
|   } | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue