65 lines
1.7 KiB
C++

#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 / 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_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;
}