Help me

I have a big problem with the data that returns me the arduino
I’m trying to process data from the serial connection, but I returned the arduino does not make sense.

parameter that happened is this: kitchen Notre-id03-onn-74

the expected result is this:

vpar[0] cocina
vpar[1] tre
vpar[2] id03
vpar[3] onn
vpar[4] 74

but I get is this:

vpar[0] cocina
vpar[1]
vpar[2]
vpar[3]
vpar[4] id03onn

this is my code

int p = 0;
String Parametro[19];
String vpar[5];

int leo = 0;


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

void loop()
{
  if (Serial.available() > 0) //si hay coneccion
  {
    // lee el byte entrante:
    leo = ((char)Serial.read());

    if (leo==-1)
    {
      //no hay datos en la coneccion
    }
    else
    {
      if (-1 != leo) 
      {
        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 l=0;l<19;l++)
          {
            Serial.println(Parametro[l]);
          }
          int h=0;
          for(int i=0;i<19;i++)
          {

            if(Parametro[i]=="-")
            {
              if(h==0)
              {
                h=1;
                i++;
              } 
              if(h==1)
              {
                h=2;
                i++;
              }
              if(h==2)
              {
                h=3;
                i++;
              }
              if(h==3)
              {
                h=4;
                i++;
              }
              if(h==4)
              {
                i++;
              }           
            }
            
            vpar[h] = vpar[h] + Parametro[i];
          }
          Serial.println(vpar[0]);
          Serial.println(vpar[1]);
          Serial.println(vpar[2]);
          Serial.println(vpar[3]);
          Serial.println(vpar[4]);
          Serial.flush();
          p=0;
          h=0;
        }
      }
    }
  }
}
String Parametro[19];
String vpar[5];

Please re-read: http://arduino.cc/en/Reference/StringConstructor

Hint: You have defined an array of Strings.

Perhaps you meant to use the more common character array?

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

    if (leo==-1)
    {
      //no hay datos en la coneccion
    }
    else
    {
      if (-1 != leo) 
      {

Since you only perform the Serial.read() after Serial.available() confirms that there is something to read, Serial.read() will never return -1. There is no need to test for that return code. Twice.

          if(leo==46)

No one needs to look anything up if this were:

          if(leo == '.')

Notice that the spaces improve readability to. Thereisnoreasontomakeyourcodehardtoread.

          if(leo==46)
          {
            Parametro[p] = ".";
            p++;
          }

This appears to be a consistent pattern in your code, where you end up assigning Parametro[p] the value that is in leo, after a test. Why? Why is the test necessary?

              if(h==0)
              {
                h=1;
                i++;
              } 
              if(h==1)
              {
                h=2;
                i++;
              }

Lots more unnecessary tests...

          Serial.flush();

There is a 99.999% chance that you should NOT be doing this. Why are you doing it? What version of the IDE are you using?

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

if (leo==-1) { //no hay datos en la coneccion } else { if (-1 != leo) {

you're absolutely right.

I mention what my project, maybe you can help me improve my code (I have little notion of programming).

I want to send data through the pc module APC220, to 3 Arduinos in different parts of the house. Arduino also send the information to the PC

I need very little to solve my problem el problema estaba en el orden de

if(h==3)
          {
            i++;
          }
          if(h==2)
          {
            h=3;
            i++;
          }
          if(h==1)
          {
            h=2;
            i++;
          }
          if(h==0)
          {
            h=1;
            i++;
          }

Now I have another problem

the code I get is wrong the expected result is this:

vpar[0] cocina vpar[1] tre vpar[2] id03 vpar[3] onn

but I get is this:

vpar[0]: COCINA vpar[1]: TRE vpar[2]: ID03 vpar[3]: ONNCOCINA because it is the word "cocina" at the end of???

the code I get is wrong the expected result is this:

vpar[0] cocina vpar[1] tre vpar[2] id03 vpar[3] onn

but I get is this:

vpar[0]: COCINA vpar[1]: TRE vpar[2]: ID03 vpar[3]: ONNCOCINA because it is the word "cocina" at the end of???

We can't see your current code. We can't see what you are sending to to the Arduino. Therefore, we can't answer your question.

Read this before posting a programming question

"Help me" is not a helpful subject line. Everyone wants help.

Ok, i solved my problems.

The variable Parametro save the string cocina at the end

The code for solved this is:

for(int i=0; i<20; i++)
{
Parametro[i]="";
}
String Parametro[19];

The code for solved this is:

for(int i=0; i<20; i++)

{
Parametro[i]="";
}

I think you are out by one. Also the String class tends to gobble memory.