Unificador de números por Serial para Arduino

No sé si os habrá pasado, pero al utilizar la función Serial.read() de Arduino, si se envía un 56 no se envía un 56 como tal, sino un 5 y un 6, que no es lo mismo. Es decir, que en vez de enviar un sólo número de dos dígitos, se envían dos números de un dígito. Para solucionarlo, he escrito este pequeño programa que permite unificar los números, algo útil para usarlo, por ejemplo, con servomotores:


4 Responses to “Unificador de números por Serial para Arduino”

  • MARIO AVILES Says:

    Solamente cabe decir excepcionalmente ese producto…fantastico…

  • christian Says:

    Oye no tendras uno para 12 digitos????

  • Juan Aguarón de Blas Says:

    Me temo que no! Pero se me acaba de ocurrir que tal vez te sirva algún trozo de este código, en concreto la parte de transmisión de datos vía Serial! https://www.inkling.com/read/arduino-cookbook-michael-margolis-2nd/chapter-8/recipe-8-14

  • Mauricio Peñaranda Says:

    me gusto y sirvio mucho tu codigo y le hice una modificacion solo para numeros de 1, 2 o 3 digitos… pero tanto positivos como negativos… pruebalo “para ver todos los parametro hay que descomentarlos xq como esta solo t dice q mandaste”

    int i = 0; //variable de acarreo, utilizada con el array
    int digitos = 0; //número de dígitos del número escrito
    int numero = 0; //el número que hemos escrito
    const int maxDigitos = 4; //Máximo de dígitos del número
    int num[maxDigitos]; //array con los dígitos de nuestro número

    void setup()
    {
    Serial.begin(9600); //Iniciamos el Serial
    }

    void loop()
    {
    digitos = 0;
    numero = 0;
    /*Primero, se comprueba que el Serial esté disponible. Si es así,
    al enviar un número al Arduino desde el ordenador, se almacenarán
    los dígitos individuales en las variables num[]. Además, muestra el
    valor de los dígitos en el ordenador.
    Hay que restar 48, ya que los números son enviados en formato ASCII
    */
    if (Serial.available() > 0)
    {
    for (i = 0; i < maxDigitos; i++)
    {
    num[i] = Serial.read();
    num[i] = num[i] – 48;
    //Serial.print(i);
    //Serial.print(" = ");
    //Serial.println(num[i]);
    delay(10);
    }
    /*Determinamos los dígitos del número. En todas las variables
    del array se almacena información, siendo un -49 si no contiene
    un número. Por tanto, se cuentan las variables num[] con contenido
    diferente de -49, y se pasa el resultado a la variable digitos*/
    for (i = 0; i = 0 && digitos == 3)
    {
    numero = (num[0]*100) + (num[1]*10) + num[2];
    }
    if (num[0] = 0 && digitos == 2)
    {
    numero = (num[0]*10) + num[1];
    }
    if (num[0] = 0 && digitos == 1)
    {
    numero = num[0];
    }
    if (num[0] < 0 && digitos == 2)
    {
    numero = (num[1])*(-1);
    }
    Serial.print("mandaste = ");
    Serial.println(numero);
    }
    }

Leave a Reply