Bom dia Galera!
estou desenvolvendo um programa pra acender luzes conforme uma sequencia e mudando a forma de piscar através de um botão apenas, porem quando vou mudar a sequencia e pressiono o botão, ele não muda, notei que só muda se eu pressionar somente ao finalizar a minha função que esta executando no momento. então conclui que o erro esta no fato que o void loop fica executando a função, e ele não escuta o pressionar do botão se estiver executando outra coisa, alguém sabe me dizer alguma forma de quando eu pressionar o botão, imediatamente ele pare a função que esta fazendo e execute a próxima?
segue meu código:
int led1 = 13;
int led2 = 12;
int led3 = 8;
int led4 = 7;
int buttonPin = 3;
int pressButton = 0;
int estado = 0;
void setup() {
Serial.begin(9600);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(buttonPin, INPUT);
}
void loop() {
Serial.println(estado);
pressButton = digitalRead(buttonPin);
escolha();
}
void escolha() {
if (pressButton == HIGH) {
estado++;
}
if (estado == 4) {
estado = 0;
delay(1000);
}
if (estado == 0) {
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
}
if (estado == 1) {
pisca1();
}
if (estado == 2) {
pisca2();
}
if (estado == 3) {
pisca3();
}
}
void pisca1() {
digitalWrite(led1, HIGH);
delay(500);
digitalWrite(led2, HIGH);
delay(500);
digitalWrite(led3, HIGH);
delay(500);
digitalWrite(led4, HIGH);
delay(300);
digitalWrite(led1, LOW);
delay(500);
digitalWrite(led2, LOW);
delay(500);
digitalWrite(led3, LOW);
delay(500);
digitalWrite(led4, LOW);
}
void pisca2() {
digitalWrite(led1, HIGH);
digitalWrite(led4, HIGH);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
delay(200);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
digitalWrite(led1, LOW);
digitalWrite(led4, LOW);
delay(200);
}
void pisca3() {
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
delay(200);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, HIGH);
digitalWrite(led4, HIGH);
delay(200);
}