Reworked Button-Stuff
This commit is contained in:
parent
e1ca503bd2
commit
cfc6b144f3
@ -30,6 +30,7 @@ build_flags =
|
||||
-DWIFI_PASSWORD=${wifi_cred.wifi_password}
|
||||
-DADMIN_PASSWORD=${wifi_cred.admin_password}
|
||||
-DWIFI_AP_PASSWORD=${wifi_cred.wifi_ap_password}
|
||||
-DWIFI_AP_IP_GW=10,0,0,1
|
||||
|
||||
board_build.filesystem = littlefs
|
||||
|
||||
|
@ -13,10 +13,12 @@ typedef enum eSystem_Status
|
||||
sysStat_Error
|
||||
} tSystem_Status;
|
||||
|
||||
|
||||
typedef struct Globals_s {
|
||||
tSystem_Status systemStatus = sysStat_Startup;
|
||||
uint8_t purgePulses= 0;
|
||||
tSystem_Status resumeStatus = sysStat_Startup;
|
||||
char systemStatustxt[16] = "";
|
||||
}Globals_t;
|
||||
|
||||
extern Globals_t globals;
|
||||
|
@ -4,37 +4,6 @@ uint32_t lubePulseTimestamp = 0;
|
||||
|
||||
void RunLubeApp(volatile uint32_t *wheelPulseCounter)
|
||||
{
|
||||
static uint32_t buttonTimestamp = 0;
|
||||
static boolean buttonActionDone = false;
|
||||
|
||||
if (digitalRead(GPIO_BUTTON) == LOW)
|
||||
{
|
||||
if (buttonTimestamp == 0)
|
||||
buttonTimestamp = millis() + BUTTON_HOLD_DELAY;
|
||||
|
||||
if (buttonTimestamp < millis() && buttonActionDone == false)
|
||||
{
|
||||
switch (globals.systemStatus)
|
||||
{
|
||||
case sysStat_Normal:
|
||||
globals.systemStatus = sysStat_Rain;
|
||||
globals.resumeStatus = sysStat_Rain;
|
||||
break;
|
||||
|
||||
case sysStat_Rain:
|
||||
globals.systemStatus = sysStat_Normal;
|
||||
globals.resumeStatus = sysStat_Normal;
|
||||
break;
|
||||
}
|
||||
buttonActionDone = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
buttonTimestamp = 0;
|
||||
buttonActionDone = false;
|
||||
}
|
||||
|
||||
// Calculate traveled Distance in mm
|
||||
TravelDistance_highRes += (*wheelPulseCounter * (LubeConfig.DistancePerRevolution_mm / LubeConfig.PulsePerRevolution));
|
||||
*wheelPulseCounter = 0;
|
||||
@ -43,8 +12,11 @@ void RunLubeApp(volatile uint32_t *wheelPulseCounter)
|
||||
switch (globals.systemStatus)
|
||||
{
|
||||
case sysStat_Startup:
|
||||
globals.systemStatus = sysStat_Normal;
|
||||
globals.resumeStatus = sysStat_Normal;
|
||||
if (millis() > STARTUP_DELAY)
|
||||
{
|
||||
globals.systemStatus = sysStat_Normal;
|
||||
globals.resumeStatus = sysStat_Normal;
|
||||
}
|
||||
break;
|
||||
|
||||
case sysStat_Normal:
|
||||
@ -81,6 +53,22 @@ void RunLubeApp(volatile uint32_t *wheelPulseCounter)
|
||||
break;
|
||||
}
|
||||
|
||||
switch (globals.systemStatus)
|
||||
{
|
||||
case sysStat_Normal:
|
||||
strcpy(globals.systemStatustxt, "Normal");
|
||||
break;
|
||||
case sysStat_Purge:
|
||||
strcpy(globals.systemStatustxt, "Purge");
|
||||
break;
|
||||
case sysStat_Rain:
|
||||
strcpy(globals.systemStatustxt, "Rain");
|
||||
break;
|
||||
case sysStat_Startup:
|
||||
strcpy(globals.systemStatustxt, "Startup");
|
||||
break;
|
||||
}
|
||||
|
||||
// maintain Pin-State of Lube-Pump
|
||||
if (lubePulseTimestamp > millis())
|
||||
digitalWrite(GPIO_PUMP, HIGH);
|
||||
|
@ -2,13 +2,14 @@
|
||||
#define _LUBEAPP_H_
|
||||
|
||||
#include <Arduino.h>
|
||||
#include <stdlib.h>
|
||||
#include "config.h"
|
||||
#include "common.h"
|
||||
#include "globals.h"
|
||||
|
||||
#define LUBE_PULSE_LENGHT_MS 160
|
||||
#define LUBE_PULSE_PAUSE_MS 100
|
||||
#define BUTTON_HOLD_DELAY 1000
|
||||
#define STARTUP_DELAY 5000
|
||||
|
||||
void RunLubeApp(volatile uint32_t * wheelPulseCounter);
|
||||
void LubePulse();
|
||||
|
@ -47,8 +47,10 @@ void RemoteDebug_printWifiInfo();
|
||||
void wifiMaintainConnectionTicker_callback();
|
||||
void updateWebUITicker_callback();
|
||||
void IRAM_ATTR trigger_ISR();
|
||||
void LED_Process(tSystem_Status newStatus = sysStat_NOP);
|
||||
void DisplayProcess();
|
||||
void LED_Process(uint8_t override = false, CRGB setColor = CRGB::White);
|
||||
void Display_Process();
|
||||
void Button_Process();
|
||||
void startWiFiAP();
|
||||
|
||||
Ticker WiFiMaintainConnectionTicker(wifiMaintainConnectionTicker_callback, 1000, 0, MILLIS);
|
||||
Ticker UpdateWebUITicker(updateWebUITicker_callback, 5000, 0, MILLIS);
|
||||
@ -142,13 +144,14 @@ void setup()
|
||||
|
||||
void loop()
|
||||
{
|
||||
LED_Process(globals.systemStatus);
|
||||
RunLubeApp(&wheel_pulse);
|
||||
|
||||
WiFiMaintainConnectionTicker.update();
|
||||
UpdateWebUITicker.update();
|
||||
|
||||
DisplayProcess();
|
||||
Display_Process();
|
||||
Button_Process();
|
||||
LED_Process();
|
||||
|
||||
ArduinoOTA.handle();
|
||||
Debug.handle();
|
||||
@ -216,10 +219,7 @@ void wifiMaintainConnectionTicker_callback()
|
||||
else
|
||||
{
|
||||
Serial.println("WiFi not connected! - Start AP");
|
||||
WiFi.mode(WIFI_OFF);
|
||||
WiFi.softAP(DeviceName, QUOTE(WIFI_AP_PASSWORD));
|
||||
WiFiMaintainConnectionTicker.stop();
|
||||
Serial.println("WiFi AP started, stopped Maintain-Timer");
|
||||
startWiFiAP();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -234,7 +234,7 @@ void trigger_ISR()
|
||||
wheel_pulse++;
|
||||
}
|
||||
|
||||
void LED_Process(tSystem_Status newSysStatus)
|
||||
void LED_Process(uint8_t override, CRGB SetColor)
|
||||
{
|
||||
|
||||
typedef enum
|
||||
@ -245,20 +245,43 @@ void LED_Process(tSystem_Status newSysStatus)
|
||||
LED_Rain,
|
||||
LED_Confirm_Rain,
|
||||
LED_Purge,
|
||||
LED_Error
|
||||
LED_Error,
|
||||
LED_Override
|
||||
} tLED_Status;
|
||||
|
||||
static tSystem_Status oldSysStatus = sysStat_NOP;
|
||||
static tLED_Status LED_Status = LED_Startup;
|
||||
static CRGB LED_override_color = 0;
|
||||
static tLED_Status LED_ResumeOverrideStatus = LED_Startup;
|
||||
|
||||
uint8_t color = 0;
|
||||
uint32_t timer = 0;
|
||||
static uint32_t timestamp = 0;
|
||||
timer = millis();
|
||||
|
||||
if (oldSysStatus != newSysStatus)
|
||||
if (override == 1)
|
||||
{
|
||||
switch (newSysStatus)
|
||||
if (LED_Status != LED_Override)
|
||||
{
|
||||
LED_ResumeOverrideStatus = LED_Status;
|
||||
debugA("Override LED_Status");
|
||||
}
|
||||
LED_Status = LED_Override;
|
||||
LED_override_color = SetColor;
|
||||
}
|
||||
|
||||
if (override == 2)
|
||||
{
|
||||
if (LED_Status == LED_Override)
|
||||
{
|
||||
LED_Status = LED_ResumeOverrideStatus;
|
||||
debugA("Resume LED_Status");
|
||||
}
|
||||
}
|
||||
|
||||
if (oldSysStatus != globals.systemStatus)
|
||||
{
|
||||
switch (globals.systemStatus)
|
||||
{
|
||||
case sysStat_Startup:
|
||||
LED_Status = LED_Startup;
|
||||
@ -286,16 +309,20 @@ void LED_Process(tSystem_Status newSysStatus)
|
||||
default:
|
||||
break;
|
||||
}
|
||||
oldSysStatus = newSysStatus;
|
||||
oldSysStatus = globals.systemStatus;
|
||||
}
|
||||
|
||||
uint32_t percentage = LubeConfig.tankRemain_µl / (LubeConfig.tankCapacity_ml * 10);
|
||||
|
||||
switch (LED_Status)
|
||||
{
|
||||
case LED_Startup:
|
||||
FastLED.setBrightness(255);
|
||||
timer = timer % 2000;
|
||||
color = timer > 500 ? 0 : (uint8_t)(timer / 2);
|
||||
leds[0] = CRGB(color, color, color);
|
||||
|
||||
if (percentage < LubeConfig.TankRemindAtPercentage)
|
||||
leds[0] = CRGB::OrangeRed;
|
||||
else
|
||||
leds[0] = CRGB::White;
|
||||
break;
|
||||
|
||||
case LED_Confirm_Normal:
|
||||
@ -342,19 +369,128 @@ void LED_Process(tSystem_Status newSysStatus)
|
||||
leds[0] = timer % 500 > 250 ? CRGB::Red : CRGB::Black;
|
||||
break;
|
||||
|
||||
case LED_Override:
|
||||
leds[0] = LED_override_color;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
FastLED.show();
|
||||
}
|
||||
|
||||
void DisplayProcess()
|
||||
void Display_Process()
|
||||
{
|
||||
u8x8.setCursor(0, 3);
|
||||
uint32_t DistRemain = globals.systemStatus == sysStat_Normal ? LubeConfig.DistancePerLube_Default : LubeConfig.DistancePerLube_Rain;
|
||||
DistRemain -= TravelDistance_highRes / 1000;
|
||||
u8x8.printf("next Lube: %4dm\n", DistRemain);
|
||||
u8x8.printf("Tank: %8dml\n", LubeConfig.tankRemain_µl / 1000);
|
||||
u8x8.printf("Purges: %8d\n", globals.purgePulses);
|
||||
u8x8.printf("Mode: %10s\n\n", globals.systemStatustxt);
|
||||
u8x8.printf("next Lube: %4dm\n\n", DistRemain);
|
||||
u8x8.printf("Tank: %8dml\n\n", LubeConfig.tankRemain_µl / 1000);
|
||||
u8x8.refreshDisplay();
|
||||
}
|
||||
|
||||
void Button_Process()
|
||||
{
|
||||
|
||||
#define BUTTON_ACTION_DELAY_TOGGLEMODE 500
|
||||
#define BUTTON_ACTION_DELAY_PURGE 3500
|
||||
#define BUTTON_ACTION_DELAY_WIFI 6500
|
||||
#define BUTTON_ACTION_DELAY_NOTHING 9500
|
||||
|
||||
typedef enum buttonAction_e
|
||||
{
|
||||
BTN_INACTIVE,
|
||||
BTN_NOTHING,
|
||||
BTN_TOGGLEMODE,
|
||||
BTN_TOGGLEWIFI,
|
||||
BTN_STARTPURGE
|
||||
} buttonAction_t;
|
||||
|
||||
static uint32_t buttonTimestamp = 0;
|
||||
static buttonAction_t buttonAction = BTN_INACTIVE;
|
||||
|
||||
if (digitalRead(GPIO_BUTTON) == LOW)
|
||||
{
|
||||
|
||||
if (buttonTimestamp == 0)
|
||||
buttonTimestamp = millis();
|
||||
|
||||
if (buttonTimestamp + BUTTON_ACTION_DELAY_NOTHING < millis())
|
||||
{
|
||||
LED_Process(1, CRGB::White);
|
||||
buttonAction = BTN_NOTHING;
|
||||
}
|
||||
else if (buttonTimestamp + BUTTON_ACTION_DELAY_WIFI < millis())
|
||||
{
|
||||
LED_Process(1, CRGB::Yellow);
|
||||
buttonAction = BTN_TOGGLEWIFI;
|
||||
}
|
||||
else if (buttonTimestamp + BUTTON_ACTION_DELAY_PURGE < millis())
|
||||
{
|
||||
LED_Process(1, CRGB::DeepPink);
|
||||
buttonAction = BTN_STARTPURGE;
|
||||
}
|
||||
else if (buttonTimestamp + BUTTON_ACTION_DELAY_TOGGLEMODE < millis())
|
||||
{
|
||||
CRGB color = globals.systemStatus == sysStat_Normal ? CRGB::Blue : CRGB::Green;
|
||||
LED_Process(1, color);
|
||||
buttonAction = BTN_TOGGLEMODE;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (buttonAction != BTN_INACTIVE)
|
||||
{
|
||||
switch (buttonAction)
|
||||
{
|
||||
case BTN_TOGGLEWIFI:
|
||||
startWiFiAP();
|
||||
debugA("Starting WiFi AP");
|
||||
break;
|
||||
|
||||
case BTN_STARTPURGE:
|
||||
globals.systemStatus = sysStat_Purge;
|
||||
globals.purgePulses = LubeConfig.BleedingPulses;
|
||||
debugA("Starting Purge");
|
||||
break;
|
||||
|
||||
case BTN_TOGGLEMODE:
|
||||
switch (globals.systemStatus)
|
||||
{
|
||||
case sysStat_Normal:
|
||||
globals.systemStatus = sysStat_Rain;
|
||||
globals.resumeStatus = sysStat_Rain;
|
||||
break;
|
||||
|
||||
case sysStat_Rain:
|
||||
globals.systemStatus = sysStat_Normal;
|
||||
globals.resumeStatus = sysStat_Normal;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
debugA("Toggling Mode");
|
||||
break;
|
||||
|
||||
case BTN_NOTHING:
|
||||
default:
|
||||
debugA("Nothing or invalid");
|
||||
break;
|
||||
}
|
||||
LED_Process(2);
|
||||
}
|
||||
buttonAction = BTN_INACTIVE;
|
||||
buttonTimestamp = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void startWiFiAP()
|
||||
{
|
||||
WiFi.mode(WIFI_OFF);
|
||||
WiFi.mode(WIFI_AP);
|
||||
WiFi.softAPConfig(IPAddress(WIFI_AP_IP_GW), IPAddress(WIFI_AP_IP_GW), IPAddress(255, 255, 255, 0));
|
||||
WiFi.softAP(DeviceName, QUOTE(WIFI_AP_PASSWORD));
|
||||
WiFiMaintainConnectionTicker.stop();
|
||||
Serial.println("WiFi AP started, stopped Maintain-Timer");
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user