/* Traffic Light with stop request This example code is in the public domain. made by @syxanash on 24/05/2012 */ // defining some notes #define NOTE4 262 #define NOTE5 523 #define NOTE6 784 int speaker = 3; // delays for the traffic lights transitions int delays[] = { 4000, 2000 }; int leds[] = { 10, 11, 12, 12, 10 }; int leds2[] = { 9, 9, 7, 8, 9 }; int stoprequest = 2; int stopflagled = 4; void setup() { Serial.begin(9600); pinMode(12, OUTPUT); pinMode(11, OUTPUT); pinMode(10, OUTPUT); pinMode(7, OUTPUT); pinMode(8, OUTPUT); pinMode(9, OUTPUT); pinMode(stopflagled, OUTPUT); pinMode(speaker, OUTPUT); pinMode(stoprequest, INPUT); digitalWrite(stoprequest, HIGH); } // function which checks the request made by the pedestrian boolean checkrequest (boolean flag) { if ( digitalRead( stoprequest ) == LOW && flag != true ) { flag = true; // turn on a check led digitalWrite(stopflagled, HIGH); // and print into serial port a notification Serial.println( "A pedestrian pushed a stop request" ); // makes also a pretty nice sound notification tone(speaker,NOTE4,0); delay(100); tone(speaker,NOTE5,0); delay(100); tone(speaker,NOTE6,0); delay(100); noTone(speaker); } return flag; } void loop() { boolean flag = false; for ( int i = 0; i < 5; i++ ) { flag = checkrequest( flag ); digitalWrite(leds[i], HIGH); digitalWrite(leds2[i], HIGH); Serial.print("Pedestrian: "); Serial.println( leds[i] ); Serial.print("Vehicles: "); Serial.println( leds2[i] ); // if the pedestrian pushed a stop request the delay // decrements of 1 second, else it makes a standard delay if ( flag == true && leds[i] == 12 ) { delay(1000); } else { delay(delays[i % 2]); } digitalWrite(leds2[i], LOW); digitalWrite(leds[i], LOW); } // turn off the check led for the stop request digitalWrite(stopflagled, LOW); }