67 lines
1.7 KiB
Arduino
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);
|
|
}
|
|
}
|