Go Down

Topic: Ya no se que hacer con el serial (Read 1 time) previous topic - next topic

Maverik

Code: [Select]
if (Serial.available() > 0) //si hay coneccion
  {
    // lee el byte entrante:
    leo = ((char)Serial.read());

    //limpio las variables
    vpar[0]="";
    vpar[1]="";
    vpar[2]="";
    vpar[3]="";

    for(int k=0;k==20;k++)
    {
      Parametro[k]="";
    }


    if(p<19)
    {
      if(leo==46)
      {
        Parametro[p] = ".";
        p++;
      }
      if(leo==45)
      {
        Parametro[p] = "-";
        p++;
      }
      if(leo==48)
      {
        Parametro[p] = "0";
        p++;
      }
      if(leo==49)
      {
        Parametro[p] = "1";
        p++;
      }
      if(leo==50)
      {
        Parametro[p] = "2";
        p++;
      }
      if(leo==51)
      {
        Parametro[p] = "3";
        p++;
      }
      if(leo==52)
      {
        Parametro[p] = "4";
        p++;
      }
      if(leo==53)
      {
        Parametro[p] = "5";
        p++;
      }
      if(leo==54)
      {
        Parametro[p] = "6";
        p++;
      }
      if(leo==55)
      {
        Parametro[p] = "7";
        p++;
      }
      if(leo==56)
      {
        Parametro[p] = "8";
        p++;
      }
      if(leo==57)
      {
        Parametro[p] = "9";
        p++;
      }
      if(leo==97)
      {
        Parametro[p] = "A";
        p++;
      }
      if(leo==98)
      {
        Parametro[p] = "B";
        p++;
      }
      if(leo==99)
      {
        Parametro[p] = "C";
        p++;
      }
      if(leo==100)
      {
        Parametro[p] = "D";
        p++;
      }
      if(leo==101)
      {
        Parametro[p] = "E";
        p++;
      }
      if(leo==102)
      {
        Parametro[p] = "F";
        p++;
      }
      if(leo==103)
      {
        Parametro[p] = "G";
        p++;
      }
      if(leo==104)
      {
        Parametro[p] = "H";
        p++;
      }
      if(leo==105)
      {
        Parametro[p] = "I";
        p++;
      }
      if(leo==106)
      {
        Parametro[p] = "J";
        p++;
      }
      if(leo==107)
      {
        Parametro[p] = "K";
        p++;
      }
      if(leo==108)
      {
        Parametro[p] = "L";
        p++;
      }
      if(leo==109)
      {
        Parametro[p] = "M";
        p++;
      }
      if(leo==110)
      {
        Parametro[p] = "N";
        p++;
      }
      if(leo==111)
      {
        Parametro[p] = "O";
        p++;
      }
      if(leo==112)
      {
        Parametro[p] = "P";
        p++;
      }
      if(leo==113)
      {
        Parametro[p] = "Q";
        p++;
      }
      if(leo==114)
      {
        Parametro[p] = "R";
        p++;
      }
      if(leo==115)
      {
        Parametro[p] = "S";
        p++;
      }
      if(leo==116)
      {
        Parametro[p] = "T";
        p++;
      }
      if(leo==117)
      {
        Parametro[p] = "U";
        p++;
      }
      if(leo==118)
      {
        Parametro[p] = "V";
        p++;
      }
      if(leo==119)
      {
        Parametro[p] = "W";
        p++;
      }
      if(leo==120)
      {
        Parametro[p] = "X";
        p++;
      }
      if(leo==121)
      {
        Parametro[p] = "Y";
        p++;
      }
      if(leo==122)
      {
        Parametro[p] = "Z";
        p++;
      }     
    }

    if(p==19)
    {
      for(int i=0;i<19;i++)
      {
        if(Parametro[i]=="-")
        {
          if(h==3)
          {
            i++;
          }
          if(h==2)
          {
            h=3;
            i++;
          }
          if(h==1)
          {
            h=2;
            i++;
          }
          if(h==0)
          {
            h=1;
            i++;
          }
        }
        vpar[h] = vpar[h] + Parametro[i];
      }
      p=0;
      h=0;
    }
  }

noter

#6
Mar 09, 2013, 04:03 pm Last Edit: Mar 09, 2013, 04:05 pm by noter Reason: 1
Si no vas a enviar datos de un tamaño igual siempre, ¿Por qué usas la longitud como separador de comandos?
Yo lo que haría sería definir un caracter de inicio de comando y uno de separador de parámetros, y:


  • Desechar lo recibido, hasta recibir el caracter de inicio de comando (p. ej. \n).

  • Leer secuencialmente hasta encontrar el caracter separador (por tus comandos podría ser el guión).

  • Comparo lo recibido, desechando el guión, con mi id de dispositivo.

  • Si es mi id de dispositivo, leo hasta el siguiente guión y tendré el primer parámetro, leo hasta el segundo, y tendré el siguiente parámetro, y así sucesivamente.

  • Si no era para mí, vuelvo al punto 1. El caracter de inicio de comando, deberá hacer saltar el código en cualquer momento al punto 2 (así, si por ejemplo no se recibio bien algo, al menos saldrá del bucle cuando comience un nuevo comando




Go Up