LED-Tweak and some first Functions für LubeApp

This commit is contained in:
Marcel Peterkau 2022-01-10 00:02:21 +01:00
parent ffe943f187
commit 829e70d11a
5 changed files with 127 additions and 63 deletions

View File

@ -4,10 +4,10 @@
#define Q(x) #x
#define QUOTE(x) Q(x)
#define GPIO_BUTTON 14
#define GPIO_BUTTON D5
#define GPIO_LED D6
#define GPIO_TRIGGER 2
#define GPIO_PUMP 0
#define GPIO_TRIGGER D4
#define GPIO_PUMP D3
#ifndef HOST_NAME
#define HOST_NAME "ChainLube_%06X" // Use printf-Formatting - Chip-ID (uin32_t) will be added

View File

@ -0,0 +1,24 @@
#ifndef _GLOBALS_H_
#define _GLOBALS_H_
#include <Arduino.h>
typedef enum eSystem_Status
{
sysStat_NOP,
sysStat_Startup,
sysStat_Normal,
sysStat_Rain,
sysStat_Purge,
sysStat_Error
} tSystem_Status;
typedef struct Globals_t {
tSystem_Status systemStatus = sysStat_Startup;
uint8_t purgePulses= 0;
};
extern Globals_t globals;
extern uint32_t TravelDistance_highRes;
#endif

View File

@ -1,7 +1,32 @@
#include "lubeapp.h"
extern void LED_Process();
void RunLubeApp(LubeConfig_t *cfg)
void RunLubeApp(volatile uint32_t *wheelPulseCounter)
{
}
uint32_t LubeDistance = 0;
static uint32_t lubePulseTimestamp = 0;
// Calculate traveled Distance in mm
TravelDistance_highRes += (*wheelPulseCounter * LubeConfig.DistancePerRevolution_mm);
*wheelPulseCounter = 0;
// check if we have to Lube!
switch (globals.systemStatus)
{
case sysStat_Normal:
LubeDistance = LubeConfig.DistancePerLube_Default;
break;
case sysStat_Rain:
LubeDistance = LubeConfig.DistancePerLube_Rain;
break;
}
if (TravelDistance_highRes > LubeDistance)
lubePulseTimestamp = millis() + LUBE_PULSE_LENGHT_MS;
//maintain Pin-State of Lube-Pump
if (lubePulseTimestamp > millis())
digitalWrite(GPIO_PUMP, HIGH);
else
digitalWrite(GPIO_PUMP, LOW);
}

View File

@ -3,17 +3,11 @@
#include <Arduino.h>
#include "config.h"
#include "common.h"
#include "globals.h"
typedef enum eSystem_Status
{
sysStat_NOP,
sysStat_Startup,
sysStat_Normal,
sysStat_Rain,
sysStat_Purge,
sysStat_Error
} tSystem_Status;
#define LUBE_PULSE_LENGHT_MS 1000
void RunLubeApp(LubeConfig_t *cfg);
void RunLubeApp(volatile uint32_t * wheelPulseCounter);
#endif

View File

