Basic Function works
This commit is contained in:
parent
402535051a
commit
bfa4272334
@ -16,6 +16,7 @@ typedef enum eSystem_Status
|
|||||||
typedef struct Globals_t {
|
typedef struct Globals_t {
|
||||||
tSystem_Status systemStatus = sysStat_Startup;
|
tSystem_Status systemStatus = sysStat_Startup;
|
||||||
uint8_t purgePulses= 0;
|
uint8_t purgePulses= 0;
|
||||||
|
tSystem_Status resumeStatus = sysStat_Startup;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern Globals_t globals;
|
extern Globals_t globals;
|
||||||
|
@ -1,34 +1,65 @@
|
|||||||
#include "lubeapp.h"
|
#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)
|
void RunLubeApp(volatile uint32_t *wheelPulseCounter)
|
||||||
{
|
{
|
||||||
uint32_t LubeDistance = 0;
|
uint32_t LubeDistance = 0;
|
||||||
static uint32_t lubePulseTimestamp = 0;
|
|
||||||
// Calculate traveled Distance in mm
|
// Calculate traveled Distance in mm
|
||||||
TravelDistance_highRes += (*wheelPulseCounter * LubeConfig.DistancePerRevolution_mm);
|
TravelDistance_highRes += (*wheelPulseCounter * (LubeConfig.DistancePerRevolution_mm / LubeConfig.PulsePerRevolution));
|
||||||
*wheelPulseCounter = 0;
|
*wheelPulseCounter = 0;
|
||||||
|
|
||||||
// check if we have to Lube!
|
// check if we have to Lube!
|
||||||
switch (globals.systemStatus)
|
switch (globals.systemStatus)
|
||||||
{
|
{
|
||||||
case sysStat_Normal:
|
case sysStat_Startup:
|
||||||
LubeDistance = LubeConfig.DistancePerLube_Default;
|
globals.systemStatus = sysStat_Normal;
|
||||||
|
globals.resumeStatus = sysStat_Normal;
|
||||||
break;
|
break;
|
||||||
case sysStat_Rain:
|
|
||||||
LubeDistance = LubeConfig.DistancePerLube_Rain;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (TravelDistance_highRes > LubeDistance){
|
case sysStat_Normal:
|
||||||
lubePulseTimestamp = millis() + LUBE_PULSE_LENGHT_MS;
|
if (TravelDistance_highRes > LubeConfig.DistancePerLube_Default)
|
||||||
|
{
|
||||||
|
LubePulse();
|
||||||
TravelDistance_highRes = 0;
|
TravelDistance_highRes = 0;
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
//maintain Pin-State of Lube-Pump
|
case sysStat_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;
|
||||||
|
}
|
||||||
|
|
||||||
|
// maintain Pin-State of Lube-Pump
|
||||||
if (lubePulseTimestamp > millis())
|
if (lubePulseTimestamp > millis())
|
||||||
digitalWrite(GPIO_PUMP, HIGH);
|
digitalWrite(GPIO_PUMP, HIGH);
|
||||||
else
|
else
|
||||||
digitalWrite(GPIO_PUMP, LOW);
|
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 "common.h"
|
||||||
#include "globals.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 RunLubeApp(volatile uint32_t * wheelPulseCounter);
|
||||||
|
void LubePulse();
|
||||||
|
|
||||||
#endif
|
#endif
|
@ -47,6 +47,7 @@ void RemoteDebug_printWifiInfo();
|
|||||||
void wifiMaintainConnectionTicker_callback();
|
void wifiMaintainConnectionTicker_callback();
|
||||||
void IRAM_ATTR trigger_ISR();
|
void IRAM_ATTR trigger_ISR();
|
||||||
void LED_Process(tSystem_Status newStatus = sysStat_NOP);
|
void LED_Process(tSystem_Status newStatus = sysStat_NOP);
|
||||||
|
void DisplayProcess();
|
||||||
|
|
||||||
Ticker WiFiMaintainConnectionTicker(wifiMaintainConnectionTicker_callback, 1000, 0, MILLIS);
|
Ticker WiFiMaintainConnectionTicker(wifiMaintainConnectionTicker_callback, 1000, 0, MILLIS);
|
||||||
|
|
||||||
@ -138,14 +139,12 @@ void setup()
|
|||||||
|
|
||||||
void loop()
|
void loop()
|
||||||
{
|
{
|
||||||
LED_Process();
|
LED_Process(globals.systemStatus);
|
||||||
RunLubeApp(&wheel_pulse);
|
RunLubeApp(&wheel_pulse);
|
||||||
|
|
||||||
WiFiMaintainConnectionTicker.update();
|
WiFiMaintainConnectionTicker.update();
|
||||||
|
|
||||||
u8x8.setCursor(0, 3);
|
DisplayProcess();
|
||||||
u8x8.printf("%4d m", TravelDistance_highRes / 1000);
|
|
||||||
u8x8.refreshDisplay();
|
|
||||||
|
|
||||||
ArduinoOTA.handle();
|
ArduinoOTA.handle();
|
||||||
Debug.handle();
|
Debug.handle();
|
||||||
@ -247,8 +246,6 @@ void LED_Process(tSystem_Status newSysStatus)
|
|||||||
uint32_t timer = 0;
|
uint32_t timer = 0;
|
||||||
uint32_t timestamp = 0;
|
uint32_t timestamp = 0;
|
||||||
|
|
||||||
if (newSysStatus != sysStat_NOP)
|
|
||||||
{
|
|
||||||
if (oldSysStatus != newSysStatus)
|
if (oldSysStatus != newSysStatus)
|
||||||
{
|
{
|
||||||
switch (newSysStatus)
|
switch (newSysStatus)
|
||||||
@ -275,7 +272,7 @@ void LED_Process(tSystem_Status newSysStatus)
|
|||||||
}
|
}
|
||||||
oldSysStatus = newSysStatus;
|
oldSysStatus = newSysStatus;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
timer = millis();
|
timer = millis();
|
||||||
|
|
||||||
switch (LED_Status)
|
switch (LED_Status)
|
||||||
@ -325,3 +322,12 @@ void LED_Process(tSystem_Status newSysStatus)
|
|||||||
}
|
}
|
||||||
FastLED.show();
|
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 "webui.h"
|
||||||
#include <ESPUI.h>
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
uint16_t tab_lube;
|
uint16_t tab_lube;
|
||||||
uint16_t tab_wheel;
|
uint16_t tab_wheel;
|
||||||
@ -21,6 +19,7 @@ uint16_t num_wheel_dist;
|
|||||||
|
|
||||||
uint16_t num_tank_capacity;
|
uint16_t num_tank_capacity;
|
||||||
uint16_t num_tank_notify;
|
uint16_t num_tank_notify;
|
||||||
|
uint16_t num_dose_per_pulse;
|
||||||
|
|
||||||
uint16_t label_tankRemain;
|
uint16_t label_tankRemain;
|
||||||
uint16_t button_reset_tank;
|
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();
|
LubeConfig.tankCapacity_ml = ESPUI.getControl(num_tank_capacity)->value.toInt();
|
||||||
else if (sender->id == num_tank_notify)
|
else if (sender->id == num_tank_notify)
|
||||||
LubeConfig.TankRemindAtPercentage = ESPUI.getControl(num_tank_notify)->value.toInt();
|
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)
|
void buttons_Callback(Control *sender, int type)
|
||||||
{
|
{
|
||||||
if (type != B_UP) return;
|
if (type != B_UP)
|
||||||
|
return;
|
||||||
|
|
||||||
if (sender->id == button_wheelcalc)
|
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));
|
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;
|
LubeConfig.tankRemain_µl = LubeConfig.tankCapacity_ml * 1000;
|
||||||
ESPUI.print(label_tankRemain, String(LubeConfig.tankRemain_µl / 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();
|
int pulses = ESPUI.getControl(num_purge_pulses)->value.toInt();
|
||||||
Serial.printf("Starting to Purge with %d pulses", pulses);
|
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)
|
if (sender->id == button_store)
|
||||||
{
|
{
|
||||||
StoreConfig_EEPROM();
|
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_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);
|
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);
|
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_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_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_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);
|
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);
|
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);
|
button_purge = ESPUI.addControl(ControlType::Button, "Leitung Entlüften", "Start", ControlColor::Alizarin, tab_maintenance, &buttons_Callback);
|
||||||
|
@ -2,6 +2,9 @@
|
|||||||
#define _WEBUI_H_
|
#define _WEBUI_H_
|
||||||
|
|
||||||
#include <Arduino.h>
|
#include <Arduino.h>
|
||||||
|
#include <ESPUI.h>
|
||||||
|
#include "config.h"
|
||||||
|
#include "globals.h"
|
||||||
|
|
||||||
void initWebUI();
|
void initWebUI();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user