#include "lubeapp.h" uint32_t lubePulseTimestamp = 0; void RunLubeApp(uint32_t add_milimeters) { // Add traveled Distance in mm PersistenceData.TravelDistance_highRes += add_milimeters; switch (globals.systemStatus) { case sysStat_Startup: if (millis() > STARTUP_DELAY) { globals.systemStatus = sysStat_Normal; globals.resumeStatus = sysStat_Normal; } break; case sysStat_Normal: if (PersistenceData.TravelDistance_highRes / 1000 > LubeConfig.DistancePerLube_Default) { LubePulse(); PersistenceData.TravelDistance_highRes = 0; } break; case sysStat_Rain: if (PersistenceData.TravelDistance_highRes / 1000 > LubeConfig.DistancePerLube_Rain) { LubePulse(); PersistenceData.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, PSTR("Normal")); break; case sysStat_Purge: strcpy(globals.systemStatustxt, PSTR("Purge")); break; case sysStat_Rain: strcpy(globals.systemStatustxt, PSTR("Rain")); break; case sysStat_Startup: strcpy(globals.systemStatustxt, PSTR("Startup")); break; case sysStat_Error: strcpy(globals.systemStatustxt, PSTR("Error")); break; case sysStat_Shutdown: strcpy(globals.systemStatustxt, PSTR("Shutdown")); 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; }