timer function
This commit is contained in:
		
							parent
							
								
									bf1de69f24
								
							
						
					
					
						commit
						86d4d3f3d1
					
				
					 5 changed files with 89 additions and 15 deletions
				
			
		| 
						 | 
					@ -336,7 +336,7 @@ void thread_initialization()
 | 
				
			||||||
  eeprom_pwm_updater.onRun(eeprom_pwm_update);
 | 
					  eeprom_pwm_updater.onRun(eeprom_pwm_update);
 | 
				
			||||||
  eeprom_pwm_updater.setInterval(1000);
 | 
					  eeprom_pwm_updater.setInterval(1000);
 | 
				
			||||||
  user_timer_tick.onRun(timer_tick_callback);
 | 
					  user_timer_tick.onRun(timer_tick_callback);
 | 
				
			||||||
  user_timer_tick.setInterval(5000);
 | 
					  user_timer_tick.setInterval(15000);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void pwm_state_callback(String topic, String message)
 | 
					void pwm_state_callback(String topic, String message)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										40
									
								
								src/espmega_iot_timer.cpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								src/espmega_iot_timer.cpp
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,40 @@
 | 
				
			||||||
 | 
					#include "espmega_iot_timer.hpp"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Timer::loop() {
 | 
				
			||||||
 | 
					    rtctime_t curtime = ESPMega_getTime();
 | 
				
			||||||
 | 
					    if(today!=curtime.day) {
 | 
				
			||||||
 | 
					        today=curtime.day;
 | 
				
			||||||
 | 
					        timer_ran_today = false;
 | 
				
			||||||
 | 
					        ESPMega_FRAM.write8(fram_address,timer_ran_today);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (!timer_ran_today && (hr < curtime.hours || (hr == curtime.hours && min <= curtime.minutes))) {
 | 
				
			||||||
 | 
					        timer_ran_today = true;
 | 
				
			||||||
 | 
					        ESPMega_FRAM.write8(fram_address,timer_ran_today);
 | 
				
			||||||
 | 
					        timer_callback();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Timer::Timer(uint8_t hour,uint8_t minute,void(*timer_callback)(), uint32_t fram_address) {
 | 
				
			||||||
 | 
					    rtctime_t curtime = ESPMega_getTime();
 | 
				
			||||||
 | 
					    this-> today = curtime.day;
 | 
				
			||||||
 | 
					    this->hr = hour;
 | 
				
			||||||
 | 
					    this->min = minute;
 | 
				
			||||||
 | 
					    this->timer_callback = timer_callback;
 | 
				
			||||||
 | 
					    this->fram_address = fram_address;
 | 
				
			||||||
 | 
					    this-> timer_ran_today = ESPMega_FRAM.read8(fram_address);
 | 
				
			||||||
 | 
					    loop();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Timer::set(uint8_t hour,uint8_t minute) {
 | 
				
			||||||
 | 
					    rtctime_t curtime = ESPMega_getTime();
 | 
				
			||||||
 | 
					    if ((hr < curtime.hours || (hr == curtime.hours && min <= curtime.minutes))) {
 | 
				
			||||||
 | 
					        this->timer_ran_today = true;
 | 
				
			||||||
 | 
					        ESPMega_FRAM.write8(fram_address,timer_ran_today);
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        this->timer_ran_today = false;
 | 
				
			||||||
 | 
					        ESPMega_FRAM.write8(fram_address,timer_ran_today);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    hr = hour;
 | 
				
			||||||
 | 
					    min = minute;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										16
									
								
								src/espmega_iot_timer.hpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								src/espmega_iot_timer.hpp
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,16 @@
 | 
				
			||||||
 | 
					#pragma once
 | 
				
			||||||
 | 
					#include <ESPMegaPRO.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Timer {
 | 
				
			||||||
 | 
					    public:
 | 
				
			||||||
 | 
					        void loop();
 | 
				
			||||||
 | 
					        Timer(uint8_t hour,uint8_t minute,void(*timer_callback)(), uint32_t fram_address);
 | 
				
			||||||
 | 
					        void set(uint8_t hour,uint8_t minute);
 | 
				
			||||||
 | 
					    private:
 | 
				
			||||||
 | 
					        uint8_t today;
 | 
				
			||||||
 | 
					        uint8_t timer_ran_today;
 | 
				
			||||||
 | 
					        uint8_t hr;
 | 
				
			||||||
 | 
					        uint8_t min;
 | 
				
			||||||
 | 
					        uint32_t fram_address;
 | 
				
			||||||
 | 
					        void (*timer_callback)();
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
| 
						 | 
					@ -1,37 +1,57 @@
 | 
				
			||||||
#include <user_code.hpp>
 | 
					#include <user_code.hpp>
 | 
				
			||||||
 | 
					int today = 0;
 | 
				
			||||||
 | 
					bool timer1_ran_today = false;
 | 
				
			||||||
 | 
					uint8_t timer1_hr = 0;
 | 
				
			||||||
 | 
					uint8_t timer1_min = 15;
 | 
				
			||||||
 | 
					uint8_t today = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
This Code will run right after ESPMega PRO's
 | 
					This Code will run right after ESPMega PRO's
 | 
				
			||||||
Peripheral Initialization Routine
 | 
					Peripheral Initialization Routine
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
void user_pre_init() {
 | 
					void user_pre_init()
 | 
				
			||||||
    
 | 
					{
 | 
				
			||||||
 | 
					    timer1_ran_today = ESPMega_FRAM.read8(15000);
 | 
				
			||||||
 | 
					    rtctime_t curtime = ESPMega_getTime();
 | 
				
			||||||
 | 
					    today = curtime.day;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
This code will run after every component is initialized
 | 
					This code will run after every component is initialized
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
void user_init() {
 | 
					void user_init()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
This code will run once every event loop
 | 
					This code will run once every event loop
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
void user_loop() {
 | 
					void user_loop()
 | 
				
			||||||
    
 | 
					{
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
This code will run when an input pin changed state
 | 
					This code will run when an input pin changed state
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
void virtual_interrupt_user_callback(int pin, int state) {
 | 
					void virtual_interrupt_user_callback(int pin, int state)
 | 
				
			||||||
    
 | 
					{
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
This code will run every 5 seconds
 | 
					This code will run every 15 seconds
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
void timer_tick_callback() {
 | 
					void timer_tick_callback()
 | 
				
			||||||
    
 | 
					{
 | 
				
			||||||
 | 
					    rtctime_t curtime = ESPMega_getTime();
 | 
				
			||||||
 | 
					    if(today!=curtime.day) {
 | 
				
			||||||
 | 
					        today=curtime.day;
 | 
				
			||||||
 | 
					        timer1_ran_today = false;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (!timer1_ran_today && (timer1_hr < curtime.hours || (timer1_hr == curtime.hours && timer1_min <= curtime.minutes)))
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        timer1_ran_today = true;
 | 
				
			||||||
 | 
					        ESPMega_FRAM.write8(15000,timer1_ran_today);
 | 
				
			||||||
 | 
					        pwm_set_state(1,true);
 | 
				
			||||||
 | 
					        pwm_set_value(1,2000);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,9 +1,7 @@
 | 
				
			||||||
#pragma once
 | 
					#pragma once
 | 
				
			||||||
#include <ESPMegaPRO.h>
 | 
					#include <ESPMegaPRO.h>
 | 
				
			||||||
#include <EasyNextionLibrary.h>
 | 
					#include <EasyNextionLibrary.h>
 | 
				
			||||||
 | 
					#include "espmega_iot_timer.hpp"
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
// External LCD Configuration
 | 
					// External LCD Configuration
 | 
				
			||||||
#define ENABLE_EXTERNAL_LCD
 | 
					#define ENABLE_EXTERNAL_LCD
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue