Hi, I'm new in Arduino, and I am not a native English speaker, so if I don't express well, please don't mind.
The requirement:
-
Prepare 10 LED lights and divide them into two groups of 5 lights in each group, red, yellow, and green are used as traffic lights to control the vehicles, and the other 2 lights: red and green are used as traffic lights to control pedestrians.
-
One group controls the East-West lane, and the other group control the North-South lane
-
The total time from red light to green light (or green light to red light) in each lane is 50 seconds. The time from yellow light to red light is set to 4 seconds
-
Traffic lights for pedestrian control shall flash quickly to remind pedestrians 10 seconds before the green light turns red
-
The start mechanism of traffic lights starts after the user presses the button. When the user presses the button again, the traffic lights will be turned off.
The circuit I am using is:
I need when I press the button, execute the condition(), and press again the condition() off.
But when I press the button, it doesn't work. the condition() still works whatever I press it or not. The content of condition() is that I need to control the LED light at different seconds.
I know my code has some bugs, I don't know how do I solve them...
Can anyone give me some suggestions for this?
the code I am using is:
#include "Timer.h"
Timer t1;
Timer t2;
const int Green1 = 13;
const int Green8 = 12;
const int Green6 = 11;
const int Green4 = 10;
const int Yellow9 = 9;
const int Yellow2 = 8;
const int Red10 = 7;
const int Red7 = 6;
const int BUTTON_PIN =2;
unsigned long myTime;
boolean buttonUp = true;
int buttonState = 0;
void setup() {
Serial.begin(9600);
pinMode(BUTTON_PIN, INPUT);
pinMode(Green1, OUTPUT);
pinMode(Green8 , OUTPUT);
pinMode(Green6, OUTPUT);
pinMode(Green4, OUTPUT);
pinMode(Yellow9, OUTPUT);
pinMode(Yellow2, OUTPUT);
pinMode(Red10, OUTPUT);
pinMode(Red7, OUTPUT);
}
void loop() {
Serial.print("Time: ");
myTime = millis();
Serial.println(myTime);
if(digitalRead(BUTTON_PIN)!= HIGH && buttonUp == true){
condition();
buttonUp == false;
}
else if(digitalRead(BUTTON_PIN) == HIGH &&buttonUp != true){
buttonUp == true;
}
t1.update();
t2.update();
}
void condition(){
if( myTime>0 && myTime < 46000){
digitalWrite(Green1,HIGH);
digitalWrite(Green6,HIGH);
digitalWrite(Red10,HIGH);
}
if(myTime > 40000 && myTime < 50000 ){
t1.oscillate(Green6, 200, LOW);
}
if(myTime > 46000&& myTime <=50000){
digitalWrite(Green1,LOW);
digitalWrite(Yellow2,HIGH);
}
if(myTime== 50000){
digitalWrite(Yellow2,LOW);
digitalWrite(Green6,LOW);
digitalWrite(Red10,LOW);
}
if(myTime > 50000 && myTime<96000 ){
digitalWrite(Green4,HIGH);
digitalWrite(Green8,HIGH);
digitalWrite(Red7,HIGH);
}
if(myTime>=90000 && myTime <100000 ){
t2.oscillate(Green4, 200, LOW);
}
if(myTime >=96000&& myTime <=100000 ){
digitalWrite(Green8,LOW);
digitalWrite(Yellow9,HIGH);
}
}