// Auto_Seat // Initial automatic seat relay controller. #define seatRelayD8 8 #define seatRelayD9 9 #define parkingPin A0 #define ignitionPin 7 const int PARKING_ON_THRESHOLD = 950; const int PARKING_OFF_THRESHOLD = 940; const unsigned long SEAT_UP_MS = 2000UL; const unsigned long SEAT_DOWN_MS = 2200UL; boolean parkingState = LOW; boolean ignitionState = LOW; boolean previousDriveMode = LOW; int parkingRawValue = 0; unsigned long moveStartTime = 0; int seatAction = 0; void setup() { pinMode(parkingPin, INPUT); pinMode(ignitionPin, INPUT); pinMode(seatRelayD8, OUTPUT); pinMode(seatRelayD9, OUTPUT); applySeatAction(0); } void loop() { measurement(); boolean driveMode = ignitionState == HIGH && parkingState == LOW; if (driveMode != previousDriveMode) { previousDriveMode = driveMode; moveStartTime = millis(); seatAction = driveMode ? 1 : -1; } if (seatAction == 1 && millis() - moveStartTime >= SEAT_UP_MS) seatAction = 0; if (seatAction == -1 && millis() - moveStartTime >= SEAT_DOWN_MS) seatAction = 0; applySeatAction(seatAction); } void measurement() { ignitionState = digitalRead(ignitionPin); parkingRawValue = analogRead(parkingPin); if (parkingState == LOW && parkingRawValue >= PARKING_ON_THRESHOLD) parkingState = HIGH; else if (parkingState == HIGH && parkingRawValue <= PARKING_OFF_THRESHOLD) parkingState = LOW; } void setRelay(int relayPin, boolean state) { digitalWrite(relayPin, state ? LOW : HIGH); } void applySeatAction(int action) { if (action == 1) { setRelay(seatRelayD8, 1); setRelay(seatRelayD9, 0); } else if (action == -1) { setRelay(seatRelayD8, 0); setRelay(seatRelayD9, 1); } else { setRelay(seatRelayD8, 0); setRelay(seatRelayD9, 0); } }