estou tentendo executar esse codigo ate a tarrefa 2 ele funciona apartir da 3 da erro por favor me ajudem
coqueteleira - Wokwi ESP32, STM32, Arduino Simulator esse link tem a simulação
o objetivo équandocoloca credito libera umasaida quando aciona o botao da saida diminui o credito porem se colocar mais de um botão da erro
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
//Leitura do pino de sinal do moedeiro na entrada 12
#define moedeiro A0
//Variáveis para a contagem de milissegundos
unsigned long millisTarefa1 = millis();
unsigned long millisTarefa2 = millis();
LiquidCrystal_I2C lcd(0x27 ,16,2);
//Variáveis globais
int credito = 0;
int botao_start2=2;
int contador3=3;
int saida3=3;
int botao_start4=4;
int contador5=5;
int saida5=5;
int flag;
int fita_de_leds=A1;
void setup() {
Serial.begin (9600);
lcd.begin(16,2);
lcd.setCursor(0,0);
lcd.print("Coloque moeda");
delay(2000);
pinMode(botao_start2, INPUT_PULLUP);
pinMode(saida3, OUTPUT);
pinMode(botao_start4, INPUT_PULLUP);
pinMode(saida5, OUTPUT);
pinMode(moedeiro, INPUT_PULLUP);
pinMode(fita_de_leds, OUTPUT);
Serial.println ("Inicializado!");
}
void loop(){
// Executa tarefa 1
tarefa1();
// Executa tarefa 2
tarefa2();
tarefa3();
}
void tarefa1(){
if((millis() - millisTarefa1) < 200){
// Acende o fita_de_leds
if(credito==0){
digitalWrite(fita_de_leds, LOW);}
}else{
// Apaga o fita_de_leds
digitalWrite(fita_de_leds, HIGH);
}
// Verifica se já passou 400 milisegundos
if((millis() - millisTarefa1) > 400){
millisTarefa1 = millis();
}
}
void tarefa2(){
// Verifica se já passou 50 milisegundos
if((millis() - millisTarefa2) < 50){
//Se detectar pulso do moedeiro, aumenta o crédito e exibe no LCD
if (!digitalRead(moedeiro)) {
credito++;
lcd.clear();
lcd.print("Credito: ");
lcd.print(credito);
Serial.print ("Moedas = ");
Serial.println (credito);
delay(500);
}
//Se apertar botão start, diminui um crédito e inicia contagem
botao_start2=digitalRead(2);
if(botao_start2==LOW && credito>0){
credito--;
contador3=3; //contagem de tempo
flag=1;
while(flag==1){
contagem();
}
delay(100);
}
//Atualiza no LCD o crédito
lcd.setCursor(0,0);
lcd.print("Credito: ");
lcd.print(credito);
lcd.print(" ");
}
// Verifica se já passou 100 milisegundos
if((millis() - millisTarefa2) > 100){
millisTarefa2 = millis();
}
}
void contagem(){
//Ativa a saída
digitalWrite(saida3, HIGH);
//Inicia a contagem decrescente
contador3--;
lcd.setCursor(0,1);
lcd.print("tempo: ");
lcd.print("00:");
//Adiciona "0" se o número for menor que 10
if(contador3<10){
lcd.print("0");
}
lcd.print(contador3);
delay(1000);
//Quando o contador zerar, muda a flag, zera contador e desliga saída
if(contador3<= 0){
flag=0;
contador3=0;
digitalWrite(saida3, LOW);
delay(1000);
lcd.clear();
}
}
void tarefa3(){
//Se apertar botão start, diminui um crédito e inicia contagem
botao_start4=digitalRead(4);
if(botao_start4==LOW && credito>0){
credito--;
contador5=3; //contagem de tempo
flag=1;
while(flag==1){
contagem();
}
delay(100);
}
//Atualiza no LCD o crédito
lcd.setCursor(0,0);
lcd.print("Credito: ");
lcd.print(credito);
lcd.print(" ");
}
// Verifica se já passou 100 milisegundos
if((millis() - millisTarefa3) > 100){
millisTarefa2 = millis();
}
}
void contagem5(){
//Ativa a saída
digitalWrite(saida5, HIGH);
//Inicia a contagem decrescente
contador5--;
lcd.setCursor(0,1);
lcd.print("tempo: ");
lcd.print("00:");
//Adiciona "0" se o número for menor que 10
if(contador5<10){
lcd.print("0");
}
lcd.print(contador5);
delay(1000);
//Quando o contador zerar, muda a flag, zera contador e desliga saída
if(contador5<= 0){
flag=0;
contador5=0;
digitalWrite(saida3, LOW);
delay(1000);
lcd.clear();
}
}