Go Down

Topic: Actualización del valor de variables calculadas. (Read 81 times) previous topic - next topic

jackman07

Hola, tengo un programa con varias globales definidas al inicio de programa y algunas el resultado de operaciones matemáticas de otras.

 
Code: [Select]
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.

Code: [Select]

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;   
    }
  }
 
     

surbyte

Para responderte nunca pongas un código parcializado. Siempre todo el código.
Quedo a la espera del mismo para poder responderte.

Go Up