Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const int BTN_PIN = 4;
- const int L0 = 9;
- const int L1 = 10;
- const int S_CARS_DRIVE = 1;
- const int S_PREPARE_TO_STOP = 2;
- const int S_CARS_STOP = 3;
- const int S_PREPARE_TO_DRIVE = 4;
- int state = S_CARS_DRIVE;
- unsigned long nextTimeout;
- int buttonState;
- int hasExpired;
- int isItPressed;
- void setup()
- {
- Serial.begin(9600);
- pinMode(BTN_PIN, INPUT);
- pinMode(L0, OUTPUT);
- pinMode(L1, OUTPUT);
- }
- void loop()
- {
- buttonState = digitalRead(BTN_PIN);
- switch(state)
- {
- case S_CARS_DRIVE:
- setTrafficLight(3);
- if (isButtonPressed(buttonState) == true)
- {
- startTimer (2000);
- changeStateTo(2);
- }
- break;
- case S_PREPARE_TO_STOP:
- setTrafficLight(4);
- if (timerHasExpired() == true)
- {
- startTimer(5000);
- changeStateTo(3);
- }
- break;
- case S_CARS_STOP:
- setTrafficLight(1);
- if (timerHasExpired() == true)
- {
- startTimer(1000);
- changeStateTo(4);
- }
- break;
- case S_PREPARE_TO_DRIVE:
- setTrafficLight(2);
- if (timerHasExpired() == true)
- {
- changeStateTo(1);
- }
- break;
- }
- }
- void setTrafficLight(int phase)
- {
- switch (phase)
- {
- case 1: //S_CARS_STOP
- signalTrue(L0);
- signalFalse(L1);
- break;
- case 2: //S_PREPARE_TO_DRIVE
- signalTrue(L0);
- signalTrue(L1);
- break;
- case 3: // S_CARS_DRIVE
- signalFalse(L0);
- signalFalse(L1);
- break;
- case 4: //S_PREPARE_TO_STOP
- signalFalse(L0);
- signalTrue(L1);
- break;
- }
- }
- boolean timerHasExpired()
- {
- boolean hasExpired = false;
- if (millis() >= nextTimeout)
- {
- hasExpired = true;
- }
- else
- {
- hasExpired = false;
- }
- return hasExpired;
- }
- void startTimer(unsigned long timeout)
- {
- nextTimeout = millis() + timeout;
- }
- boolean isButtonPressed(int button)
- {
- if (button == HIGH)
- {
- isItPressed = true;
- }
- else if (button == LOW)
- {
- isItPressed = false;
- }
- return isItPressed;
- }
- void signalTrue(int pin)
- {
- digitalWrite(pin, HIGH);
- }
- void signalFalse(int pin)
- {
- digitalWrite(pin, LOW);
- }
- void printState(int state)
- {
- switch(state)
- {
- case S_CARS_DRIVE:
- Serial.print("S_CARS_DRIVE");
- break;
- case S_PREPARE_TO_STOP:
- Serial.print("S_PREPARE_TO_STOP");
- break;
- case S_CARS_STOP:
- Serial.print("S_CARS_STOP");
- break;
- case S_PREPARE_TO_DRIVE:
- Serial.print("S_PREPARE_TO_DRIVE");
- break;
- }
- }
- void changeStateTo(int newState)
- {
- Serial.print("State changed from");
- printState(state);
- Serial.print(" to ");
- printState(newState);
- Serial.println();
- state = newState;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement