Автоматика для посева саженцев

Собственно код `
#include <Arduino.h>

const int D2_PIN = 2;
const int D3_PIN = 3;
const int D4_PIN = 4;
const int D5_PIN = 5;
const int D6_PIN = 6;
const int A0_PIN = A0;

enum State
{
STATE_D2_HIGH,
STATE_INIT_D5,
STATE_WAIT_A0,
STATE_PROCESS_A0_HIGH,
STATE_D4_POST_D3,
STATE_WAIT_AFTER_D4,
STATE_D2_LOW,
STATE_INIT_D5_2
};

State currentState;
unsigned long timer;
unsigned long d4Timer;
bool d4Active;

void resetOutputs()
{
digitalWrite(D3_PIN, LOW);
digitalWrite(D4_PIN, LOW);
digitalWrite(D5_PIN, LOW);
digitalWrite(D6_PIN, LOW);
}

void setup()
{
pinMode(D2_PIN, INPUT);
pinMode(D3_PIN, OUTPUT);
pinMode(D4_PIN, OUTPUT);
pinMode(D5_PIN, OUTPUT);
pinMode(D6_PIN, OUTPUT);
pinMode(A0_PIN, INPUT);

resetOutputs();

if (digitalRead(D2_PIN) == HIGH)
{
    currentState = STATE_D2_HIGH;
    digitalWrite(D3_PIN, HIGH);
    digitalWrite(D6_PIN, HIGH);
}
else
{
    currentState = STATE_INIT_D5;
    timer = millis();
    digitalWrite(D5_PIN, HIGH);
}

}

void loop()
{
unsigned long currentMillis = millis();

// Проверка приоритета D2
if (currentState != STATE_D2_HIGH && digitalRead(D2_PIN) == HIGH)
{
    resetOutputs();
    digitalWrite(D3_PIN, HIGH);
    digitalWrite(D6_PIN, HIGH);
    currentState = STATE_D2_HIGH;
}

switch (currentState)
{
case STATE_D2_HIGH:
    if (digitalRead(D2_PIN) == LOW)
    {
        resetOutputs();
        currentState = STATE_INIT_D5;
        timer = currentMillis;
        digitalWrite(D5_PIN, HIGH);
    }
    break;

case STATE_INIT_D5:
    if (currentMillis - timer >= 500)
    {
        digitalWrite(D5_PIN, LOW);
        currentState = STATE_WAIT_A0;
    }
    break;

case STATE_WAIT_A0:
    if (analogRead(A0_PIN) <= 800)
    {
        currentState = STATE_PROCESS_A0_HIGH;
        timer = currentMillis;
        digitalWrite(D3_PIN, HIGH);
        d4Active = false;
    }
    break;

case STATE_PROCESS_A0_HIGH:
    if (!d4Active && currentMillis - timer >= 500)
    {
        digitalWrite(D4_PIN, HIGH);
        d4Timer = currentMillis;
        d4Active = true;
    }

    if (d4Active && currentMillis - d4Timer >= 500)
    {
        digitalWrite(D4_PIN, LOW);
        d4Active = true;
    }

    if (currentMillis - timer >= 5000)
    {
        digitalWrite(D4_PIN, HIGH);
        timer = currentMillis;
        currentState = STATE_D4_POST_D3;
    }
    break;

case STATE_D4_POST_D3:
    if (currentMillis - timer >= 500)
    {
        digitalWrite(D4_PIN, LOW);
        digitalWrite(D3_PIN, LOW);
        timer = currentMillis;
        currentState = STATE_WAIT_AFTER_D4;
    }
    break;

case STATE_WAIT_AFTER_D4:
    if (currentMillis - timer >= 500)
    {
        currentState = STATE_D2_LOW;
    }
    break;
case STATE_D2_LOW:
    if (digitalRead(D2_PIN) == LOW)
    {
        resetOutputs();
        currentState = STATE_INIT_D5_2;
        timer = currentMillis;
        digitalWrite(D5_PIN, HIGH);
    }
    break;

case STATE_INIT_D5_2:
    if (currentMillis - timer >= 500)
    {
        digitalWrite(D5_PIN, LOW);
        currentState = STATE_WAIT_A0;
    }
    break;
}

}`