#include "lubeapp.h" extern void LED_Process(tSystem_Status newStatus = sysStat_NOP); uint32_t lubePulseTimestamp = 0; void RunLubeApp(volatile uint32_t *wheelPulseCounter) { uint32_t LubeDistance = 0; // 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: globals.systemStatus = sysStat_Normal; globals.resumeStatus = sysStat_Normal; break; case sysStat_Normal: if (TravelDistance_highRes > LubeConfig.DistancePerLube_Default) { LubePulse(); TravelDistance_highRes = 0; } break; 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()) 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; }