Basic Function works
This commit is contained in:
parent
402535051a
commit
bfa4272334
@ -16,6 +16,7 @@ typedef enum eSystem_Status
|
||||
typedef struct Globals_t {
|
||||
tSystem_Status systemStatus = sysStat_Startup;
|
||||
uint8_t purgePulses= 0;
|
||||
tSystem_Status resumeStatus = sysStat_Startup;
|
||||
};
|
||||
|
||||
extern Globals_t globals;
|
||||
|
@ -1,34 +1,65 @@
|
||||
#include "lubeapp.h"
|
||||
|
||||
extern void LED_Process();
|
||||
extern void LED_Process(tSystem_Status newStatus = sysStat_NOP);
|
||||
|
||||
uint32_t lubePulseTimestamp = 0;
|
||||
|
||||
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);
|
||||
TravelDistance_highRes += (*wheelPulseCounter * (LubeConfig.DistancePerRevolution_mm / LubeConfig.PulsePerRevolution));
|
||||
*wheelPulseCounter = 0;
|
||||
|
||||
// check if we have to Lube!
|
||||
switch (globals.systemStatus)
|
||||
{
|
||||
case sysStat_Startup:
|
||||
globals.systemStatus = sysStat_Normal;
|
||||
globals.resumeStatus = sysStat_Normal;
|
||||
break;
|
||||
|
||||
case sysStat_Normal:
|
||||
LubeDistance = LubeConfig.DistancePerLube_Default;
|
||||
if (TravelDistance_highRes > LubeConfig.DistancePerLube_Default)
|
||||
{
|
||||
LubePulse();
|
||||
TravelDistance_highRes = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
case sysStat_Rain:
|
||||
LubeDistance = LubeConfig.DistancePerLube_Rain;
|
||||
if (TravelDistance_highRes > LubeConfig.DistancePerLube_Rain)
|
||||
{
|
||||
LubePulse();
|
||||
TravelDistance_highRes = 0;
|
||||
}
|
||||
break;
|
||||
case sysStat_Purge:
|
||||
if (globals.purgePulses > 0)
|
||||
{
|
||||
if (lubePulseTimestamp + LUBE_PULSE_LENGHT_MS + LUBE_PULSE_PAUSE_MS < millis())
|
||||
{
|
||||
LubePulse();
|
||||
globals.purgePulses--;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
globals.systemStatus = globals.resumeStatus;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (TravelDistance_highRes > LubeDistance){
|
||||
lubePulseTimestamp = millis() + LUBE_PULSE_LENGHT_MS;
|
||||
TravelDistance_highRes = 0;
|
||||
}
|
||||
|
||||
//maintain Pin-State of Lube-Pump
|
||||
// maintain Pin-State of Lube-Pump
|
||||
if (lubePulseTimestamp > millis())
|
||||
digitalWrite(GPIO_PUMP, HIGH);
|
||||
else
|
||||
digitalWrite(GPIO_PUMP, LOW);
|
||||
}
|
||||
|
||||
void LubePulse()
|
||||
{
|
||||
lubePulseTimestamp = millis() + LUBE_PULSE_LENGHT_MS;
|
||||
LubeConfig.tankRemain_µl = LubeConfig.tankRemain_µl - LubeConfig.amountPerDose_µl;
|
||||
}
|
@ -6,8 +6,10 @@
|
||||
#include "common.h"
|
||||
#include "globals.h"
|
||||
|
||||
#define LUBE_PULSE_LENGHT_MS 1000
|
||||
#define LUBE_PULSE_LENGHT_MS 500
|
||||
#define LUBE_PULSE_PAUSE_MS 250
|
||||
|
||||
void RunLubeApp(volatile uint32_t * wheelPulseCounter);
|
||||
void LubePulse();
|
||||
|
||||
#endif
|
@ -47,6 +47,7 @@ void RemoteDebug_printWifiInfo();
|
||||
void wifiMaintainConnectionTicker_callback();
|
||||
void IRAM_ATTR trigger_ISR();
|
||||
void LED_Process(tSystem_Status newStatus = sysStat_NOP);
|
||||
void DisplayProcess();
|
||||
|
||||
Ticker WiFiMaintainConnectionTicker(wifiMaintainConnectionTicker_callback, 1000, 0, MILLIS);
|
||||
|
||||
@ -138,14 +139,12 @@ void setup()
|
||||
|
||||
void loop()
|
||||
{
|
||||
LED_Process();
|
||||
LED_Process(globals.systemStatus);
|
||||
RunLubeApp(&wheel_pulse);
|
||||
|
||||
WiFiMaintainConnectionTicker.update();
|
||||
|
||||
u8x8.setCursor(0, 3);
|
||||
u8x8.printf("%4d m", TravelDistance_highRes / 1000);
|
||||
u8x8.refreshDisplay();
|
||||
DisplayProcess();
|
||||
|
||||
ArduinoOTA.handle();
|
||||
Debug.handle();
|
||||
@ -247,35 +246,33 @@ void LED_Process(tSystem_Status newSysStatus)
|
||||
uint32_t timer = 0;
|
||||
uint32_t timestamp = 0;
|
||||
|
||||
if (newSysStatus != sysStat_NOP)
|
||||
if (oldSysStatus != newSysStatus)
|
||||
{
|
||||
if (oldSysStatus != newSysStatus)
|
||||
switch (newSysStatus)
|
||||
{
|
||||
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;
|
||||
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;
|
||||
}
|
||||
|
||||
timer = millis();
|
||||
|
||||
switch (LED_Status)
|
||||
@ -325,3 +322,12 @@ void LED_Process(tSystem_Status newSysStatus)
|
||||
}
|
||||
FastLED.show();
|
||||
}
|
||||
|
||||
void DisplayProcess()
|
||||
{
|
||||
u8x8.setCursor(0, 3);
|
||||
u8x8.printf("Dist.: %4d m\n", TravelDistance_highRes / 1000);
|
||||
u8x8.printf("Purge: %4d\n", globals.purgePulses);
|
||||
u8x8.printf("Tank: %4d ml\n", LubeConfig.tankRemain_µl / 1000);
|
||||
u8x8.refreshDisplay();
|
||||
}
|
@ -1,6 +1,4 @@
|
||||
#include <Arduino.h>
|
||||
#include <ESPUI.h>
|
||||
#include "config.h"
|
||||
#include "webui.h"
|
||||
|
||||
uint16_t tab_lube;
|
||||
uint16_t tab_wheel;
|
||||
@ -21,6 +19,7 @@ uint16_t num_wheel_dist;
|
||||
|
||||
uint16_t num_tank_capacity;
|
||||
uint16_t num_tank_notify;
|
||||
uint16_t num_dose_per_pulse;
|
||||
|
||||
uint16_t label_tankRemain;
|
||||
uint16_t button_reset_tank;
|
||||
@ -51,11 +50,14 @@ void SettingChanged_Callback(Control *sender, int type)
|
||||
LubeConfig.tankCapacity_ml = ESPUI.getControl(num_tank_capacity)->value.toInt();
|
||||
else if (sender->id == num_tank_notify)
|
||||
LubeConfig.TankRemindAtPercentage = ESPUI.getControl(num_tank_notify)->value.toInt();
|
||||
else if (sender->id == num_dose_per_pulse)
|
||||
LubeConfig.amountPerDose_µl = ESPUI.getControl(num_dose_per_pulse)->value.toInt();
|
||||
}
|
||||
|
||||
void buttons_Callback(Control *sender, int type)
|
||||
{
|
||||
if (type != B_UP) return;
|
||||
if (type != B_UP)
|
||||
return;
|
||||
|
||||
if (sender->id == button_wheelcalc)
|
||||
{
|
||||
@ -66,19 +68,21 @@ void buttons_Callback(Control *sender, int type)
|
||||
ESPUI.updateControlValue(num_wheel_dist, String(LubeConfig.DistancePerRevolution_mm));
|
||||
}
|
||||
|
||||
if(sender->id == button_reset_tank)
|
||||
if (sender->id == button_reset_tank)
|
||||
{
|
||||
LubeConfig.tankRemain_µl = LubeConfig.tankCapacity_ml * 1000;
|
||||
ESPUI.print(label_tankRemain, String(LubeConfig.tankRemain_µl / 1000));
|
||||
}
|
||||
|
||||
if(sender->id == button_purge)
|
||||
if (sender->id == button_purge)
|
||||
{
|
||||
int pulses = ESPUI.getControl(num_purge_pulses)->value.toInt();
|
||||
Serial.printf("Starting to Purge with %d pulses", pulses);
|
||||
globals.purgePulses = pulses;
|
||||
globals.resumeStatus = globals.systemStatus;
|
||||
globals.systemStatus = sysStat_Purge;
|
||||
}
|
||||
|
||||
|
||||
if (sender->id == button_store)
|
||||
{
|
||||
StoreConfig_EEPROM();
|
||||
@ -107,13 +111,14 @@ void initWebUI()
|
||||
num_wheel_ratio = ESPUI.addControl(ControlType::Number, "Höhe/Breite-Verhältniss", String(LubeConfig.TireWidthHeight_Ratio), ControlColor::Peterriver, tab_wheel, &SettingChanged_Callback);
|
||||
num_wheel_rim = ESPUI.addControl(ControlType::Number, "Felgendurchmesser (Zoll)", String(LubeConfig.RimDiameter_Inch), ControlColor::Peterriver, tab_wheel, &SettingChanged_Callback);
|
||||
button_wheelcalc = ESPUI.addControl(ControlType::Button, "Abrollumfang aus Reifendaten berechnen", "Berechnen", ControlColor::Peterriver, tab_wheel, &buttons_Callback);
|
||||
num_wheel_dist = ESPUI.addControl(ControlType::Number, "Wegstrecke pro Umdrehung (mm)", String(LubeConfig.DistancePerRevolution_mm), ControlColor::Wetasphalt, tab_wheel, &SettingChanged_Callback);
|
||||
num_wheel_dist = ESPUI.addControl(ControlType::Number, "Wegstrecke pro Radumdrehung (mm)", String(LubeConfig.DistancePerRevolution_mm), ControlColor::Wetasphalt, tab_wheel, &SettingChanged_Callback);
|
||||
num_wheel_ppr = ESPUI.addControl(ControlType::Number, "Sensorimpulse pro Umdrehung", String(LubeConfig.PulsePerRevolution), ControlColor::Wetasphalt, tab_wheel, &SettingChanged_Callback);
|
||||
|
||||
num_tank_capacity = ESPUI.addControl(ControlType::Number, "Tankinhalt maximal (ml)", String(LubeConfig.tankCapacity_ml), ControlColor::Carrot, tab_tank, &SettingChanged_Callback);
|
||||
num_tank_notify = ESPUI.addControl(ControlType::Number, "Tankinhalt Warnung (%)", String(LubeConfig.TankRemindAtPercentage), ControlColor::Carrot, tab_tank, &SettingChanged_Callback);
|
||||
num_dose_per_pulse = ESPUI.addControl(ControlType::Number, "Menge pro Pumpenimpuls (µl)", String(LubeConfig.amountPerDose_µl), ControlColor::Carrot, tab_tank, &SettingChanged_Callback);
|
||||
|
||||
label_tankRemain = ESPUI.addControl(ControlType::Label, "Tankinhalt verbleibend (ml, geschätzt)",String(LubeConfig.tankRemain_µl / 1000), ControlColor::Alizarin, tab_maintenance);
|
||||
label_tankRemain = ESPUI.addControl(ControlType::Label, "Tankinhalt verbleibend (ml, geschätzt)", String(LubeConfig.tankRemain_µl / 1000), ControlColor::Alizarin, tab_maintenance);
|
||||
button_reset_tank = ESPUI.addControl(ControlType::Button, "Tankinhalt zurücksetzen", "Reset", ControlColor::Alizarin, tab_maintenance, &buttons_Callback);
|
||||
num_purge_pulses = ESPUI.addControl(ControlType::Number, "Entlüftung Impulse", "10", ControlColor::Alizarin, tab_maintenance);
|
||||
button_purge = ESPUI.addControl(ControlType::Button, "Leitung Entlüften", "Start", ControlColor::Alizarin, tab_maintenance, &buttons_Callback);
|
||||
|
@ -2,6 +2,9 @@
|
||||
#define _WEBUI_H_
|
||||
|
||||
#include <Arduino.h>
|
||||
#include <ESPUI.h>
|
||||
#include "config.h"
|
||||
#include "globals.h"
|
||||
|
||||
void initWebUI();
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user