Problema Codigo


buenas tardes, estoy desarrollando un codigo en arduino uno, y tengo un problema que estoy intentado solucionar pero no lo consigo, es el siguiente:

    estoy intentando desallorar un menu, pero la hora de ejecutar el codigo y abrir el monitor serial, el mensaje me aparece ciclicamente, es decir, no soy capaz de hacer que el programa se que esperando que teclee una de las opciones.es decir, que me aparezca el menu una sola vez, si no que me aparece constantemente.

les incluyo la parte del codigo donde creo que hay que modificar algo, pero no ha sido capaz de encontrar ningun ejemplo en la web:

code: [select]


    serial.println("para calibrar las celdas pulse 1, 2, 3 o 4:");
 
    char temp=serial.read();
    if(serial.available())
    {
   
      char temp2;
     
      ////// entramos en la calibracion de la celda 1///////
      if(temp == '1')
      {
          serial.println("calibrando celda 1:");
          e='1';
       
          while(e!='0')
          {
           
              if(serial.available())
              {
                serial.print("\t leyendo celda 1:");
                serial.print(celda1.get_units(), 1);
                serial.print(" gramos"); //cambie esta kg y volver ajustar el factor de calibración si se siguen las unidades del si como una persona sana
                serial.print(" || factor de calibracion: ");
                serial.println(calibration_factor1);
                serial.println("para guardar el factor pulse y:");
                serial.println(" para salir pulse 0");
                temp2= serial.read();
                if(temp2 == '+')
                  calibration_factor1 += 1;
                else if(temp2 == '-')
                  calibration_factor1 -= 1;
                else if(temp2 == '0')   //para salir del bucle while///
                  {
                    e='0';
                  }
                else if(temp2 == 'y' || temp2 == 'y')
                  {
                     eepromwritelong(direccion_celda1, calibration_factor1);  //guardar valor en            eeprom interna
                     //direccion += 4;
                     serial.println("factor guardado:");
                     factor1=(eepromreadlong(0));
                     serial.println(factor1);
                 
                  }
              }
             
             delay(1000);
        }
        serial.flush();
     }

primero el monitor serie del ide no permite el carriadge return por mas que lo diga yo no podido.
usa programas terminales como termite  realterm u otro
verás que si pones y usas cosas asi.
en lugar de solo poner

serial.print("\t leyendo celda 1:");
serial.print(celda1.get_units(), 1);
usa
code: [select]
char buf[40];

sprintf( buf, "\t leyendo celda 1: %1d\r\n", celda1.get_units);
serial.print(buf);


si celda1.get_units es float
tienes que usar una función que convierte un float en cadena de caracteres como lo es
dtostrf y lo usas asi

code: [select]
static float f_val = 123.6794;
static char outstr[15];

void setup() {
  dtostrf(f_val,7, 3, outstr);

  serial.begin(9600);
  serial.println(outstr);
}

void loop(){
}


Arduino Forum > International > Español > Software (Moderators: surbyte, Hector_A) > Problema Codigo


arduino

Comments

Popular posts from this blog

Valutazione Template - Joomla! Forum - community, help and support

SD Datastring Convention

First use of Arduino Uno : avrdude error on Blink uploading