Hola, tengo un programa con varias globales definidas al inicio de programa y algunas el resultado de operaciones matemáticas de otras.
byte Estacion = 1;
byte Fase = 1;
byte EstaFase = (Estacion*10)+Fase;
La cuestión es que después he generado una máquina de estados finitos para poder cambiar los valores mediante unos botones. El problema es que a pesar de que las variables iniciales sí cambian de valor, la variable calculada no, y siempre me muestra en la pantalla y en monitor el valor 11, a pesar de que Estación tenga un valor de 2, por ejemplo.
Entiendo que tengo que hacer algo para que actualice su valor. ¿Es así? ¿Cómo?
Muchas gracias de antemano por la ayuda-
Adjunto el código del loop por si fuera necesario.
void loop(){
switch(estado) {
case S_HOME:
if(flancoSubida(BTN_MENU)) { // Transición BTN_MENU
estado = S_DURACION_DIA; // Cambia el estado a "duración del día"
printDuracion();
break;
}
break;
case S_DURACION_DIA:
if(flancoSubida(BTN_MENU)) {
estado = S_NUMERO_DIAS;
printNumero();
break;
}
if(flancoSubida(BTN_EXIT)) {
estado = S_HOME;
printHome();
break;
}
if(flancoSubida(BTN_UP)) {
if(Tdia24<1000) { //valor máximo duración del día en segundos
Tdia24=Tdia24+100; //incrementa el valor
} else {
Tdia24 = 100; // vuelve a 100 si se sobrepasa el límite
}
printDuracion(); //muestra en la pantalla
break;
}
if(flancoSubida(BTN_DOWN)) { // Transición BTN_DWN
if(Tdia24> 100) {
Tdia24=Tdia24-100;
} else {
Tdia24 = 1000;
}
printDuracion();
break;
}
if(flancoSubida(BTN_START)) {
estado = S_ARRANQUE;
printArranque();
break;
}
break;
case S_NUMERO_DIAS:
if(flancoSubida(BTN_MENU)) {
estado = S_ESTACION;
printEstacion();
break;
}
if(flancoSubida(BTN_EXIT)) {
estado = S_HOME;
printHome();
break;
}
if(flancoSubida(BTN_UP)) {
if(Ndias<5) {
Ndias++;
} else {
Ndias = 1;
}
printNumero();
break;
}
if(flancoSubida(BTN_DOWN)) {
if(Ndias>1) {
Ndias--;
} else {
Ndias = 5;
}
printNumero();
break;
}
if(flancoSubida(BTN_START)) {
estado = S_ARRANQUE;
printArranque();
break;
}
break;
case S_ESTACION:
if(flancoSubida(BTN_MENU)) {
estado = S_FASE;
printFase();
break;
}
if(flancoSubida(BTN_EXIT)) {
estado = S_HOME;
printHome();
break;
}
if(flancoSubida(BTN_UP)) {
if(Estacion<4) {
Estacion++;
} else {
Estacion = 1;
}
printEstacion();
break;
}
if(flancoSubida(BTN_DOWN)) {
if(Estacion>1) {
Estacion--;
} else {
Estacion = 4;
}
printEstacion();
break;
}
if(flancoSubida(BTN_START)) {
estado = S_ARRANQUE;
printArranque();
break;
}
break;
case S_FASE:
if(flancoSubida(BTN_MENU)) {
estado = 1;
printDuracion();
break;
}
if(flancoSubida(BTN_EXIT)) {
estado = S_HOME;
printHome();
break;
}
if(flancoSubida(BTN_UP)) {
if(Fase<4) {
Fase++;
} else {
Fase = 1;
}
printFase();
break;
}
if(flancoSubida(BTN_DOWN)) {
if(Fase>1) {
Fase--;
} else {
Fase = 4;
}
printFase();
break;
}
if(flancoSubida(BTN_START)) {
estado = S_ARRANQUE;
//printArranque();
break;
}
break;
case S_ARRANQUE:
if (EstaFase == 21) {
PA();
break;
}
if (EstaFase == 12) {
PD();
break;
}
if (EstaFase == 13) {
PT();
break;
}
if (EstaFase == 14) {
PN();
break;
}
/* if(flancoSubida(BTN_EXIT)) { // si elimino esta transición bloqueo el paso al menú inicial durante el arranque
estado = S_HOME;
printHome();
break;
*/
break;
}
}