@ -14,6 +14,7 @@
#include "lubeapp.h"
#include "webui.h"
#include "config.h"
#include "globals.h"
const char *ssid = QUOTE(WIFI_SSID);
const char *password = QUOTE(WIFI_PASSWORD);
@ -29,6 +30,8 @@ const bool debug_flag = false;
bool startSetupMode = false;
char DeviceName[33];
Globals_t globals;
uint32_t TravelDistance_highRes;
volatile uint32_t wheel_pulse = 0;
U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(-1);
@ -43,16 +46,19 @@ void RemotDebug_printSystemInfo();
void RemoteDebug_printWifiInfo();
void wifiMaintainConnectionTicker_callback();
void IRAM_ATTR trigger_ISR();
void LED_Process(tSystem_Status newStatus);
void LED_Process(tSystem_Status newStatus = sysStat_NOP);
Ticker WiFiMaintainConnectionTicker(wifiMaintainConnectionTicker_callback, 1000, 0, MILLIS);
void setup()
{
system_update_cpu_freq(SYS_CPU_80MHZ);
snprintf(DeviceName, 32, HOST_NAME, ESP.getChipId());
WiFi.mode(WIFI_OFF);
WiFi.persistent(false);
Serial.begin(115200);
Serial.setDebugOutput(true);
@ -76,15 +82,6 @@ void setup()
WiFi.setHostname(DeviceName);
wifiMulti.addAP(QUOTE(WIFI_SSID), QUOTE(WIFI_PASSWORD));
Serial.println("Connecting Wifi...");
if (wifiMulti.run() == WL_CONNECTED)
{
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.print(WiFi.localIP());
}
WiFiMaintainConnectionTicker.start();
if (MDNS.begin(DeviceName))
@ -141,16 +138,15 @@ void setup()
void loop()
{
tSystem_Status status = sysStat_NOP;
// status = digitalRead(GPIO_BUTTON) ? Ready_normal : Ready_rain;
LED_Process(status);
RunLubeApp(&LubeConfig);
LED_Process();
RunLubeApp(&wheel_pulse);
WiFiMaintainConnectionTicker.update();
FastLED.show();
u8x8.setCursor(0, 3);
u8x8.printf("%4d m", TravelDistance_highRes / 1000);
u8x8.refreshDisplay();
ArduinoOTA.handle();
Debug.handle();
yield();
@ -230,12 +226,11 @@ void trigger_ISR()
wheel_pulse++;
}
void LED_Process(tSystem_Status newSysStatus = sysStat_NOP)
void LED_Process(tSystem_Status newSysStatus)
{
typedef enum
{
LED_NOP,
LED_Startup,
LED_Normal,
LED_Confirm_Normal,
@ -246,61 +241,87 @@ void LED_Process(tSystem_Status newSysStatus = sysStat_NOP)
} tLED_Status;
static tSystem_Status oldSysStatus = sysStat_NOP;
static tLED_Status LED_Status = LED_NOP;
uint8_t color;
uint32_t timer;
static tLED_Status LED_Status = LED_Startup;
if (oldSysStatus != newSysStatus)
uint8_t color = 0;
uint32_t timer = 0;
uint32_t timestamp = 0;
if (newSysStatus != sysStat_NOP)
{
switch (newSysStatus)
if (oldSysStatus != newSysStatus)
{
case sysStat_NOP:
break;
case sysStat_Startup:
break;
case sysStat_Normal:
break;
case sysStat_Rain:
break;
case sysStat_Purge:
break;
case sysStat_Error:
break;
switch (newSysStatus)
{
case sysStat_Startup:
LED_Status = LED_Startup;
break;
case sysStat_Normal:
timestamp = millis() + 1500;
LED_Status = LED_Confirm_Normal;
FastLED.setBrightness(64);
break;
case sysStat_Rain:
timestamp = millis() + 1500;
LED_Status = LED_Confirm_Rain;
FastLED.setBrightness(64);
break;
case sysStat_Purge:
LED_Status = LED_Purge;
break;
case sysStat_Error:
LED_Status = LED_Error;
break;
}
oldSysStatus = newSysStatus;
}
}
FastLED.setBrightness(64);
timer = millis();
switch (LED_Status)
{
case LED_NOP:
break;
case LED_Startup:
timer = timer % 2000;
color = timer > 500 ? 0 : (uint8_t)(timer / 2);
leds[0] = CRGB(color, color, 0);
break;
case LED_Confirm_Normal:
leds[0] = millis() % 2000 > 1900 ? CRGB::Green : CRGB::Black;
if (timestamp < timer)
LED_Status = LED_Normal;
leds[0] = timer % 500 > 250 ? CRGB::Green : CRGB::Black;
break;
case LED_Normal:
leds[0] = millis() % 2000 > 1900 ? CRGB::Blue : CRGB::Black;
leds[0] = timer % 2000 > 1950 ? CRGB::Green : CRGB::Black;
break;
case LED_Confirm_Rain:
leds[0] = millis() % 2000 > 1900 ? CRGB::Green : CRGB::Black;
if (timestamp < timer)
LED_Status = LED_Rain;
leds[0] = timer % 500 > 250 ? CRGB::Blue : CRGB::Black;
break;
case LED_Rain:
leds[0] = millis() % 2000 > 1900 ? CRGB::Blue : CRGB::Black;
leds[0] = timer % 2000 > 1950 ? CRGB::Blue : CRGB::Black;
break;
case LED_Purge:
leds[0] = millis() % 2000 > 1900 ? CRGB::HotPink : CRGB::Black;
timer = timer % 500;
color = timer / 2;
leds[0] = CRGB::DeepPink;
if (timer < 250)
FastLED.setBrightness(color);
else
FastLED.setBrightness(250 - color);
break;
case LED_Error:
leds[0] = millis() % 500 > 250 ? CRGB::Red : CRGB::Black;
leds[0] = timer % 500 > 250 ? CRGB::Red : CRGB::Black;
break;
default:
break;
}
FastLED.show();
}