Last active
March 21, 2017 06:47
-
-
Save jinks/91765c8e998a22b87f1fd72894b7912e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Controling 2 Vista 128BPT alarm panels from a single keyswitch input device. And controlling the LEDs that are attached to said device. | |
*/ | |
// Pins | |
enum { | |
// Outputs | |
P1Out = 4, | |
P2Out = 5, | |
GreenLED = 6, | |
RedLED = 7, | |
// Inputs | |
P1Armed = 8, | |
P1Ready = 9, | |
P2Armed = 10, | |
P2Ready = 11, | |
Button = 2 | |
}; | |
//Set state variables | |
int state = 0; | |
int buttonState; // the current reading from the input pin | |
int lastButtonState = LOW; // the previous reading from the input pin | |
//Action when keysiwtch is activated: | |
void key(){ | |
// the following variables are unsigned long's because the time, measured in miliseconds, | |
// will quickly become a bigger number than can be stored in an int. | |
static unsigned long last_interrupt_time = 0; | |
unsigned long interrupt_time = millis(); | |
if (interrupt_time - last_interrupt_time < 200) { return; } | |
switch (state) { | |
case 1: | |
digitalWrite(P1Out, LOW); digitalWrite(P2Out, LOW); | |
break; | |
case 2: | |
digitalWrite(P1Out, LOW); digitalWrite(P2Out, HIGH); | |
break; | |
case 3: | |
case 4: | |
case 5: | |
case 6: | |
digitalWrite(P1Out, HIGH); digitalWrite(P2Out, HIGH); | |
break; | |
case 7: | |
case 8: | |
digitalWrite(P1Out, HIGH); digitalWrite(P2Out, LOW); | |
break; | |
case 9: | |
digitalWrite(P1Out, HIGH); digitalWrite(P2Out, HIGH); | |
break; | |
case 10: | |
digitalWrite(P1Out, LOW); digitalWrite(P2Out, HIGH); | |
break; | |
case 11: | |
case 12: | |
case 13: | |
digitalWrite(P1Out, HIGH); digitalWrite(P2Out, HIGH); | |
break; | |
case 14: | |
digitalWrite(P1Out, LOW); digitalWrite(P2Out, HIGH); | |
break; | |
case 15: | |
case 16: | |
digitalWrite(P1Out, HIGH); digitalWrite(P2Out, HIGH); | |
break; | |
} | |
last_interrupt_time = interrupt_time; | |
} | |
void setup() { | |
// Initialize Pins: | |
pinMode(P1Out, OUTPUT); //Panel 1 Output | |
pinMode(P2Out, OUTPUT); //Panel 2 Output | |
pinMode(GreenLED, OUTPUT); //Green LED Output | |
pinMode(RedLED, OUTPUT); //Red LED Output | |
pinMode(P1Armed, INPUT); //Panel 1 Armed | |
pinMode(P1Ready, INPUT); //Panel 1 Ready | |
pinMode(P2Armed, INPUT); //Panel 2 Armed | |
pinMode(P2Ready, INPUT); //Panel 2 Ready | |
pinMode(Button, INPUT); //KeySwitch Input | |
//Set up Interupt: | |
attachInterrupt(digitalPinToInterrupt(Button), key, RISING); | |
//Serial Debug Initalization: | |
Serial.begin(115200); | |
} | |
#define DEBUG | |
# ifdef DEBUG | |
void debug(String gled, String rled, int keyState, int pn1Armed, int pn1Ready, int pn2Armed, int pn2Ready) { | |
//Print states to Debug: | |
Serial.print("KeyState: "); Serial.print(keyState); | |
Serial.print(" - State: "); Serial.println(state); | |
Serial.print("Panel 1 Armed: "); Serial.print(pn1Armed); | |
Serial.print(" Panel 1 Ready: "); Serial.println(pn1Ready); | |
Serial.print("Panel 2 Armed: "); Serial.print(pn2Armed); | |
Serial.print(" Panel 2 Ready: "); Serial.println(pn2Ready); | |
Serial.println("LEDs - Green: " + gled + " - Red: " + rled + "\n"); | |
} | |
#else | |
#define debug(...) /**/ | |
#endif | |
void loop() { | |
// Read the input states: | |
int keyState = digitalRead(Button); | |
int pn1Armed = digitalRead(P1Armed); | |
int pn1Ready = digitalRead(P1Ready); | |
int pn2Armed = digitalRead(P2Armed); | |
int pn2Ready = digitalRead(P2Ready); | |
//Output Controls: | |
//State 1 | |
if (pn1Ready == 0 && pn1Armed == 0 && pn2Ready == 0 && pn2Armed == 0){ | |
digitalWrite(GreenLED, LOW); digitalWrite(RedLED, LOW); | |
state = 1; | |
debug("OFF","OFF", keyState, pn1Armed, pn1Ready, pn2Armed, pn2Ready); | |
} | |
//State 2 | |
else if(pn1Ready == 0 && pn1Armed == 0 && pn2Ready == 0 && pn2Armed == 1){ | |
digitalWrite(GreenLED, LOW); digitalWrite(RedLED, HIGH); | |
state = 2; | |
debug("OFF","ON", keyState, pn1Armed, pn1Ready, pn2Armed, pn2Ready); | |
} | |
//State 3 | |
else if(pn1Ready == 0 && pn1Armed == 0 && pn2Ready == 1 && pn2Armed == 0){ | |
digitalWrite(GreenLED, HIGH); digitalWrite(RedLED, HIGH); | |
state = 3; | |
debug("ON","ON", keyState, pn1Armed, pn1Ready, pn2Armed, pn2Ready); | |
} | |
//State 4 | |
else if(pn1Ready == 0 && pn1Armed == 0 && pn2Ready == 1 && pn2Armed == 1){ | |
digitalWrite(GreenLED, HIGH); digitalWrite(RedLED, HIGH); | |
state = 4; | |
debug("ON","ON", keyState, pn1Armed, pn1Ready, pn2Armed, pn2Ready); | |
} | |
//State 5 | |
else if(pn1Ready == 0 && pn1Armed == 1 && pn2Ready == 0 && pn2Armed == 0){ | |
digitalWrite(GreenLED, LOW); digitalWrite(RedLED, HIGH); | |
state = 5; | |
debug("OFF","ON", keyState, pn1Armed, pn1Ready, pn2Armed, pn2Ready); | |
} | |
//State 6 | |
else if(pn1Ready == 0 && pn1Armed == 1 && pn2Ready == 0 && pn2Armed == 1){ | |
digitalWrite(GreenLED, LOW); digitalWrite(RedLED, HIGH); | |
state = 6; | |
debug("OFF","ON", keyState, pn1Armed, pn1Ready, pn2Armed, pn2Ready); | |
} | |
//State 7 | |
else if(pn1Ready == 0 && pn1Armed == 1 && pn2Ready == 1 && pn2Armed == 0){ | |
digitalWrite(GreenLED, LOW); digitalWrite(RedLED, HIGH); | |
state = 7; | |
debug("OFF","ON", keyState, pn1Armed, pn1Ready, pn2Armed, pn2Ready); | |
} | |
//State 8 | |
else if(pn1Ready == 0 && pn1Armed == 1 && pn2Ready == 1 && pn2Armed == 1){ | |
digitalWrite(GreenLED, LOW); digitalWrite(RedLED, HIGH); | |
state = 8; | |
debug("OFF","ON", keyState, pn1Armed, pn1Ready, pn2Armed, pn2Ready); | |
} | |
//State 9 | |
else if(pn1Ready == 1 && pn1Armed == 0 && pn2Ready == 0 && pn2Armed == 0){ | |
digitalWrite(GreenLED, HIGH); digitalWrite(RedLED, HIGH); | |
state = 9; | |
debug("ON","ON", keyState, pn1Armed, pn1Ready, pn2Armed, pn2Ready); | |
} | |
//State 10 | |
else if(pn1Ready == 1 && pn1Armed == 0 && pn2Ready == 0 && pn2Armed == 1){ | |
digitalWrite(GreenLED, LOW); digitalWrite(RedLED, HIGH); | |
state = 10; | |
debug("OFF","ON", keyState, pn1Armed, pn1Ready, pn2Armed, pn2Ready); | |
} | |
//State 11 | |
else if(pn1Ready == 1 && pn1Armed == 0 && pn2Ready == 1 && pn2Armed == 0){ | |
digitalWrite(GreenLED, HIGH); digitalWrite(RedLED, LOW); | |
state = 11; | |
debug("ON","OFF", keyState, pn1Armed, pn1Ready, pn2Armed, pn2Ready); | |
} | |
//State 12 | |
else if(pn1Ready == 1 && pn1Armed == 0 && pn2Ready == 1 && pn2Armed == 1){ | |
digitalWrite(GreenLED, HIGH); digitalWrite(RedLED, HIGH); | |
state = 12; | |
debug("ON","ON", keyState, pn1Armed, pn1Ready, pn2Armed, pn2Ready); | |
} | |
//State 13 | |
else if(pn1Ready == 1 && pn1Armed == 1 && pn2Ready == 0 && pn2Armed == 0){ | |
digitalWrite(GreenLED, HIGH); digitalWrite(RedLED, HIGH); | |
state = 13; | |
debug("ON","ON", keyState, pn1Armed, pn1Ready, pn2Armed, pn2Ready); | |
} | |
//State 14 | |
else if(pn1Ready == 1 && pn1Armed == 1 && pn2Ready == 0 && pn2Armed == 1){ | |
digitalWrite(GreenLED, LOW); digitalWrite(RedLED, HIGH); | |
state = 14; | |
debug("OFF","ON", keyState, pn1Armed, pn1Ready, pn2Armed, pn2Ready); | |
} | |
//State 15 | |
else if(pn1Ready == 1 && pn1Armed == 1 && pn2Ready == 1 && pn2Armed == 0){ | |
digitalWrite(GreenLED, HIGH); digitalWrite(RedLED, HIGH); | |
state = 15; | |
debug("ON","ON", keyState, pn1Armed, pn1Ready, pn2Armed, pn2Ready); | |
} | |
//State 16 | |
else if(pn1Ready == 1 && pn1Armed == 1 && pn2Ready == 1 && pn2Armed == 1){ | |
digitalWrite(GreenLED, HIGH); digitalWrite(RedLED, HIGH); | |
state = 16; | |
debug("ON","ON", keyState, pn1Armed, pn1Ready, pn2Armed, pn2Ready); | |
} | |
//Delay between cycles for stability | |
delay(1000); | |
//Reset panel outputs | |
digitalWrite(P1Out, LOW); | |
digitalWrite(P2Out, LOW); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment