Initial automatic seat relay controller
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
build/
|
||||
*.hex
|
||||
*.elf
|
||||
*.eep
|
||||
*.map
|
||||
*.lst
|
||||
*.o
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user