¿Cómo distinguir variables?


hola:

he hecho una aplicación con visual c# express 2013. hay tres variables llamadas vida, balas y maná.

dicha variable son int pero está transformada en string para enviarlo al puerto serie. cuando envío un número 100 de la variable vida que es int, lo paso string y lo envío arduino. arduino debe interpretarlo en la ventana del serial. (más adelante lo muestro en el lcd 16x2).

de las tres variables que quiero enviar, me centraré en una, la variable vida, que así se llama en c# y en arduino ide 1.0.5. por ahora hecho este código.
code: [select]

int vida = 0;

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

void loop() {
       
               vida = serial.available();
               serial.println("vida: ");
               serial.println(vida);
       delay(1000);
}


su resultado es que cuenta los bytes recibidos, no el valor de la variable que debe ser en este caso 100 como ejemplo, si lo envío desde el pc con c#.

con este código de abajo me sale otra cosa como resultado.

code: [select]


int vida = 0;

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

void loop() {
       
               vida = serial.read();
               serial.println("vida: ");
               serial.println(vida);
       delay(10000);
}


resultado.
quote
vida:
49
vida:
48
vida:
48


¿qué hay que hacer para que me muestre en pantalla un valor en el terminal de arduino ide tal como quiero?

si en el c# en su ventana muestra 100, envío 100 al puerto serie y me sale cosas raras como indica arriba.

¿hay una solcuión?

un cordial saludo.

la cosa está más que clara, lo que está haciendo tu loop() es leer del puerto serie los caracteres que le están llegando.

lo que muestras como resultado es un 1 seguido de dos ceros, es decir el cien, pero en caracteres, es decir

"1" = 49 (es el código ascii del caracter 1 )
"0" = 48
"0" = 48

de manera que lo que has de hacer es tener un protocolo de comunicación, que te permita ir acumulando con un bucle en una variable lo que te vaya llegando y cuando recibas la señal de finalización de cadena (un caracter que tú decidas enviar desde tu programa c#, por ejemplo la virgulilla o tilde "~" (cuyo código ascii es el 126) parar, por ejemplo, en el caso que nos comentas, enviarías la cadena "100~"

code: [select]


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

void loop() {
 int ivida, icaracter;

 ivida = 0;
 icaracter = serial.available();

 while ( icaracter != 126 && ivida < 3275 ) {
   // el límite de 3275 es para que se evite un desbordamiento de la variable int ivida
    ivida *= 10;
   ivida += ( icaracter - 48 );  // esto te hace que el código del cero que es 48 te de 0, el uno que es 49 1... hasta el nueve que es 57 de 9
   if( ivida < 3275 ) { 
      delay( 10000 );
      icaracter = serial.available();
    }
 }

 serial.println( ivida, dec );

}



es solo un esbozo para que cacharrees y te lo vayas "tragando" en tu código.

espero te sea de utilidad, puede que tenga algún pequeño fallo o error porque no lo compilado


Arduino Forum > International > Español > Software (Moderators: surbyte, Hector_A) > ¿Cómo distinguir variables?


arduino

Comments

Popular posts from this blog

VIDIOC_S_FMT error 16, Device or resource busy - Raspberry Pi Forums

using a laptop skeleton to build a pi laptop - Raspberry Pi Forums

Forum for Joomla? - Joomla! Forum - community, help and support