Problemi con la gestion delle stringhe

Ciao a tutti,

sono nuovo e ho dei problemi nella gestione delle stringhe in INPUT da un’antenna GPS.
Ho connesso il mio ARDUINO Duemilanove con un’antenna GPS EM406A, ho poi ricercato del codice per partire con l’understanding per come interpretare i messaggi NEMEA ricevuti dal GPS.
Il codice è il seguente:

#include <ctype.h>

#define bit9600Delay 84
#define halfBit9600Delay 42
#define bit4800Delay 188
#define halfBit4800Delay 94

#define MCHARS 8            // max characters to accept
#define ENTER 13            // byte value of the Enter key (LF)


byte rx = 6;   // EM406A GPS tx line connected to pin 6 on Arduino (4800baud)
byte tx = 7;   // EM406A GPS rx line connected to pin 7 on Arduino (4800baud)

int charGPS;
char lineGPS[500] = " ";
int lineGPSindex = 0;

char command_GGA[7] = "$GPGGA";
char command_GSA[7] = "$GPGSA";
char command_GVA[7] = "$GPGVA";
char command_RMC[7] = "$GPRMC";

void setup() {
  pinMode(rx,INPUT);
  pinMode(tx,OUTPUT);
  digitalWrite(13,HIGH);     // turn on debugging LED
  Serial.begin(4800);        // Setup USB serial port monitor to 4800baud
}

void loop()
{
  charGPS = readCharGPS();
  Serial.print(char(charGPS));
  /*
  if(charGPS != ENTER) {                  // if the byte is not a NEWLINE
    lineGPS[lineGPSindex] = char(charGPS);      // add the byte to the "String" array
    lineGPSindex++;                          // increase the item string count
  }
  if(charGPS == ENTER)
  {
    Serial.println("");
    Serial.println("############################################################################");
    printLineGPS();
    for(int i=0;i<500;i++) lineGPS[i]=' ';
    lineGPSindex = 0;
  }
  */
}

int readCharGPS()
{
  byte val = 0;
  digitalWrite(tx,HIGH);
  while (digitalRead(rx));  //wait for start bit
  if (digitalRead(rx) == LOW) {
    delayMicroseconds(halfBit4800Delay);
    for (int offset = 0; offset < 8; offset++) {
      delayMicroseconds(bit4800Delay);
      val |= digitalRead(rx) << offset;
    }
    //wait for stop bit + extra
    delayMicroseconds(bit4800Delay);
    delayMicroseconds(bit4800Delay);    
    return val & 0x7f;
  }
}

void printLineGPS()
{
  for(int i=0;i<500;i++) 
  {
    Serial.print(lineGPS[i]);
    if( lineGPS[i] == ENTER )
    {
      Serial.println("");
      break;
    }
  }
}

ed i messaggi di ritorno nell’interfaccia seriale hanno questa forma:

$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GPRMC,163730.690,V,,,,,,,180409,,*24
$GPGGA,163731.690,,,,,0,00,,,M,0.0,M,,0000*58
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GPRMC,163731.690,V,,,,,,,180409,,*25
$GPGGA,163732.699,,,,,0,00,,,M,0.0,M,,0000*52
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GPRMC,163732.699,V,,,,,,,180409,,*2F
$GPGGA,163733.690,,,,,0,00,,,M,0.0,M,,0000*5A
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GPGSV,3,1,12,28,60,105,,15,49,303,,10,47,205,,08,45,055,*75
$GPGSV,3,2,12,27,45,263,,26,35,303,,24,08,265,,07,08,066,*7A
$GPGSV,3,3,12,21,06,305,,19,04,031,,09,04,253,,17,02,134,*7C
$GPRMC,163733.690,V,,,,,,,180409,,*27
$GPGGA,163734.690,,,,,0,00,,,M,0.0,M,,0000*5D
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GPRMC,163734.690,V,,,,,,,180409,,*20
$GPGGA,163735.699,,,,,0,00,,,M,0.0,M,,0000*55
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GPRMC,163735.699,V,,,,,,,180409,,*28
$GPGGA,163736.690,,,,,0,00,,,M,0.0,M,,0000*5F
$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GPRMC,163736.690,V,,,,,,,180409,,*22

se rimuovo la parte di codice commentata da /* */ nella funzione loop ottengo questo risultato.

24j4j
63,2,12,08,41,058,,26,39,304,,09,07,255,,24,06,262,*78


############################################################################



24j4j
63,2,12,08,41,058,,26,39,304,,09,07,255,,24,06,262,*78                                                                                                                                                                                                                                                                                                                                                                                                                                                      $GPGGA,164700.694,,,,,0,00,,,M,0.0,M,,0000*59


############################################################################

$GPGGA,164700.694,,,,,0,00,,,M,0.0,M,,0000*59                                                                                                                                                                                                                                                                                                                                                                                                                                                                       $GPGGA,164702.694,,,,,0,00,,,M,0.0,M,,0000*5B


############################################################################

$GPGGA,164702.694,,,,,0,00,,,M,0.0,M,,0000*5B                                                                                                                                                                                                                                                                                                                                                                                                                                                                       v6V

24j4j
63,2,12,08,41,058,,26,39,304,,09,07,255,,24,06,262,*78


############################################################################

v6V

24j4j
63,2,12,08,41,058,,26,39,304,,09,07,255,,24,06,262,*78                                                                                                                                                                                                                                                                                                                                                                                                                                                   $GPGGA,164705.692,,,,,0,00,,,M,0.0,M,,0000*5A


############################################################################

$GPGGA,164705.692,,,,,0,00,,,M,0.0,M,,0000*5A                                                                                                                                                                                                                                                                                                                                                                                                                                                                       $GPGGA,164707.688,,,,,0,00,,,M,0.0,M,,0000*53


############################################################################

$GPGGA,164707.688,,,,,0,00,,,M,0.0,M,,0000*53                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
r3fC
$GPGSV,3,2,12,08,41,058,,26,39,304,,09,07,255,,24,06,262,*78


############################################################################


r3fC
$GPGSV,3,2,12,08,41,058,,26,39,304,,09,07,255,,24,06,262,*78

il risultatto è zeppo di caratteri speciali.

sepete dirmi perchè?

ciao e grazie in anticipo
:slight_smile: