#include "lubeapp.h" uint32_t lubePulseTimestamp = 0; void RunLubeApp(volatile uint32_t *wheelPulseCounter) { // Calculate traveled Distance in mm TravelDistance_highRes += (*wheelPulseCounter * (LubeConfig.DistancePerRevolution_mm / LubeConfig.PulsePerRevolution)); *wheelPulseCounter = 0; // check if we have to Lube! switch (globals.systemStatus) { case sysStat_Startup: if (millis() > STARTUP_DELAY) { globals.systemStatus = sysStat_Normal; globals.resumeStatus = sysStat_Normal; } break; case sysStat_Normal: if (TravelDistance_highRes / 1000 > LubeConfig.DistancePerLube_Default) { LubePulse(); TravelDistance_highRes = 0; } break; case sysStat_Rain: if (TravelDistance_highRes / 1000 > LubeConfig.DistancePerLube_Rain) { LubePulse(); TravelDistance_highRes = 0; } break; case sysStat_Purge: if (globals.purgePulses > 0) { if (lubePulseTimestamp + LUBE_PULSE_PAUSE_MS < millis()) { LubePulse(); globals.purgePulses--; } } else { globals.systemStatus = globals.resumeStatus; } break; case sysStat_Error: default: 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); else digitalWrite(GPIO_PUMP, LOW); } void LubePulse() { lubePulseTimestamp = millis() + LUBE_PULSE_LENGHT_MS; if (PersistenceData.tankRemain_µl < LubeConfig.amountPerDose_µl) PersistenceData.tankRemain_µl = 0; else PersistenceData.tankRemain_µl = PersistenceData.tankRemain_µl - LubeConfig.amountPerDose_µl; }