Advertisement
Guest User

Untitled

a guest
Dec 9th, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.94 KB | None | 0 0
  1. #include <SoftwareSerial.h>
  2.  
  3. SoftwareSerial outStream(10, 11); // RX, TX
  4.  
  5. typedef enum Connection {
  6. INIT = 0,
  7. Disconnected = 1,
  8. Connected = 2,
  9. Waiting = 3
  10. };
  11.  
  12. typedef enum lightState {
  13. Green = 1,
  14. Red = 0,
  15. TurnedOff = 2,
  16. Init = 3
  17. };
  18.  
  19. typedef enum messages {
  20. RequestRed = 'r',
  21. RequestGreen = 'g',
  22. ApproveRed = 'd',
  23. ApproveGreen = 'n',
  24. Connection = 'c',
  25. Confirm = 'f',
  26. ACK = 'k'
  27. };
  28.  
  29. int currentState;
  30. int connectionState;
  31. int timeout;
  32.  
  33. int redLedPin = 7;
  34. int greenLedPin = 8;
  35.  
  36. void setup() {
  37. connectionState = INIT;
  38. currentState = Init;
  39. pinMode(redLedPin, OUTPUT);
  40. pinMode(greenLedPin, OUTPUT);
  41. }
  42.  
  43. void loop() {
  44. switch(currentState) {
  45. case Init:
  46. currentState = TurnedOff;
  47. break;
  48. case Red:
  49. Serial.write("Red\n");
  50. digitalWrite(redLedPin, HIGH);
  51. digitalWrite(greenLedPin, LOW);
  52. break;
  53. case Green:
  54. Serial.write("Green\n");
  55. digitalWrite(redLedPin, LOW);
  56. digitalWrite(greenLedPin, HIGH);
  57. break;
  58. case TurnedOff:
  59. digitalWrite(redLedPin, LOW);
  60. digitalWrite(greenLedPin, LOW);
  61. break;
  62. }
  63.  
  64. switch(connectionState) {
  65. case INIT:
  66. Serial.begin(4800);
  67. outStream.begin(4800);
  68. Serial.write("I'm up!\n");
  69. connectionState = Disconnected;
  70. break;
  71. case Disconnected:
  72. Serial.write("Disconnected \n");
  73. if(outStream.available()) {
  74. if(outStream.read() == Confirm) {
  75. connectionState = Connected;
  76. }
  77. }
  78.  
  79. outStream.write(Confirm);
  80. break;
  81. case Connected:
  82. Serial.write("Connected \n");
  83. int msg;
  84.  
  85. if(Serial.available()) {
  86. outStream.write(Serial.read());
  87. timeout = millis();
  88. connectionState = Waiting;
  89. }
  90. else if(outStream.available()) {
  91. msg = outStream.read();
  92. }
  93.  
  94. switch(msg) {
  95. case RequestRed:
  96. currentState = Green;
  97. outStream.write(ApproveRed);
  98. break;
  99. case RequestGreen:
  100. currentState = Red;
  101. outStream.write(ApproveGreen);
  102. break;
  103. case Connection:
  104. outStream.write(Confirm);
  105. break;
  106. }
  107. break;
  108. case Waiting:
  109. Serial.write("Waiting \n");
  110. msg = ' ';
  111.  
  112. if(outStream.available()) {
  113. msg = outStream.read();
  114. }
  115. else if (millis() - timeout >= 3000){
  116. connectionState = Connected;
  117. break;
  118. }
  119.  
  120. switch(msg) {
  121. case ApproveRed:
  122. currentState = Red;
  123. connectionState = Connected;
  124. break;
  125. case ApproveGreen:
  126. currentState = Green;
  127. connectionState = Connected;
  128. break;
  129. case ACK:
  130. connectionState = Connected;
  131. break;
  132. case Confirm:
  133. connectionState = Connected;
  134. break;
  135. }
  136. break;
  137. }
  138. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement