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