Created
March 1, 2018 19:40
-
-
Save microcontrollershub/b4fed8b06791d6777e018f2d807de8af 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
//------------ BLE commands ------------ | |
String ReceivedString_1 = "all red"; | |
String ReceivedString_2 = "all green"; | |
String ReceivedString_3 = "hold"; | |
String ReceivedString_4 = "A C green"; | |
String ReceivedString_5 = "B D green"; | |
String ReceivedString_6 = "shut down"; | |
String ReceivedString_7 = "test"; | |
String ReceivedString_8 = "resume"; | |
String ReceivedString_9 = "ok"; | |
String Red = "Red"; | |
String Yellow = "Yellow"; | |
String Green = "Green"; | |
String Restart = "Restart"; | |
String Manual = "Manual"; | |
String OFF = "OFF"; | |
String ON = "ON"; | |
//------------ Signal side A ------------ | |
const int A_Red = 2; | |
const int A_Yellow = 3; | |
const int A_Green = 4; | |
//------------ Signal side B ------------ | |
const int B_Red = 5; | |
const int B_Yellow = 6; | |
const int B_Green = 7; | |
//------------ Signal side C ------------ | |
const int C_Red = 8; | |
const int C_Yellow = 9; | |
const int C_Green = 10; | |
//------------ Signal side D ------------ | |
const int D_Red = 11; | |
const int D_Yellow = 12; | |
const int D_Green = 13; | |
//------------ Signal time ------------ | |
const long GreenInterval = 4000; | |
const long YellowInterval = 1500; | |
unsigned long previousMillis = 0; | |
unsigned long currentMillis = 0; | |
unsigned long interval = 0; | |
int state = 1; | |
int LastState = 0; | |
String States[4]; | |
String CurrentSignal; | |
void setup() | |
{ | |
Serial.begin(9600); | |
pinMode(A_Red , OUTPUT); | |
pinMode(A_Yellow, OUTPUT); | |
pinMode(A_Green, OUTPUT); | |
pinMode(B_Red , OUTPUT); | |
pinMode(B_Yellow, OUTPUT); | |
pinMode(B_Green, OUTPUT); | |
pinMode(C_Red , OUTPUT); | |
pinMode(C_Yellow, OUTPUT); | |
pinMode(C_Green, OUTPUT); | |
pinMode(D_Red , OUTPUT); | |
pinMode(D_Yellow, OUTPUT); | |
pinMode(D_Green, OUTPUT); | |
SignalAllClear(OFF); | |
} | |
void loop() | |
{ | |
switch(state) | |
{ | |
case 1: | |
Serial.println("****** State 1 A Green ******"); | |
States[0] = Green; | |
States[1] = Red; | |
States[2] = Red; | |
States[3] = Red; | |
SignalStatus(States); | |
CurrentSignal = Green; | |
break; | |
case 2: | |
Serial.println("****** State 2 A Yellow ******"); | |
States[0] = Yellow; | |
States[1] = Red; | |
States[2] = Red; | |
States[3] = Red; | |
SignalStatus(States); | |
CurrentSignal = Yellow; | |
break; | |
case 3: | |
Serial.println("****** State 3 B Green ******"); | |
States[0] = Red; | |
States[1] = Green; | |
States[2] = Red; | |
States[3] = Red; | |
SignalStatus(States); | |
CurrentSignal = Green; | |
break; | |
case 4: | |
Serial.println("****** State 4 B Yellow ******"); | |
States[0] = Red; | |
States[1] = Yellow; | |
States[2] = Red; | |
States[3] = Red; | |
SignalStatus(States); | |
CurrentSignal = Yellow; | |
break; | |
case 5: | |
Serial.println("****** State 5 C Green ******"); | |
States[0] = Red; | |
States[1] = Red; | |
States[2] = Green; | |
States[3] = Red; | |
SignalStatus(States); | |
CurrentSignal = Green; | |
break; | |
case 6: | |
Serial.println("****** State 6 C Yellow ******"); | |
States[0] = Red; | |
States[1] = Red; | |
States[2] = Yellow; | |
States[3] = Red; | |
SignalStatus(States); | |
CurrentSignal = Yellow; | |
break; | |
case 7: | |
Serial.println("****** State 7 D Green ******"); | |
States[0] = Red; | |
States[1] = Red; | |
States[2] = Red; | |
States[3] = Green; | |
SignalStatus(States); | |
CurrentSignal = Green; | |
break; | |
case 8: | |
Serial.println("****** State 8 D Yellow ******"); | |
States[0] = Red; | |
States[1] = Red; | |
States[2] = Red; | |
States[3] = Yellow; | |
SignalStatus(States); | |
CurrentSignal = Yellow; | |
break; | |
case 11: | |
Serial.println("****** State 11 D Yellow ******"); | |
States[0] = Red; | |
States[1] = Red; | |
States[2] = Red; | |
States[3] = Red; | |
SignalStatus(States); | |
CurrentSignal = Manual; | |
break; | |
case 12: | |
Serial.println("****** State 12 ******"); | |
States[0] = Green; | |
States[1] = Green; | |
States[2] = Green; | |
States[3] = Green; | |
SignalStatus(States); | |
CurrentSignal = Manual; | |
break; | |
case 13: | |
Serial.println("****** State 13 ******"); | |
CurrentSignal = Manual; | |
break; | |
case 14: | |
Serial.println("****** State 14 ******"); | |
States[0] = Green; | |
States[1] = Red; | |
States[2] = Green; | |
States[3] = Red; | |
SignalStatus(States); | |
CurrentSignal = Manual; | |
break; | |
case 15: | |
Serial.println("****** State 15 ******"); | |
States[0] = Red; | |
States[1] = Green; | |
States[2] = Red; | |
States[3] = Green; | |
SignalStatus(States); | |
CurrentSignal = Manual; | |
break; | |
case 16: | |
Serial.println("****** State 16 ******"); | |
SignalAllClear(OFF); | |
CurrentSignal = Manual; | |
break; | |
case 17: | |
Serial.println("****** State 17 ******"); | |
SignalAllClear(ON); | |
CurrentSignal = Manual; | |
break; | |
case 18: | |
Serial.println("****** State 18 ******"); | |
state = LastState; | |
CurrentSignal = Restart; | |
break; | |
default: | |
Serial.println("****** Error occured ******"); | |
state = 0; | |
CurrentSignal = Restart; | |
break; | |
} | |
if (8 > state) | |
{ | |
state = state + 1; | |
} | |
else if (8 == state) | |
{ | |
state = 1 ; | |
} | |
if (Green == CurrentSignal) | |
{ | |
interval = GreenInterval; | |
} | |
else if (Yellow == CurrentSignal) | |
{ | |
interval = YellowInterval; | |
} | |
else if (Restart == CurrentSignal) | |
{ | |
CurrentSignal = Manual; | |
} | |
currentMillis = millis(); | |
while ((currentMillis - previousMillis <= interval) && (Manual != CurrentSignal) ) | |
{ | |
currentMillis = millis(); | |
if (Serial.available()) | |
{ | |
String ReceivedString = Serial.readString(); | |
state = DecodeReceivedSignal(ReceivedString); | |
Serial.println("****** BT data available ******"); | |
Serial.print(" State = "); | |
Serial.println(state); | |
break; | |
} | |
} | |
previousMillis = currentMillis; | |
if ((Manual == CurrentSignal)&&(Serial.available())) | |
{ | |
String ReceivedString = Serial.readString(); | |
state = DecodeReceivedSignal(ReceivedString); | |
Serial.println("****** BT data available ******"); | |
Serial.print(" State = "); | |
Serial.println(state); | |
} | |
} | |
int DecodeReceivedSignal(String ReceivedString) | |
{ | |
if (Manual != CurrentSignal) | |
{ | |
LastState = state - 1; | |
} | |
if (ReceivedString_1 == ReceivedString) | |
{ | |
state = 11; | |
} | |
else if (ReceivedString_2 == ReceivedString) | |
{ | |
state = 12; | |
} | |
else if (ReceivedString_3 == ReceivedString) | |
{ | |
state = 13; | |
} | |
else if (ReceivedString_4 == ReceivedString) | |
{ | |
state = 14; | |
} | |
else if (ReceivedString_5 == ReceivedString) | |
{ | |
state = 15; | |
} | |
else if (ReceivedString_6 == ReceivedString) | |
{ | |
state = 16; | |
} | |
else if (ReceivedString_7 == ReceivedString) | |
{ | |
state = 17; | |
} | |
else if (ReceivedString_8 == ReceivedString) | |
{ | |
state = 18; | |
} | |
else if (ReceivedString_9 == ReceivedString) | |
{ | |
state = 18; | |
} | |
return state; | |
} | |
void SignalStatus(String States[4]) | |
{ | |
if ( Green == States[0] ) | |
{ | |
digitalWrite(A_Red, HIGH); | |
digitalWrite(A_Yellow, HIGH); | |
digitalWrite(A_Green, LOW); | |
} | |
else if (Yellow == States[0]) | |
{ | |
digitalWrite(A_Red, HIGH); | |
digitalWrite(A_Yellow, LOW); | |
digitalWrite(A_Green, HIGH); | |
} | |
else if(Red == States[0]) | |
{ | |
digitalWrite(A_Red, LOW); | |
digitalWrite(A_Yellow, HIGH); | |
digitalWrite(A_Green, HIGH); | |
} | |
if ( Green == States[1] ) | |
{ | |
digitalWrite(B_Red, HIGH); | |
digitalWrite(B_Yellow, HIGH); | |
digitalWrite(B_Green, LOW); | |
} | |
else if (Yellow == States[1]) | |
{ | |
digitalWrite(B_Red, HIGH); | |
digitalWrite(B_Yellow, LOW); | |
digitalWrite(B_Green, HIGH); | |
} | |
else if (Red == States[1]) | |
{ | |
digitalWrite(B_Red, LOW); | |
digitalWrite(B_Yellow, HIGH); | |
digitalWrite(B_Green, HIGH); | |
} | |
if ( Green == States[2] ) | |
{ | |
digitalWrite(C_Red, HIGH); | |
digitalWrite(C_Yellow, HIGH); | |
digitalWrite(C_Green, LOW); | |
} | |
else if (Yellow == States[2]) | |
{ | |
digitalWrite(C_Red, HIGH); | |
digitalWrite(C_Yellow, LOW); | |
digitalWrite(C_Green, HIGH); | |
} | |
else if (Red == States[2]) | |
{ | |
digitalWrite(C_Red, LOW); | |
digitalWrite(C_Yellow, HIGH); | |
digitalWrite(C_Green, HIGH); | |
} | |
if ( Green == States[3] ) | |
{ | |
digitalWrite(D_Red, HIGH); | |
digitalWrite(D_Yellow, HIGH); | |
digitalWrite(D_Green, LOW); | |
} | |
else if (Yellow == States[3]) | |
{ | |
digitalWrite(D_Red, HIGH); | |
digitalWrite(D_Yellow, LOW); | |
digitalWrite(D_Green, HIGH); | |
} | |
else if (Red == States[3]) | |
{ | |
digitalWrite(D_Red, LOW); | |
digitalWrite(D_Yellow, HIGH); | |
digitalWrite(D_Green, HIGH); | |
} | |
} | |
void SignalAllClear(String Signal) | |
{ | |
if ( OFF == Signal) | |
{ | |
digitalWrite(A_Red, HIGH); | |
digitalWrite(A_Yellow, HIGH); | |
digitalWrite(A_Green, HIGH); | |
digitalWrite(B_Red, HIGH); | |
digitalWrite(B_Yellow, HIGH); | |
digitalWrite(B_Green, HIGH); | |
digitalWrite(C_Red, HIGH); | |
digitalWrite(C_Yellow, HIGH); | |
digitalWrite(C_Green, HIGH); | |
digitalWrite(D_Red, HIGH); | |
digitalWrite(D_Yellow, HIGH); | |
digitalWrite(D_Green, HIGH); | |
} | |
else if ( ON == Signal) | |
{ | |
digitalWrite(A_Red, LOW); | |
digitalWrite(A_Yellow, LOW); | |
digitalWrite(A_Green, LOW); | |
digitalWrite(B_Red, LOW); | |
digitalWrite(B_Yellow, LOW); | |
digitalWrite(B_Green, LOW); | |
digitalWrite(C_Red, LOW); | |
digitalWrite(C_Yellow, LOW); | |
digitalWrite(C_Green, LOW); | |
digitalWrite(D_Red, LOW); | |
digitalWrite(D_Yellow, LOW); | |
digitalWrite(D_Green, LOW); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment