Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <SoftwareSerial.h>
- SoftwareSerial outStream(10, 11); // RX, TX
- typedef enum Connection {
- INIT = 0,
- Disconnected = 1,
- Connected = 2,
- Waiting = 3
- };
- typedef enum lightState {
- Green = 1,
- Red = 0,
- TurnedOff = 2,
- Init = 3
- };
- typedef enum messages {
- RequestRed = 'r',
- RequestGreen = 'g',
- ApproveRed = 'd',
- ApproveGreen = 'n',
- Connection = 'c',
- Confirm = 'f',
- ACK = 'k'
- };
- int currentState;
- int connectionState;
- int timeout;
- int redLedPin = 7;
- int greenLedPin = 8;
- void setup() {
- connectionState = INIT;
- currentState = Init;
- pinMode(redLedPin, OUTPUT);
- pinMode(greenLedPin, OUTPUT);
- }
- void loop() {
- switch(currentState) {
- case Init:
- currentState = TurnedOff;
- break;
- case Red:
- Serial.write("Red\n");
- digitalWrite(redLedPin, HIGH);
- digitalWrite(greenLedPin, LOW);
- break;
- case Green:
- Serial.write("Green\n");
- digitalWrite(redLedPin, LOW);
- digitalWrite(greenLedPin, HIGH);
- break;
- case TurnedOff:
- digitalWrite(redLedPin, LOW);
- digitalWrite(greenLedPin, LOW);
- break;
- }
- switch(connectionState) {
- case INIT:
- Serial.begin(4800);
- outStream.begin(4800);
- Serial.write("I'm up!\n");
- connectionState = Disconnected;
- break;
- case Disconnected:
- Serial.write("Disconnected \n");
- if(outStream.available()) {
- if(outStream.read() == Confirm) {
- connectionState = Connected;
- }
- }
- outStream.write(Confirm);
- break;
- case Connected:
- Serial.write("Connected \n");
- int msg;
- if(Serial.available()) {
- outStream.write(Serial.read());
- timeout = millis();
- connectionState = Waiting;
- }
- else if(outStream.available()) {
- msg = outStream.read();
- }
- switch(msg) {
- case RequestRed:
- currentState = Green;
- outStream.write(ApproveRed);
- break;
- case RequestGreen:
- currentState = Red;
- outStream.write(ApproveGreen);
- break;
- case Connection:
- outStream.write(Confirm);
- break;
- }
- break;
- case Waiting:
- Serial.write("Waiting \n");
- msg = ' ';
- if(outStream.available()) {
- msg = outStream.read();
- }
- else if (millis() - timeout >= 3000){
- connectionState = Connected;
- break;
- }
- switch(msg) {
- case ApproveRed:
- currentState = Red;
- connectionState = Connected;
- break;
- case ApproveGreen:
- currentState = Green;
- connectionState = Connected;
- break;
- case ACK:
- connectionState = Connected;
- break;
- case Confirm:
- connectionState = Connected;
- break;
- }
- break;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement