Initial automatic seat relay controller

This commit is contained in:
2026-06-07 06:11:58 +09:00
commit 5197348bd2
2 changed files with 73 additions and 0 deletions
+66
View File
@@ -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);
}
}