From 5197348bd2734928f716a316b3b5292504813a39 Mon Sep 17 00:00:00 2001 From: seo-amugae Date: Sun, 7 Jun 2026 06:11:58 +0900 Subject: [PATCH] Initial automatic seat relay controller --- .gitignore | 7 ++++++ Auto_Seat.ino | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+) create mode 100644 .gitignore create mode 100644 Auto_Seat.ino diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e759ad6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +build/ +*.hex +*.elf +*.eep +*.map +*.lst +*.o diff --git a/Auto_Seat.ino b/Auto_Seat.ino new file mode 100644 index 0000000..68365f8 --- /dev/null +++ b/Auto_Seat.ino @@ -0,0 +1,66 @@ +// 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); + } +}