172 lines
4.6 KiB
C++
172 lines
4.6 KiB
C++
#include "timer.h"
|
|
|
|
volatile static bool wait_sent = false;
|
|
|
|
void onTimer(void *arg)
|
|
{
|
|
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
|
|
timerStatus *params = (timerStatus *)(arg);
|
|
TaskHandle_t task = params->main_task;
|
|
const timerPins pins = params->pins;
|
|
|
|
// increment state time
|
|
params->state_time += params->clock_period_us;
|
|
|
|
switch (params->state)
|
|
{
|
|
|
|
case S_12P:
|
|
if (params->state_time == params->clock_period_us && !params->coil12p_high)
|
|
{
|
|
digitalWrite(pins.pin_trig_12p, HIGH);
|
|
params->coil12p_high = true;
|
|
wait_sent = false;
|
|
}
|
|
|
|
if (!params->soft_start)
|
|
{
|
|
if (params->state_time == params->spark_delay_us)
|
|
{
|
|
digitalWrite(pins.pin_spark_12, HIGH);
|
|
}
|
|
|
|
if (params->state_time == (params->spark_delay_us + params->spark_pulse_us))
|
|
{
|
|
digitalWrite(pins.pin_spark_12, LOW);
|
|
}
|
|
}
|
|
|
|
if (params->state_time >= params->coil_pulse_us && params->coil12p_high)
|
|
{
|
|
digitalWrite(pins.pin_trig_12p, LOW);
|
|
params->coil12p_high = false;
|
|
}
|
|
|
|
if (params->state_time >= params->pause_short_us)
|
|
{
|
|
params->state = S_12N;
|
|
params->state_time = 0;
|
|
}
|
|
break;
|
|
|
|
case S_12N:
|
|
if (params->state_time == params->clock_period_us && !params->coil12n_high)
|
|
{
|
|
digitalWrite(pins.pin_trig_12n, HIGH);
|
|
params->coil12n_high = true;
|
|
}
|
|
|
|
if (params->soft_start)
|
|
{
|
|
if (params->state_time == params->spark_delay_us)
|
|
{
|
|
digitalWrite(pins.pin_spark_12, HIGH);
|
|
}
|
|
|
|
if (params->state_time == (params->spark_delay_us + params->spark_pulse_us))
|
|
{
|
|
digitalWrite(pins.pin_spark_12, LOW);
|
|
}
|
|
}
|
|
|
|
if (params->state_time >= params->coil_pulse_us && params->coil12n_high)
|
|
{
|
|
digitalWrite(pins.pin_trig_12n, LOW);
|
|
params->coil12n_high = false;
|
|
params->state = S_WAIT_10MS;
|
|
params->state_time = 0;
|
|
}
|
|
break;
|
|
|
|
case S_WAIT_10MS:
|
|
if (!wait_sent)
|
|
{
|
|
wait_sent = true;
|
|
}
|
|
if (params->state_time >= params->pause_long_us)
|
|
{
|
|
params->state = S_34P;
|
|
params->state_time = 0;
|
|
}
|
|
break;
|
|
|
|
case S_34P:
|
|
if (params->state_time == params->clock_period_us && !params->coil34p_high)
|
|
{
|
|
digitalWrite(pins.pin_trig_34p, HIGH);
|
|
params->coil34p_high = true;;
|
|
wait_sent = false;
|
|
}
|
|
|
|
if (!params->soft_start)
|
|
{
|
|
if (params->state_time == params->spark_delay_us)
|
|
{
|
|
digitalWrite(pins.pin_spark_34, HIGH);
|
|
}
|
|
|
|
if (params->state_time == params->spark_delay_us + params->spark_pulse_us)
|
|
{
|
|
digitalWrite(pins.pin_spark_34, LOW);
|
|
}
|
|
}
|
|
|
|
if (params->state_time >= params->coil_pulse_us && params->coil34p_high)
|
|
{
|
|
digitalWrite(pins.pin_trig_34p, LOW);
|
|
params->coil34p_high = false;
|
|
}
|
|
|
|
if (params->state_time >= params->pause_short_us)
|
|
{
|
|
params->state = S_34N;
|
|
params->state_time = 0;
|
|
}
|
|
break;
|
|
|
|
case S_34N:
|
|
if (params->state_time == params->clock_period_us && !params->coil34n_high)
|
|
{
|
|
digitalWrite(pins.pin_trig_34n, HIGH);
|
|
params->coil34n_high = true;
|
|
}
|
|
|
|
if (params->soft_start)
|
|
{
|
|
if (params->state_time == params->spark_delay_us)
|
|
{
|
|
digitalWrite(pins.pin_spark_34, HIGH);
|
|
}
|
|
|
|
if (params->state_time == params->spark_delay_us + params->spark_pulse_us)
|
|
{
|
|
digitalWrite(pins.pin_spark_34, LOW);
|
|
}
|
|
}
|
|
|
|
if (params->state_time >= params->coil_pulse_us && params->coil34n_high)
|
|
{
|
|
digitalWrite(pins.pin_trig_34n, LOW);
|
|
params->coil34n_high = false;
|
|
params->state = S_WAIT_10MS_END;
|
|
params->state_time = 0;
|
|
}
|
|
break;
|
|
|
|
case S_WAIT_10MS_END:
|
|
if (!wait_sent)
|
|
{
|
|
wait_sent = true;
|
|
}
|
|
if (params->state_time >= params->pause_long_us)
|
|
{
|
|
params->state = S_12P;
|
|
params->state_time = 0;
|
|
}
|
|
break;
|
|
}
|
|
|
|
if (xHigherPriorityTaskWoken)
|
|
portYIELD_FROM_ISR();
|
|
}
|