Hi, I'm new to the arduino world and I'm working on my current project. I got all of my coding's working but the problem is my switch. After void setup, the coding will go to void loop right? Before starting the void loop, I ask for the input of my switch but my problem now is i have to long-press my switch button to make the input HIGH. if I press it only once, it won't read my switch input. Yes I did find on how the button can act like a toggle switch. But using that coding, my traffic light won't move smoothly, it stop to get the input from the switch. I hope you guys can help me with this one.
int carRed1 = 3; //car lights being assigned
int carYellow1 = 4;
int carGreen1 = 5;
int carRed2 = 6;
int carYellow2 = 7;
int carGreen2 = 8;
int carRed3 = 9;
int carYellow3 = 10;
int carGreen3 = 11;
int pedRed = 12; //ped lights being assigned
int pedGreen = 13;
int button = 2; // button pin
int crossTime = 5000; //crossing time given to pedestrians
int var;
unsigned long changeTime ; // collects the time since the button was last pressed
int state;
void setup () {
pinMode(carRed1, OUTPUT);
pinMode(carYellow1, OUTPUT);
pinMode(carGreen1, OUTPUT);
pinMode(pedRed, OUTPUT);
pinMode(pedGreen, OUTPUT);
pinMode(carRed2, OUTPUT);
pinMode(carYellow2, OUTPUT);
pinMode(carGreen2, OUTPUT);
pinMode(carRed3, OUTPUT);
pinMode(carYellow3, OUTPUT);
pinMode(carGreen3, OUTPUT);
pinMode(button, INPUT);
digitalWrite(carGreen1,HIGH); //start with green car light on
digitalWrite(pedRed, HIGH); //start with red ped light on
}
void loop(){
// read the state of the pushbutton value:
state = digitalRead(button);
if(state==HIGH && (millis() - changeTime) >5000) {
Serial.println("pressed");
delay(10000);
changeLights();
}
if(state== LOW && (millis() - changeTime) >5000) {
Serial.println("released");
normalLights();
}
}
void normalLights(){
digitalWrite(carGreen1,HIGH);
digitalWrite(carRed2,HIGH); //start with green car light on
digitalWrite(carRed3,HIGH); //start with green car light on
delay(2000);
digitalWrite(carYellow1, HIGH);
digitalWrite(carGreen1, LOW);
delay(3000);
digitalWrite(carGreen2,HIGH); //start with green car light on
digitalWrite(pedRed, HIGH); //start with red ped light on
digitalWrite(carRed1,HIGH); //start with green car light on
digitalWrite(carYellow1,LOW);
digitalWrite(carRed2,LOW);
digitalWrite(carRed3,HIGH); //start with green car light on
delay(7000);
digitalWrite(carYellow2, HIGH);
digitalWrite(carGreen2, LOW);
delay(3000);
digitalWrite(carGreen3,HIGH); //start with green car light on
digitalWrite(pedRed, HIGH); //start with red ped light on
digitalWrite(carRed1,HIGH); //start with green car light on
digitalWrite(carYellow2,LOW);
digitalWrite(carRed2,HIGH);
digitalWrite(carRed3,LOW); //start with green car light on
delay(7000);
digitalWrite(carGreen3, LOW);
digitalWrite(carYellow3, HIGH);
delay(3000);
digitalWrite(carRed3, HIGH);
digitalWrite(carYellow3,LOW);
delay(8000);
}
void changeLights() {
digitalWrite(carRed3, HIGH);
digitalWrite(carGreen1,LOW); //green car light off
digitalWrite(carYellow1,HIGH); // yellow car light on
digitalWrite(carGreen2,LOW); //green car light off
digitalWrite(carGreen3,LOW); //green car light off
delay(2000); //wait 2 seconds
digitalWrite(carYellow1,LOW); // yellow car light off
digitalWrite(carRed1,HIGH); //red car light on
digitalWrite(carYellow2,LOW); // yellow car light off
digitalWrite(carRed2,HIGH);
digitalWrite(carYellow3,LOW); // yellow car light off
digitalWrite(carRed3,HIGH);
delay(1000); //wait 1 second to turn on ped light
digitalWrite(pedRed,LOW); //red ped light off
digitalWrite(pedGreen,HIGH); //green ped light on. allow crossing
delay(crossTime); //delay preset time of 5 seconds
//flashing of ped green light
for (int x=0; x<10; x++){
digitalWrite(pedGreen,HIGH);
delay(250);
digitalWrite(pedGreen,LOW);
delay(250);
}
digitalWrite(pedRed, HIGH); //turn red ped light on
digitalWrite(carRed1, LOW);
delay(100);
digitalWrite(carGreen1,HIGH); //car green light on
digitalWrite(carRed1,LOW); //car red light off
setup;
changeTime = millis(); //record time since last lights change
}
sketch_oct26b.ino (3.68 KB)