#define FailStatusLED 13 // P05 Pin
#define Source1G 2 // P04 Pin
#define Source2G 3 // P03 Pin
#define Source1Detect 4 // P01 Pin
#define Source2Detect 5 // P00 Pin
#define AutoSWLED 6 // P10 Pin
#define ManualSWLED 7 // P11 Pin
#define S1SelectedLED 8 // P12 Pin
#define S2SelectedLED 9 // P13 Pin
#define SourSelectBT 10 // P14 Pin
#define OutputENBT 11 // P15 Pin
#define SWModeBT 12 // P17 Pin
bool
OutEN = 1,
SWSourceMode = 1, // 1 = Auto , 0 = Manual
S1Status = 1, // 1 = Not Ready , 0 = Ready
S2Status = 1, // 1 = Not Ready , 0 = Ready
SourceSelectval = 1, // 1 = Source1(Main Source) , 0 = Source2
valA1 = 1,
valB1 = 1,
valA2 = 1,
valB2 = 1,
valA3 = 1,
valB3 = 1;
void setup() {
pinMode(FailStatusLED, OUTPUT);
pinMode(Source1G, OUTPUT);
pinMode(Source2G, OUTPUT);
pinMode(Source1Detect, INPUT_PULLUP);
pinMode(Source2Detect, INPUT_PULLUP);
pinMode(AutoSWLED, OUTPUT);
pinMode(ManualSWLED, OUTPUT);
pinMode(S1SelectedLED, OUTPUT);
pinMode(S2SelectedLED, OUTPUT);
pinMode(SourSelectBT, INPUT_PULLUP);
pinMode(OutputENBT, INPUT_PULLUP);
pinMode(SWModeBT, INPUT_PULLUP);
digitalWrite(Source1G, LOW);
digitalWrite(Source2G, LOW);
digitalWrite(AutoSWLED, LOW);
digitalWrite(ManualSWLED, LOW);
digitalWrite(S1SelectedLED, LOW);
digitalWrite(S2SelectedLED, LOW);
if(SWSourceMode == 1){digitalWrite(AutoSWLED, HIGH); digitalWrite(ManualSWLED, LOW);}
else if(SWSourceMode == 0){digitalWrite(AutoSWLED, LOW); digitalWrite(ManualSWLED, HIGH);}
}
void loop() {
S1Status = digitalRead(Source1Detect);
S2Status = digitalRead(Source2Detect);
if(S1Status == 1 && S2Status == 1){digitalWrite(FailStatusLED, (millis()/300)%2);}
else{digitalWrite(FailStatusLED, 0);}
valB1 = digitalRead(OutputENBT);
if(valA1 == 1 && valB1 == 0){
if(OutEN == 1){OutEN = 0;}
else if(OutEN == 0){OutEN = 1;}
}
valA1 = valB1;
valB2 = digitalRead(SWModeBT);
if(valA2 == 1 && valB2 == 0){
if(SWSourceMode == 1){SWSourceMode = 0; digitalWrite(AutoSWLED, LOW); digitalWrite(ManualSWLED, HIGH); LEDSourceSelectUpdate();}
else if(SWSourceMode == 0){SWSourceMode = 1; digitalWrite(AutoSWLED, HIGH); digitalWrite(ManualSWLED, LOW); digitalWrite(S1SelectedLED, LOW); digitalWrite(S2SelectedLED, LOW);}
}
valA2 = valB2;
valB3 = digitalRead(SourSelectBT);
if(valA3 == 1 && valB3 == 0 && SWSourceMode == 0){
if(SourceSelectval == 1 && S2Status == 0){SourceSelectval = 0; LEDSourceSelectUpdate();}
else if(SourceSelectval == 0 && S1Status == 0){SourceSelectval = 1; LEDSourceSelectUpdate();}
}
valA3 = valB3;
if(SWSourceMode == 1 && OutEN == 1){
if((S1Status == 0 && S2Status == 0) || (S1Status == 0 && S2Status == 1)){digitalWrite(Source1G, HIGH); digitalWrite(Source2G, LOW);}
if(S1Status == 1 && S2Status == 0){digitalWrite(Source1G, LOW); digitalWrite(Source2G, HIGH);}
}else if(SWSourceMode == 1 && OutEN == 0){digitalWrite(Source1G, LOW); digitalWrite(Source2G, LOW);}
if(SWSourceMode == 0 && OutEN == 1){
if(SourceSelectval == 1){digitalWrite(Source1G, HIGH); digitalWrite(Source2G, LOW);}
if(SourceSelectval == 0){digitalWrite(Source1G, LOW); digitalWrite(Source2G, HIGH);}
}else if(SWSourceMode == 0 && OutEN == 0){digitalWrite(Source1G, LOW); digitalWrite(Source2G, LOW);}
}
void LEDSourceSelectUpdate(){
if(SourceSelectval == 0){digitalWrite(S1SelectedLED, LOW); digitalWrite(S2SelectedLED, HIGH);}
if(SourceSelectval == 1){digitalWrite(S1SelectedLED, HIGH); digitalWrite(S2SelectedLED, LOW);}
}