From f05b6492b0e22d195fa0051f68d12e4c4e7c6b02 Mon Sep 17 00:00:00 2001 From: choelzl Date: Wed, 4 May 2022 15:10:06 +0200 Subject: [PATCH] [M] Dropped Sleep for now (IRQ Isssues) --- .gitignore | 2 + metesp.ino | 115 +++++++++------------------------------- src/display/display.cpp | 3 +- src/timedfun/timedfun.h | 5 ++ 4 files changed, 34 insertions(+), 91 deletions(-) diff --git a/.gitignore b/.gitignore index d0e81a2..96ceea6 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ env.h +build/ +.vscode/ diff --git a/metesp.ino b/metesp.ino index a004460..1ecea98 100644 --- a/metesp.ino +++ b/metesp.ino @@ -1,44 +1,39 @@ /* Includes ------------------------------------------------------------------*/ #include "env.h" -#include "src/epd/epd_cfg.h" -#include "src/epd/epd_driver.h" -#include "src/epd/epd_paint.h" - -#include "src/ntp/ntp.h" -#include "src/owm/owm.h" - -#include "src/sensor/sensor.h" -#include "src/touch/gt1151.h" - -#include "src/influxdb/influx.h" - -#include "src/display/display.h" -#include "src/timedfun/timedfun.h" - #include - #include #include #include #include +#include "src/epd/epd_cfg.h" +#include "src/epd/epd_driver.h" +#include "src/epd/epd_paint.h" +#include "src/ntp/ntp.h" +#include "src/owm/owm.h" +#include "src/sensor/sensor.h" +#include "src/touch/gt1151.h" +#include "src/influxdb/influx.h" +#include "src/display/display.h" +#include "src/timedfun/timedfun.h" + + #define PIN_SDA 18 #define PIN_SCL 23 - #define uS_TO_S_FACTOR 1000000 //Conversion factor for micro seconds to seconds #define TIME_TO_SLEEP (60*5) +#define BUTTON_PIN_BITMASK 0x8000 + /* Global Variables -----------------------------------------------------------*/ - static WiFiMulti wifiMulti; static TwoWire I2C = TwoWire(0); TaskHandle_t task_measure; TaskHandle_t task_draw; TaskHandle_t task_touch; - static NTPtime* ntp = new NTPtime(NTP_URL); static Sensor* sensor = new Sensor(&I2C); static GT1151* touch = new GT1151(&I2C); @@ -46,15 +41,10 @@ static OWM* owm[6] = {new OWM(LOCATION_0, OPENWEATHER_API), new OWM(LOCATION_1, OPENWEATHER_API), new OWM(LOCATION_2, OPENWEATHER_API), NULL,NULL,NULL}; - static Influx* iflx = new Influx(NULL, owm);//TODO: Add sensor - static TimedFun* tf = new TimedFun(); static bool time_update = true, view_update = true, view_refresh = false; -static bool shutdownt = false; -static int shutdownc = 0; - static const int8_t views_size = 6; static DisplayWrapper* views[views_size] = { @@ -65,9 +55,6 @@ static DisplayWrapper* views[views_size] = { new AirDisplay(sensor), new LightDisplay(sensor), }; - - - /* IRQ ------------------------------------------------------------------------*/ hw_timer_t * timer = NULL; void IRAM_ATTR onSecondTimer() { @@ -89,29 +76,16 @@ void IRAM_ATTR onSecondTimer() { view_update = true; time_update = true; tf->minuteTick(); - } - if(touch->dev.holding) shutdownc++; - else shutdownc = 0; -} -void IRAM_ATTR onTouch(int8_t contacts, GTPoint *points) { - if(touch->dev.holding){ - // Serial.printf("Draging:\n"); - // Serial.printf("C0: #0 %d,%d \n", touch->dev.dx, touch->dev.dy); - return; } - // Serial.printf("Contacts: %d\n", contacts); - // for (uint8_t i = 0; i < contacts; i++) { - // Serial.printf("C%d: #%d %d,%d s:%d\n", i, points[i].id, points[i].x, points[i].y, points[i].a); - // yield(); - // } +} +void IRAM_ATTR onTouch(int8_t contacts, GTPoint *points) { + if(touch->dev.holding) return; if(points[0].y < 125) Display::nextView(); else Display::prevView(); view_update = true; } - /* Setup Functions -----------------------------------------------------------*/ - void setup_TOUCH() { touch->setHandler(onTouch); touch->begin(); @@ -150,19 +124,14 @@ void setup_TIMEDFUN() { } void setup_POWER() { - gpio_wakeup_enable(GPIO_NUM_15,GPIO_INTR_HIGH_LEVEL); - esp_sleep_enable_gpio_wakeup(); - esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR); - // esp_sleep_enable_ext0_wakeup(GPIO_NUM_15, 1); - // esp_sleep_pd_config(ESP_PD_DOMAIN_VDDSDIO,ESP_PD_OPTION_ON); } - /* Setup Functions --------------------------------------------------------------*/ void setup(){ Serial.begin(115200); I2C.begin(PIN_SDA, PIN_SCL); + setup_POWER(); Display::setup(); @@ -174,9 +143,8 @@ void setup(){ iflx->check(); Display::setViews(views,views_size); - tf->updateForce(); - shutdownc = 0; + tf->setTick(ntp->dt.minute); xTaskCreatePinnedToCore( loop_MEASURE, "Task LMeasure", @@ -185,7 +153,6 @@ void setup(){ xTaskCreatePinnedToCore( loop_DRAW, "Task LDraw", 10000, NULL, 1, &task_draw, 1); - xTaskCreatePinnedToCore( loop_TOUCH, "Task LTouch", 10000, NULL, 1, &task_touch, 1); @@ -193,44 +160,13 @@ void setup(){ Serial.println("Completed Setup"); } - /* The main loop -------------------------------------------------------------*/ -void wakeup(){ - view_refresh = true; - view_update = true; - time_update = true; - setup_WIFI(); - ntp->updateNTPtime(); - vTaskDelay(200); - shutdownc = 0; -} - void loop(){ - delay(500); - - if(shutdownc >= 3){ - Display::clearTime(); - EPD_2IN13_V2_Sleep(); - Serial.println("Shuting down"); - while(touch->dev.holding || touch->dev.pressing){ - touch->update(); - delay(100); - } - delay(500); - touch->update(); - strDateTime odt = (ntp->dt); - delay(2000); - esp_light_sleep_start();//IRQ Raised for some reason - Serial.println("Wakey Wakey"); - wakeup(); - tf->minuteTick(ntp->dt.minute - odt.minute); - } + delay(5000); } void loop_DRAW(void * pvParameters ){ for(;;){ - if(shutdownc >= 2){vTaskDelay(500);continue;} - if(view_refresh) Display::refresh(); if(view_update) Display::update(); if(time_update) Display::drawTime(&(ntp->dt)); @@ -238,23 +174,24 @@ void loop_DRAW(void * pvParameters ){ view_refresh = false; view_update = false; time_update = false; + vTaskDelay(100); } } void loop_TOUCH(void * pvParameters ){ for(;;){ - if(shutdownc >= 2){vTaskDelay(500);continue;} touch->update(); - if(!touch->dev.holding) shutdownc = 0; + vTaskDelay(10); } } - void loop_MEASURE(void * pvParameters ){ for(;;){ - if(shutdownc >= 2){vTaskDelay(500);continue;} tf->update(); + vTaskDelay(200); } -} \ No newline at end of file +} + + diff --git a/src/display/display.cpp b/src/display/display.cpp index b880b04..2500370 100644 --- a/src/display/display.cpp +++ b/src/display/display.cpp @@ -18,8 +18,6 @@ void DrawMain(bool v){ void Display::setup(){ DEV_Module_Init(); - // EPD_2IN13_V2_Init(EPD_2IN13_V2_FULL); - // EPD_2IN13_V2_Clear(); uint16_t Imagesize = ((EPD_2IN13_V2_WIDTH % 8 == 0) ? (EPD_2IN13_V2_WIDTH / 8 ) : (EPD_2IN13_V2_WIDTH / 8 + 1)) * EPD_2IN13_V2_HEIGHT; if ((BlackImage = (uint8_t *)malloc(Imagesize)) == NULL) exit(1); @@ -33,6 +31,7 @@ void Display::setup(){ void Display::clearTime(){ Paint_ClearWindows(170, EPD_2IN13_V2_WIDTH - Font24.Height+2, 170 + Font24.Width * 4.5, EPD_2IN13_V2_WIDTH, WHITE); + EPD_2IN13_V2_DisplayPart(BlackImage); } void Display::drawTime(strDateTime* dt){ diff --git a/src/timedfun/timedfun.h b/src/timedfun/timedfun.h index 915263a..fd15445 100644 --- a/src/timedfun/timedfun.h +++ b/src/timedfun/timedfun.h @@ -29,6 +29,11 @@ class TimedFun { counter += m; } + void setTick(int64_t m){ + counter = m; + old_counter = m; + } + void update(){ uint64_t ccounter = old_counter; old_counter = counter;