Files
Auto_Seat/Auto_Seat.ino
T

67 lines
1.7 KiB
Arduino

// 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);
}
}