I'm new to Arduino and today I have a problem with this code:
int led_1 = 10;
int led_2 = 11;
int led_3 = 12;
int button = 3;
int time = 0;
byte val = 0;
void setup() {
// put your setup code here, to run once:
pinMode(led_1, OUTPUT);
pinMode(led_2, OUTPUT);
pinMode(led_3, OUTPUT);
pinMode(button, INPUT);
}
void loop() {
// put your main code here, to run repeatedly:
val = digitalRead(button);
if (val == HIGH){
time = millis();
while (digitalRead(button) == HIGH) {
if (millis() - time < 1000) {digitalWrite(led_1, HIGH);}
else if (millis() -time > 1000 && millis()-time <2000) {digitalWrite(led_2, HIGH);}
else if (millis()-time >2000) {digitalWrite(led_3, HIGH);}
}
} else {
time =0;
digitalWrite(led_1, LOW);
digitalWrite(led_2, LOW);
digitalWrite(led_3, LOW);
}
}
The code should work like this: If I press the button less than one second, led_1
will turn on. If I press it between one and two seconds, led_2
will turn on; and if I press the button more than 2 seconds, led_3
will turn on. If I don't press a button, the LEDs remain off. The time
variable is used to take the time when I start to press the button and then the control millis()- time
should give how long I press the button.
It works for a while, then after a random time (I think) if I push the button, only the led_3
turns on. Why?
casual
?unsigned long time = 0;
instead. What I also see, is that led 1 remains on, even if the button is pressed for more that one second. Idem for led 2 after two seconds.