const int inputA = 5; //ignState
const int inputB = 7; //accState
const int output = 9;
const byte interruptPin = 3;
int ignState = 0;
int accState = 0;
int outputState = 0;
int interruptState = 0;
int times = 0;
unsigned long int timeWait;
unsigned long int dipTime;
unsigned long int keyoutTime;
unsigned long int currentTime;
unsigned long int timer = 0;
void setup() {
pinMode(inputA, INPUT);
pinMode(inputB, INPUT);
pinMode(output, OUTPUT);
pinMode(interruptPin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(interruptPin), doorAction, FALLING);
delay (2000);
DDRC &= B11100000;
PORTC |= B00011111;
setDelay();
}
void loop() {
timeWait = dipTime;
ignState = digitalRead(inputA);
accState = digitalRead(inputB);
interruptState = digitalRead(interruptPin);
if (accState == LOW) {
outputState = LOW;
digitalWrite(output,outputState);
}
if (ignState == LOW && accState == HIGH) {
outputState = HIGH;
times = 1;
keyoutTime = millis();
digitalWrite(output,outputState);
}
if (ignState == HIGH && accState == HIGH && times == 1) {
if (millis() - keyoutTime < timeWait) {
outputState = HIGH;
digitalWrite(output,outputState);
times = 1;
} else if (millis() - keyoutTime > timeWait) {
outputState = LOW;
times = 0;
digitalWrite(output,outputState);
}
}
}
void doorAction(){
if (ignState == HIGH && accState == HIGH){
outputState = HIGH;
digitalWrite(output,outputState);
keyoutTime = millis();
times = 1;
}
}
int setDelay(){
long int dipSwsetting = PINC & B00011111;
dipTime = 5000 + (10000*dipSwsetting);
return dipTime;
}