none
Conexión Arduino-Visual Studio RRS feed

  • Pregunta

  • Buenas. Llevo meses elaborando un proyecto, y aunque ya lo tengo casi listo, hay un problema que tengo desde el principio y no he sabido solucionar. El proyecto consiste en tomar unas variables en programación Arduino y mandarlos a Visual Studio para que los represente.

    El problema que tengo es que en ocasiones me salta un error a la hora de mandar datos. En un principio yo envío una variable de tipo int y tres de tipo float, y de vez en cuando cuando ejecuto el programa en Visual Studio y selecciono el puerto al que tengo conectada la placa Arduino me salta este error:

    http://es.tinypic.com/r/2cojtd5/9

    Como soy nuevo en Visual Studio, no estoy muy seguro de que puede estar ocurriendo. Porque el problema es que ni siquiera lee correctamente lo que manda Arduino. 

    También comentar que hice una comprobación, mandando únicamente una variable con el valor entero de 500. Ni siquiera así leía correctamente lo que Arduino mandaba (y eso que en lugar de variable tipo double usé variable tipo int). Total, que estoy muy perdido, así que si alguien supiera que puede estar pasando y me lo explicara lo agradecería muchísimo.

    viernes, 1 de junio de 2018 17:00

Respuestas

  • Buenas,

    El error que te da, es porque lo que recibes de arduino, por la razón que sea, no es lo que esperas y no se puede convertir, para ese tipo de conversiones de string a numérico, te recomiendo que uses xxxxx.TryParse, lo cual devuelve un booleano que indica si se puede convertir o no, por ejemplo:

    if(!double.TryParse(datos,out double comprobacion))
    {
        //Aqui entrara en caso de no poder convertirse
        comprobacion = -1;
    }
    
    //Resto de tu codigo

    De todos modos, por lo poco que veo en tu código y lo que dices, mandas 4 datos, pero en tu evento, actúas como si fuese 1 solo dato lo que envías al convertirlo a double siempre, los envías de 1 en 1 o haces alguna concatenación en string?

    Con el código que te he puesto, al menos puedes evaluar lo que te llega, y si no te llega nada, o te llega algo que no se puede convertir, en vez de producir un crash, asignas un valor por defecto (-1 en mi ejemplo) y continuas con el resto del proceso (asignar un valor por defecto, o poner un return, o lo que te interese en tu lógica de programa)

    Si tienes alguna duda, coméntanos un poco más sobre tu proyecto y lo miramos mejor

    Atte


    Jorge Turrado Ferrero

    Mis repositorios en GitHub

    No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.

    Para obtener una respuesta lo más rápida y concisa posible, te recomiendo:

    • Marcado como respuesta Fakiko domingo, 3 de junio de 2018 12:51
    sábado, 2 de junio de 2018 23:32

Todas las respuestas

  • Buenas,

    El error que te da, es porque lo que recibes de arduino, por la razón que sea, no es lo que esperas y no se puede convertir, para ese tipo de conversiones de string a numérico, te recomiendo que uses xxxxx.TryParse, lo cual devuelve un booleano que indica si se puede convertir o no, por ejemplo:

    if(!double.TryParse(datos,out double comprobacion))
    {
        //Aqui entrara en caso de no poder convertirse
        comprobacion = -1;
    }
    
    //Resto de tu codigo

    De todos modos, por lo poco que veo en tu código y lo que dices, mandas 4 datos, pero en tu evento, actúas como si fuese 1 solo dato lo que envías al convertirlo a double siempre, los envías de 1 en 1 o haces alguna concatenación en string?

    Con el código que te he puesto, al menos puedes evaluar lo que te llega, y si no te llega nada, o te llega algo que no se puede convertir, en vez de producir un crash, asignas un valor por defecto (-1 en mi ejemplo) y continuas con el resto del proceso (asignar un valor por defecto, o poner un return, o lo que te interese en tu lógica de programa)

    Si tienes alguna duda, coméntanos un poco más sobre tu proyecto y lo miramos mejor

    Atte


    Jorge Turrado Ferrero

    Mis repositorios en GitHub

    No olvides votar mi comentario si te ha ayudado y marcarlo como respuesta si ha sido la solución, con eso ayudas a mejorar mi reputación en la comunidad y a identificar la respuesta a la gente que tenga el mismo problema.

    Para obtener una respuesta lo más rápida y concisa posible, te recomiendo:

    • Marcado como respuesta Fakiko domingo, 3 de junio de 2018 12:51
    sábado, 2 de junio de 2018 23:32
  • ¡Mil millones de gracias! Llevaba meses con este problema y no tenía forma de solucionarlo, y utilizando el código que has puesto he conseguido que el programa siempre funcione. No te imaginas la felicidad que tengo ahora mismo jajajajaja

    ¡Muchas gracias de nuevo!

    domingo, 3 de junio de 2018 12:52
  • Mirando tu fotografía puedo darme cuenta que los datos recibidos llegan juntos en una cadena.

    Podrías hacer lo siguiente para separarlos y procesarlos individualmente:

    string datos = serialPort1.ReadExisting(); string[] datosSplit = datos.Split(null); foreach (string valor in datosSplit) { double conversion; if (double.TryParse(valor, out conversion)) { // realizar algo con el dato recibido

    EnviarDato(conversion); } }

    Saludos

    domingo, 3 de junio de 2018 17:22