From c075d1a8120f56aea34d2702c4cbee54502f6c1d Mon Sep 17 00:00:00 2001 From: willem Date: Sat, 31 Dec 2022 11:04:47 +0100 Subject: [PATCH] firmware updates --- CAD/Leo_muziekdoos_ESP32/ESP32 Pins.xlsx | Bin 21316 -> 21467 bytes FW/leo_muziekdoos_esp32/lib/PN532 | 2 +- FW/leo_muziekdoos_esp32/platformio.ini | 1 - FW/leo_muziekdoos_esp32/src/led.cpp | 2 +- FW/leo_muziekdoos_esp32/src/led.h | 1 + FW/leo_muziekdoos_esp32/src/sensor.cpp | 235 ++++++++++++++++------- FW/leo_muziekdoos_esp32/src/sensor.h | 13 +- 7 files changed, 176 insertions(+), 78 deletions(-) diff --git a/CAD/Leo_muziekdoos_ESP32/ESP32 Pins.xlsx b/CAD/Leo_muziekdoos_ESP32/ESP32 Pins.xlsx index c5775e2e39b056bc14d60e403299123c6814c1f3..bbc763d30f8932ab7a6983bffbb61353473ff872 100644 GIT binary patch delta 7864 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, NUM_LEDS); // GRB ordering is typical - FastLED.setBrightness(40); + FastLED.setBrightness(LEDBRIGHTNESS); } void handleLed(void) diff --git a/FW/leo_muziekdoos_esp32/src/led.h b/FW/leo_muziekdoos_esp32/src/led.h index face1bb..0eb7dfd 100644 --- a/FW/leo_muziekdoos_esp32/src/led.h +++ b/FW/leo_muziekdoos_esp32/src/led.h @@ -8,6 +8,7 @@ #define NUM_LEDS 1 #define LEDTIMEOUT 100 #define LEDBLINKTIME 500 +#define LEDBRIGHTNESS 75 void initLed(void); void handleLed(void); diff --git a/FW/leo_muziekdoos_esp32/src/sensor.cpp b/FW/leo_muziekdoos_esp32/src/sensor.cpp index fbcdaa8..dc1bbad 100644 --- a/FW/leo_muziekdoos_esp32/src/sensor.cpp +++ b/FW/leo_muziekdoos_esp32/src/sensor.cpp @@ -74,15 +74,15 @@ bool CheckBattery(void) BatteryVoltage = battery.voltage(); BatterySensor = battery.level(BatteryVoltage); digitalWrite(MEAS_EN, HIGH); - log_i("read batt, ticks=%d, raw=%4.2f, vbatt=%d, level=%d", battticks, vbattraw, BatteryVoltage, BatterySensor); + log_v("read batt, ticks=%d, raw=%4.2f, vbatt=%d, level=%d", battticks, vbattraw, BatteryVoltage, BatterySensor); if (BatteryVoltage < VBATTMIN) { uint32_t timeNow = millis(); - if(BatteryWarningFirst == 0) + if (BatteryWarningFirst == 0) { BatteryWarningFirst = timeNow; } - if(timeNow - BatteryWarningFirst > LOWBATTPERIOD) + if (timeNow - BatteryWarningFirst > LOWBATTPERIOD) { batteryLow = true; return true; @@ -118,106 +118,193 @@ void handleBatterySensor(void) if (timeNow - lastVbatt > VBATTINTERVALL) { CheckBattery(); - log_i("vbatt level = %d %%", BatterySensor); - if(BatterySensor > 80) SetLedColor(CRGB::Green); - else if(BatterySensor > 50) SetLedColor(CRGB::Orange); - else if(BatterySensor > 20) SetLedColor(CRGB::Red); + log_i("vbatt voltage = %d mv", BatteryVoltage); + if (BatterySensor > 80) + SetLedColor(CRGB::Green); + else if (BatterySensor > 50) + SetLedColor(CRGB::Orange); + else if (BatterySensor > 20) + SetLedColor(CRGB::Red); lastVbatt = timeNow; } } HALLSENSORSTATES hall_sensor_state = HALLSENSORSTATES::hall_idle; +uint32_t hall_timeout = 0; +uint32_t hall_stateTimer = 0; +HALLSENSORSTATES previous_hall_state = hall_sensor_state; + +#define HALLSTATETIMEOUT 300 +#define HALLTIMEOUT 1000 void handleHallSensor(void) { uint32_t timeNow = millis(); if (timeNow - last_hall_read > HALLINTERVAL) { - //get sample + // get sample uint16_t hall_sample = ADS.readADC(HALL_INPUT); + int hall_delta = hall_sample - last_hall_sample; - switch(hall_sensor_state) + switch (hall_sensor_state) { - case hall_idle: + case hall_idle: + { + if (hall_delta > HALLTHRESHOLD) { - if(int(hall_sample - last_hall_sample) > 0) + hall_decrease_count = 0; + if (hall_increase_count++ > HALLTHRESHOLD) { - hall_decrease_count = 0; - if(hall_increase_count++ > HALLTHRESHOLD) hall_sensor_state = hall_increasing; - } - else if(int(hall_sample - last_hall_sample) < 0) - { - hall_increase_count = 0; - if(hall_decrease_count++ > HALLTHRESHOLD) hall_sensor_state = hall_decreasing; + hall_sensor_state = hall_increasing; + log_i("next state = increasing"); } } - break; - case hall_decreasing: + else if (hall_delta < HALLTHRESHOLD) { + hall_increase_count = 0; + if (hall_decrease_count++ > HALLTHRESHOLD) + { + hall_sensor_state = hall_decreasing; + log_i("next state = decreasing"); + } + } + else + { + /* stay idle */ + } + } + break; + case hall_decreasing: + { + // lets see if we are bottoming out or stalling + if (hall_delta < HALLIDLETHRESHOLD) + { + // reset timer + hall_timeout = timeNow; + hall_stateTimer = timeNow; + } - } - break; - case hall_tipover: + if (timeNow - hall_stateTimer > HALLSTATETIMEOUT) { + // we are stalling or tipping under + hall_sensor_state = hall_tipunder; + hall_stateTimer = 0; + } + } + break; + case hall_tipunder: + { + // check if we are stalling or moving into the increasing state + if (!(hall_delta > HALLIDLETHRESHOLD)) + { + hall_stateTimer = timeNow; + } - } - break; - case hall_increasing: + if (timeNow - hall_stateTimer > HALLSTATETIMEOUT) { - + // samples detected to the upside, move to increasing state + hall_sensor_state = hall_increasing; + hall_stateTimer = 0; } - break; - default: - { + if(timeNow - hall_timeout > HALLTIMEOUT) + { + //timeed out, move to idle + hall_sensor_state = hall_idle; + hall_stateTimer = 0; + hall_timeout = 0; } - break; + } + break; + case hall_increasing: + { + // check if we are increasing + if (hall_delta > HALLIDLETHRESHOLD) + { + hall_stateTimer = timeNow; + } + + if (timeNow - hall_stateTimer > HALLSTATETIMEOUT) + { + // samples detected to the upside, move to increasing state + hall_sensor_state = hall_tipover; + hall_stateTimer = 0; + } + } + break; + case hall_tipover: + { + // check if we are stalling or moving into the increasing state + if (!(hall_delta > HALLIDLETHRESHOLD)) + { + hall_stateTimer = timeNow; + } + + if (timeNow - hall_stateTimer > HALLSTATETIMEOUT) + { + // samples detected to the upside, move to increasing state + hall_sensor_state = hall_decreasing; + hall_stateTimer = 0; + } + + if(timeNow - hall_timeout > HALLTIMEOUT) + { + //timeed out, move to idle + hall_sensor_state = hall_idle; + hall_stateTimer = 0; + hall_timeout = 0; + } + } + break; + default: + { + } + break; } - - // bool skipfirstSample = false; - // if (!last_hall_Delta) - // { - // skipfirstSample = true; - // } - // uint16_t hall_delta = (last_hall_sample > hall_sample) ? (last_hall_sample - hall_sample) : (hall_sample - last_hall_sample); - // hall_delta = (hall_delta + last_hall_Delta) / 2; - // last_hall_Delta = hall_delta; - // if (skipfirstSample) - // { - // log_v("First sample skipped"); - // if (hall_idle_count) - // { - // hall_idle_count--; - // } - // return; - // } - // if (hall_delta > HALLIDLETHRESHOLD) - // { - // if (hall_idle_count > HALLIDLESAMPLES) - // { - // hall_is_Idle = false; - // hall_idle_count = HALLPLAYSAMPLES; - // log_i("Game: playing, delta = %d", hall_delta); - // } - // else - // { - // hall_idle_count++; - // } - // } - // else - // { - // if (hall_idle_count == 0) - // { - // hall_is_Idle = true; - // } - // else - // { - // hall_idle_count--; - // } - // } - log_v("HallSensor: val=%d, delta=%d, count=%d, idle=%s\n", + bool skipfirstSample = false; + if (!last_hall_Delta) + { + skipfirstSample = true; + } + uint16_t hall_delta = (last_hall_sample > hall_sample) ? (last_hall_sample - hall_sample) : (hall_sample - last_hall_sample); + hall_delta = (hall_delta + last_hall_Delta) / 2; + last_hall_Delta = hall_delta; + if (skipfirstSample) + { + log_v("First sample skipped"); + if (hall_idle_count) + { + hall_idle_count--; + } + return; + } + if (hall_delta > HALLIDLETHRESHOLD) + { + if (hall_idle_count > HALLIDLESAMPLES) + { + hall_is_Idle = false; + hall_idle_count = HALLPLAYSAMPLES; + log_i("Game: playing, delta = %d", hall_delta); + } + else + { + hall_idle_count++; + } + } + else + { + if (hall_idle_count == 0) + { + hall_is_Idle = true; + } + else + { + hall_idle_count--; + } + } + log_i("HallSensor: val=%d, delta=%d, count=%d, idle=%s\n", hall_sample, hall_delta, hall_idle_count, diff --git a/FW/leo_muziekdoos_esp32/src/sensor.h b/FW/leo_muziekdoos_esp32/src/sensor.h index 28b3245..deccbf0 100644 --- a/FW/leo_muziekdoos_esp32/src/sensor.h +++ b/FW/leo_muziekdoos_esp32/src/sensor.h @@ -12,7 +12,7 @@ #define HALLINTERVAL 100 #define HALLTHRESHOLD 5 -#define HALLIDLETHRESHOLD 20 +#define HALLIDLETHRESHOLD 10 #define HALLIDLESAMPLES 15 #define HALLPLAYSAMPLES 24 @@ -22,8 +22,19 @@ typedef enum hall_increasing, hall_tipover, hall_decreasing, + hall_tipunder, + HALL_LAST }HALLSENSORSTATES; +static String HALLSENESORSTATES_ENUM2STR[HALL_LAST] +{ + "Hall Idle", + "Hall Increasing", + "Hall Tipover", + "Hall decreasing", + "Hall tipUnder" +}; + void initSensor(void); void handleBatterySensor(void); void handleHallSensor(void);