Explico el proceso.
Tengo 3 botones.
pin22 = +10
pin24 = +50
pin26 = +100
Cada que presiono estos botones, va sumando una variable de nombre meta.
Puedo resetear la variable, y presionar el botón de arranque; solamente si el valor es diferente de 0.
Quiero que el controlador vaya por paso o etapas, así que elegí la opción de Enum
#include <LiquidCrystal.h>
LiquidCrystal lcd (7, 6, 5, 4, 3, 2); // cambié pin 12 por 7 & pin 11 por 6
enum {Stg1, Stg2, Stg3, Stg4};
unsigned char Estado=0;
//Estados de la máquina = 4
//Stg1 Menú para ingresar META.
//Stg2 Arranque
//Stg3 Paro solicitado por usuario, pero aún queda número en META.
//Stg4 Finalizado. No queda número en cuenta y regresamos a Stg1.
Veo que si entra al primer paso y realiza lo que en él está. Pero al cambiar al siguiente paso el controlador no realiza la secuencia. (Quizá nunca entra al paso 2 o stage 2).
Para intercambiar entre estados uso una variable flag que inicializo en 0.
Y conforme voy entrando a cada paso, voy sumando flag + 1 para avanzar al siguiente stage.
El siguiente código lo hace a a perfección, pero no logro brincar a los stages subsecuentes.
void loop() {
// put your main code here, to run repeatedly:
Serial.print("Etapa del proceso: ");
Serial.println(Estado);
Serial.print("Bandera ");
Serial.println(flag);
Serial.print("Arranque ");
Serial.println(reading22);
//delay(300);
if (flag==0){
Estado=Stg1;
}
if (flag==1){
Estado=Stg2;
}
if (flag==2){
Estado=Stg3;
}
switch (Estado) {
case Stg1: //flag0
//+10 PIN 32
int reading32 = digitalRead(diez);
if (reading32 != lastButtonState32) {
// reset the debouncing timer
lastDebounceTime32 = millis();
}
if ((millis() - lastDebounceTime32) > debounceDelay32) {
if (reading32 != buttonState32) {
buttonState32 = reading32;
if (buttonState32 == HIGH) {
ledState32 = !ledState32;
meta=meta+10; //variable dobladora
}
}
}
//+50 PIN 34
int reading34 = digitalRead(cincuenta);
if (reading34 != lastButtonState34) {
// reset the debouncing timer
lastDebounceTime34 = millis();
}
if ((millis() - lastDebounceTime34) > debounceDelay34) {
if (reading34 != buttonState34) {
buttonState34 = reading34;
if (buttonState34 == HIGH) {
ledState34 = !ledState34;
meta=meta+50; //variable dobladora
}
}
}
//+100 PIN 36
int reading36 = digitalRead(cien);
if (reading36 != lastButtonState36) {
// reset the debouncing timer
lastDebounceTime36 = millis();
}
if ((millis() - lastDebounceTime36) > debounceDelay36) {
if (reading36 != buttonState36) {
buttonState36 = reading36;
if (buttonState36 == HIGH) {
ledState36 = !ledState36;
meta=meta+100; //variable dobladora
}
}
}
//Arranque PIN 22
int reading22= digitalRead(arranque);
if (reading22 != lastButtonState22) {
// reset the debouncing timer
lastDebounceTime22 = millis();
}
if ((millis() - lastDebounceTime22) > debounceDelay22) {
if (reading22 != buttonState22) {
buttonState22 = reading22;
if (buttonState22 == HIGH) {
if (meta!=0) {
ledState22 = !ledState22;
lcd.clear();
lcd.setCursor(3,0);
lcd.print("ARRANQUE");
delay(1000);
lcd.clear();
flag = 1; //
Estado = Stg2; // Avance al siguiente estado
}
}
}
}
//RESET PIN 26
int reading26= digitalRead(reset);
if (reading26 != lastButtonState26) {
// reset the debouncing timer
lastDebounceTime26 = millis();
}
if ((millis() - lastDebounceTime26) > debounceDelay26) {
if (reading26 != buttonState26) {
buttonState26 = reading26;
if (buttonState26 == HIGH) {
ledState26 = !ledState26;
lcd.clear();
meta=0; //variable dobladora
}
}
}
// set the LED:
//digitalWrite(ledPin, ledState32);
lastButtonState22 = reading22;
lastButtonState24 = reading24;
lastButtonState26 = reading26;
lastButtonState32 = reading32;
lastButtonState34 = reading34;
lastButtonState36 = reading36;
lcd.setCursor(0,0);
lcd.print("META:");
// se imprime la variable
lcd.setCursor(12,0);
lcd.print(meta);
lcd.setCursor(0,1);
lcd.print("Cuenta:");
//lcd.print(porcentaje); se imprime la variable
// se imprime la variable
lcd.setCursor(12,1);
lcd.print(cuenta);
break; //termina Stg1
No sé si no estoy tomando en cuenta algo.
Espero que me puedan ayudar.
Mil gracias.