firmware updates

This commit is contained in:
2022-12-31 11:04:47 +01:00
parent c6e9e8b0ba
commit c075d1a812
7 changed files with 176 additions and 78 deletions

View File

@@ -21,6 +21,5 @@ extra_scripts = ./littlefsbuilder.py
build_flags =
-DHARDWARE=2
-DCORE_DEBUG_LEVEL=4
-DNDEF_DEBUG=1
upload_protocol = espota
upload_port = muziekdoos.local

View File

@@ -28,7 +28,7 @@ void SetLedColor(CRGB color, bool blink)
void initLed(void)
{
FastLED.addLeds<SK6812, LED_PIN, GRB>(leds, NUM_LEDS); // GRB ordering is typical
FastLED.setBrightness(40);
FastLED.setBrightness(LEDBRIGHTNESS);
}
void handleLed(void)

View File

@@ -8,6 +8,7 @@
#define NUM_LEDS 1
#define LEDTIMEOUT 100
#define LEDBLINKTIME 500
#define LEDBRIGHTNESS 75
void initLed(void);
void handleLed(void);

View File

@@ -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");
}
}
break;
case hall_tipover:
else
{
/* stay idle */
}
break;
case hall_increasing:
}
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;
default:
if (timeNow - hall_stateTimer > HALLSTATETIMEOUT)
{
// we are stalling or tipping under
hall_sensor_state = hall_tipunder;
hall_stateTimer = 0;
}
break;
}
break;
case hall_tipunder:
{
// 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_increasing;
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;
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,

View File

@@ -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);