Boa noite, amigos estou tendo uma problema parecido!
tenho alguns motores pra ligar, e uso um display i2c com menu vertical com 6 topicos:
–ligar motorA
–ligar motorB
–ligar motorC
–ligar motorD
–Pausa de 15 minutos
–Desligar Motores
Todas funcionam menos a pausa de 15 minutos, pois preciso que os motores que estiverem ligados no momento da pausa apos os 15 minutos retornem a seu estado de HIGH.
Ja tentei diversas formas mas sem sucesso!
segue abaixo codigo:
Tudo na action 5 as alteraçoes
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int interruptPin = 2;
int upButton = 5;
int downButton = 3;
int selectButton = 4;
int bomba = 12;
int ledgreen = 8;
int ledred = 9;
int ledblue = 10;
int ledye = 11;
int ledpausa = 13;
int menu = 1;
void setup() {
lcd.init();
lcd.backlight();
pinMode(bomba, OUTPUT);
pinMode(ledgreen, OUTPUT);
pinMode(ledpausa, OUTPUT);
pinMode(ledred, OUTPUT);
pinMode(ledye, OUTPUT);
pinMode(ledblue, OUTPUT);
pinMode(upButton, INPUT_PULLUP);
pinMode(downButton, INPUT_PULLUP);
pinMode(selectButton, INPUT_PULLUP);
updateMenu();
}
void loop() {
if (!digitalRead(downButton)) {
menu++;
updateMenu();
delay(100);
while (!digitalRead(downButton));
}
if (!digitalRead(upButton)) {
menu–;
updateMenu();
delay(100);
while (!digitalRead(upButton));
}
if (!digitalRead(selectButton)) {
executeAction();
updateMenu();
delay(100);
while (!digitalRead(selectButton));
}
}
void updateMenu() {
switch (menu) {
case 0:
menu = 1;
break;
case 1:
lcd.clear();
lcd.print(">Led Verde");
lcd.setCursor(0, 1);
lcd.print(" Led Vermelho");
break;
case 2:
lcd.clear();
lcd.print(" Led Verde");
lcd.setCursor(0, 1);
lcd.print(">Led Vermelho");
break;
case 3:
lcd.clear();
lcd.print(">Led Azul");
lcd.setCursor(0, 1);
lcd.print(" Led Amarelo");
break;
case 4:
lcd.clear();
lcd.print(" Led Azul");
lcd.setCursor(0, 1);
lcd.print(">Led Amarelo");
break;
case 5:
lcd.clear();
lcd.print(">Pausa Alimento");
lcd.setCursor(0, 1);
lcd.print(" Desligar Tudo");
break;
case 6:
lcd.clear();
lcd.print(" Pausa Alimento");
lcd.setCursor(0, 1);
lcd.print(">Desligar Tudo");
break;
case 7:
lcd.clear();
lcd.print(">MenuItem7");
lcd.setCursor(0, 1);
lcd.print(" MenuItem8");
break;
case 8:
lcd.clear();
lcd.print(" MenuItem7");
lcd.setCursor(0, 1);
lcd.print(">MenuItem8");
break;
case 9:
menu = 8;
break;
}
}
void executeAction() {
switch (menu) {
case 1:
action1();
break;
case 2:
action2();
break;
case 3:
action3();
break;
case 4:
action4();
break;
case 5:
action5();
break;
case 6:
action6();
break;
case 7:
action7();
break;
case 8:
action8();
break;
}
}
void action1() {
lcd.clear();
lcd.print(">Ligar Verde");
digitalWrite(bomba, HIGH);
digitalWrite(ledgreen, HIGH);
digitalWrite(ledpausa, LOW);
delay(1500);
}
void action2() {
lcd.clear();
lcd.print(">Ligar Vermelho");
// digitalWrite(bomba, LOW);
// digitalWrite(ledgreen, LOW);
digitalWrite(ledred, HIGH);
digitalWrite(ledpausa, LOW);
delay(1500);
}
void action3() {
lcd.clear();
lcd.print(">Ligar Azul");
digitalWrite(ledblue, HIGH);
digitalWrite(ledpausa, LOW);
delay(1500);
}
void action4() {
lcd.clear();
lcd.print(">Ligar Amarelo");
digitalWrite(ledye, HIGH);
digitalWrite(ledpausa, LOW);
delay(1500);
}
//void action5() {
// lcd.clear();
// lcd.print(">Pausa de 15 Min");
// digitalWrite(bomba, HIGH);
// digitalWrite(ledgreen, HIGH);
// digitalWrite(ledye, HIGH);
// digitalWrite(ledblue, HIGH);
// digitalWrite(ledred, HIGH);
// digitalWrite(ledpausa, !digitalRead(ledpausa));
// digitalWrite(ledgreen, !digitalRead(ledgreen));
// digitalWrite(ledblue, !digitalRead(ledblue));
// digitalWrite(ledred, !digitalRead(ledred));
// digitalWrite(ledye, !digitalRead(ledye));
// digitalWrite(bomba, !digitalRead(bomba));
// delay(12000);
// digitalWrite(ledpausa, !digitalRead(ledpausa));
// digitalWrite(ledgreen, !digitalRead(ledgreen));
// digitalWrite(ledblue, !digitalRead(ledblue));
// digitalWrite(ledred, !digitalRead(ledred));
// digitalWrite(ledye, !digitalRead(ledye));
// digitalWrite(bomba, !digitalRead(bomba));
//
//
//}
void action5() {
lcd.clear();
lcd.print(">Pausa de 15 Min");
if (digitalRead(bomba) == HIGH){
int x = 2;
}
delay(12000);
if(x ==2){
digitalWrite(bomba,HIGH)}
}
void action6() {
lcd.clear();
lcd.print(">Desligar Todos");
digitalWrite(ledpausa, LOW);
digitalWrite(ledgreen, LOW);
digitalWrite(ledblue, LOW);
digitalWrite(ledred, LOW);
digitalWrite(ledye, LOW);
digitalWrite(bomba, LOW);
delay(1500);
}
void action7() {
lcd.clear();
lcd.print(">Executing #7");
delay(1500);
}
void action8() {
lcd.clear();
lcd.print(">Executing #8");
digitalWrite(ledblue, HIGH);
delay(1500);
}