Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save microcontrollershub/b4fed8b06791d6777e018f2d807de8af to your computer and use it in GitHub Desktop.
Save microcontrollershub/b4fed8b06791d6777e018f2d807de8af to your computer and use it in GitHub Desktop.
//------------ 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