Error en comparación de valores numéricos desde el buffer


hola, tengo un código muy simple, pero se comporta de una manera que no tiene lógica, y ya no se si es problema mio o del arduino, me explico.

tengo un programita en c# que carga un buffer y lo envía al arduino mediante el usb com, el arduino lo procesa y dependiendo de ciertos valores del buffer muestra en un display tm1368 unos mensajes u otros, hasta aquí todo bien, pero al parecer funciona bien en unos casos y no en otros.

este es mi buffer:



el cual envío de esta manera al com (código c#)

code: [select]

serialport puertoserie;

byte[] buffer;

byte[] buffer = new byte[34];

puertoserie = new serialport("com3", 9600, parity.none, 8);

puertoserie.open();

puertoserie.write(buffer, 0, 34);

puertoserie.close();


y en el sckecth tengo esto:

code: [select]
#include <tm1638.h>
#include <stdlib.h>

const int data_pin = 5;
const int clock_pin = 6;
const int strobe_pin = 7;

string flatmessage, tyremesage;
byte values[34];
const int trama_length = 34;
const int wear_limit = 40;
byte tramaserie[trama_length];
short int puntero;
boolean printwear, printflat;

tm1638 module(data_pin, clock_pin, strobe_pin);

void setup() {
  serial.begin(9600);
}

void loop()
{
  readserial();
 
  modoauto(); 
}

void modoauto()
{
  flatmessage = "flat";
  tyremesage = "tyre";
  printwear = false;
  printflat = false;

  muestraotrosvalores();
 
  tyremanagement();
}

void readserial()
{
  if (serial.available() > 0)
  {
    if (serial.available() > trama_length)
    {
      puntero = 0;
      memset(tramaserie, 0, sizeof(tramaserie));
      tramaserie[puntero] = serial.read();
      if (tramaserie[puntero] == 0xff)
      {
        (puntero = 1; puntero < trama_length; puntero++)
        {
          tramaserie[puntero] = serial.read();
        }
      }
    }
  }
}

void muestraotrosvalores()
{
//aquí muestro otra información, en principio esto si funciona.
}

void tyremanagement()
{
  if (tramaserie[10] == wear_limit)
  {
    tyremesage.concat("1");
    printwear = true;
  }

  if (tramaserie[11] == wear_limit)
  {
    tyremesage.concat("2");
    printwear = true;
  }

  if (tramaserie[12] == wear_limit)
  {
    tyremesage.concat("3");
    printwear = true;
  }

  if (tramaserie[13] == wear_limit)
  {
    tyremesage.concat("4");
    printwear = true;
  }

  if (printwear == true)
  {
    printmessage(tyremesage);
    printwear = false;
  }

  if (tramaserie[14] == 1)
  {
    printflat = true;
    flatmessage.concat("1");
  }

  if (tramaserie[15] == 1)
  {
    printflat = true;
    flatmessage.concat("2");
  }

  if (tramaserie[16] == 1)
  {
    printflat = true;
    flatmessage.concat("3");
  }

  if (tramaserie[17] == 1)
  {
    printflat = true;
    flatmessage.concat("4");
  }

  if (printflat == true)
  {
    printmessage(flatmessage);
    printflat = false;
  }
}

void printmessage(string text)
{
  module.setdisplaytostring("        ", 0);
  module.setdisplaytostring(text, 0, 0);
  delay(3000);
  module.setdisplaytostring("        ", 0);
}


como podéis ver, el código es sencillo, los mensajes de tipo "flat" nunca deberían de verse porque el buffer envía un cero, sin embargo si que funciona con el mensaje tipo "tyre", estos no se visualizan, y si cambio el buffer del 10 al 12 por un 40 si se muestran, pero en ningún caso funciona correctamente con los valores del 14 al 17.

solo se me ocurre que no se cargue bien el buffer en el metodo readserial, el envío se realiza cada 50 milisegundos, pero eso no debería ser un problema, creo....

code: [select]
(serial.available() > trama_length)
y si ambos son iguales entonces no cuenta?


para leer un conjunto de bytes, puedes ahorrarte una sentencia for de esta manera:

code: [select]
serial.readbytes(values, trama_length);


pd: eso de que si el primer byte es igual 255 o no, no lo tengo claro.
y por cierto, puede que 9600 bps sea muy lento para 50 milisegundos.


Arduino Forum > International > Español > Software (Moderators: surbyte, Hector_A) > Error en comparación de valores numéricos desde el buffer


arduino

Comments

Popular posts from this blog

DHT11 Time out error using v0.4.1library

Sketch upload fails with Java error (___REMOVE___/bin/avrdude)!

Arduino Uno + KTY81/210 temperature sensor