Advertisement
Guest User

Untitled

a guest
Oct 19th, 2017
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.71 KB | None | 0 0
  1. const int BTN_PIN = 4;
  2. const int L0 = 9;
  3. const int L1 = 10;
  4.  
  5. const int S_CARS_DRIVE = 1;
  6. const int S_PREPARE_TO_STOP = 2;
  7. const int S_CARS_STOP = 3;
  8. const int S_PREPARE_TO_DRIVE = 4;
  9.  
  10. int state = S_CARS_DRIVE;
  11.  
  12. unsigned long nextTimeout;
  13. int buttonState;
  14. int hasExpired;
  15. int isItPressed;
  16.  
  17. void setup()
  18. {
  19. Serial.begin(9600);
  20.  
  21. pinMode(BTN_PIN, INPUT);
  22. pinMode(L0, OUTPUT);
  23. pinMode(L1, OUTPUT);
  24.  
  25. }
  26.  
  27. void loop()
  28. {
  29. buttonState = digitalRead(BTN_PIN);
  30. switch(state)
  31. {
  32. case S_CARS_DRIVE:
  33. setTrafficLight(3);
  34. if (isButtonPressed(buttonState) == true)
  35. {
  36. startTimer (2000);
  37. changeStateTo(2);
  38. }
  39. break;
  40.  
  41.  
  42. case S_PREPARE_TO_STOP:
  43. setTrafficLight(4);
  44. if (timerHasExpired() == true)
  45. {
  46. startTimer(5000);
  47. changeStateTo(3);
  48. }
  49. break;
  50.  
  51.  
  52. case S_CARS_STOP:
  53. setTrafficLight(1);
  54. if (timerHasExpired() == true)
  55. {
  56. startTimer(1000);
  57. changeStateTo(4);
  58. }
  59. break;
  60.  
  61. case S_PREPARE_TO_DRIVE:
  62. setTrafficLight(2);
  63. if (timerHasExpired() == true)
  64. {
  65. changeStateTo(1);
  66. }
  67. break;
  68.  
  69. }
  70.  
  71. }
  72.  
  73.  
  74.  
  75. void setTrafficLight(int phase)
  76. {
  77.  
  78. switch (phase)
  79. {
  80. case 1: //S_CARS_STOP
  81. signalTrue(L0);
  82. signalFalse(L1);
  83. break;
  84.  
  85. case 2: //S_PREPARE_TO_DRIVE
  86. signalTrue(L0);
  87. signalTrue(L1);
  88. break;
  89.  
  90. case 3: // S_CARS_DRIVE
  91. signalFalse(L0);
  92. signalFalse(L1);
  93. break;
  94.  
  95. case 4: //S_PREPARE_TO_STOP
  96. signalFalse(L0);
  97. signalTrue(L1);
  98. break;
  99. }
  100. }
  101.  
  102. boolean timerHasExpired()
  103. {
  104. boolean hasExpired = false;
  105. if (millis() >= nextTimeout)
  106. {
  107. hasExpired = true;
  108. }
  109. else
  110. {
  111. hasExpired = false;
  112.  
  113. }
  114.  
  115. return hasExpired;
  116. }
  117. void startTimer(unsigned long timeout)
  118. {
  119. nextTimeout = millis() + timeout;
  120. }
  121.  
  122. boolean isButtonPressed(int button)
  123. {
  124. if (button == HIGH)
  125. {
  126. isItPressed = true;
  127. }
  128. else if (button == LOW)
  129. {
  130. isItPressed = false;
  131. }
  132. return isItPressed;
  133. }
  134.  
  135. void signalTrue(int pin)
  136. {
  137. digitalWrite(pin, HIGH);
  138. }
  139.  
  140. void signalFalse(int pin)
  141. {
  142. digitalWrite(pin, LOW);
  143. }
  144.  
  145. void printState(int state)
  146. {
  147. switch(state)
  148. {
  149. case S_CARS_DRIVE:
  150. Serial.print("S_CARS_DRIVE");
  151. break;
  152.  
  153. case S_PREPARE_TO_STOP:
  154. Serial.print("S_PREPARE_TO_STOP");
  155. break;
  156.  
  157. case S_CARS_STOP:
  158. Serial.print("S_CARS_STOP");
  159. break;
  160.  
  161. case S_PREPARE_TO_DRIVE:
  162. Serial.print("S_PREPARE_TO_DRIVE");
  163. break;
  164. }
  165.  
  166. }
  167.  
  168. void changeStateTo(int newState)
  169. {
  170. Serial.print("State changed from");
  171. printState(state);
  172. Serial.print(" to ");
  173. printState(newState);
  174. Serial.println();
  175. state = newState;
  176. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement