- int carRed = 12;
- int carYellow = 11;
- int carGreen = 10;
- int pedRed = 9;
- int pedGreen = 8;
- int button = 2;
- int crossTime = 5000;
- int delayTime = 2999;
- unsigned long previousMillis = 0;
- int request = 0;
- int allLights[] = {
- 12 , 11, 10, 9 ,8};
- // carGreen pedGreen
- int carsGo[] = {
- 10, 9};
- // carYellow pedGreen
- int carsWait[] = {
- 11, 9};
- // carRed pedRed
- int carsStop[] = {
- 12, 9};
- // carRed pedGreen
- int pedsGo[] = {
- 12, 8};
- void setup() {
- pinMode(carRed, OUTPUT);
- pinMode(carYellow, OUTPUT);
- pinMode(carGreen, OUTPUT);
- pinMode(pedRed, OUTPUT);
- pinMode(pedGreen, OUTPUT);
- pinMode(button, INPUT);
- digitalWrite(carGreen, HIGH);
- digitalWrite(pedRed, HIGH);
- Serial.begin(9600);
- }
- void loop(){
- normalLights();
- checkCrossingRequest();
- lightsCheck();
- }
- void allLightsOff(){
- for(int i = 0 ; i < 5; i++){
- digitalWrite(allLights[i], LOW);
- }
- }
- void buttonPushed(){
- delay(500);
- allLightsOff();
- digitalWrite(pedRed, HIGH);
- digitalWrite(carYellow , HIGH);
- delay(1000);
- allLightsOff();
- digitalWrite(pedRed, HIGH);
- digitalWrite(carRed, HIGH);
- delay(1000);
- digitalWrite(pedRed, LOW);
- digitalWrite(pedGreen, HIGH);
- delay(crossTime);
- for (int x=0; x<10; x++) {
- digitalWrite(pedGreen, HIGH);
- delay(250);
- digitalWrite(pedGreen, LOW);
- delay(250);
- }
- allLightsOff();
- digitalWrite(pedRed, HIGH);
- digitalWrite(carGreen, HIGH);
- previousMillis = millis()+delayTime;
- }
- void normalLights(){
- unsigned long currentMillis = millis();
- if(currentMillis - previousMillis == delayTime) {
- digitalWrite(carRed, LOW);
- digitalWrite(carGreen, HIGH);
- }
- else if(currentMillis - previousMillis == (delayTime*2)+1){
- digitalWrite(carGreen, LOW);
- digitalWrite(carYellow, HIGH);
- }
- else if(currentMillis - previousMillis == (delayTime*3)+2){
- digitalWrite(carYellow, LOW);
- digitalWrite(carRed, HIGH);
- }
- else if(currentMillis - previousMillis == (delayTime*4)-delayTime/2){
- previousMillis = currentMillis;
- }
- }
- int checkCrossingRequest(){
- int val = digitalRead(button);
- if (val == HIGH) {
- return 1;
- }
- else{
- return 0;
- }
- }
- void lightsCheck(){
- request = checkCrossingRequest();
- if (request > 0) {
- buttonPushed();
- }
- }