Problem beim lesen von Daten mit einem Arduino Uno

Gast #3141811
Lesenswert?

Guten Tag Foren-Gemeinde,

ich versuche gerade mit einem Arduino Uno die Daten eines GPS-Empfängers 
via TTL auszulesen - was grundsätzlich auch funktioniert.

Ich hab Zugriff auf den Empfänger, kann ihn konfigurieren und er liefert 
mir auch Daten.

Nun zu meinem Problem, dazu erstmal ein kleiner Datenauszug aus dem 
Monitor:
B5,62,2,10,B0,0,6,68,90,18,C9,6,7,0,
0,0,0,0,0,0,0,0,5D,3,B4,9F,B6,C5,74,41,DC,65,A0,45,1F,4,1E,3,
37,BC,4A,D8,ED,CA,9E,41,E3,49,41,8C,49,70,77,41,92,57,8C,C4,18,7,21,0,
0,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,
FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,
FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,
FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,
FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,

...in der ersten Zeile steht "B0,0" für die Byte-Länge der auf "B0,0" 
folgenden Nachricht (192 Bytes).
Leider fehlen, wie ihr oben im Beispiel seht, gut 50% der Daten 
("FF,FF,FF,...") und mir fehlt total der Ansatz wo ich mit der Suche 
anfangen soll...

Hier mein (nicht komplett vollständiger) Code:
1
void get_gps_data()//Abruf der GPS-Daten 
2
{ 
3
int counter24bits=16;
4
int gps_length_flag=0;
5
int data_counter=0;
6
while(gps_length_flag==0)
7
{ data_counter++;
8
if(data_counter==500)
9
{gps_length_flag=1;}
10
  byteGPS[0]=Serial.read();
11
  Serial.print(byteGPS[0],HEX);
12
  if(byteGPS[0]==0xB5)
13
  { Serial.println("");
14
    Serial.print(byteGPS[0],HEX);Serial.print(",");
15
    byteGPS[1]=Serial.read();
16
    if(byteGPS[1]==0x62)
17
    { Serial.print(byteGPS[1],HEX);Serial.print(",");
18
      byteGPS[2]=Serial.read();
19
      if(byteGPS[2]==0x02)
20
      {Serial.print(byteGPS[2],HEX);Serial.print(",");
21
        byteGPS[3]=Serial.read();
22
       if(byteGPS[3]==0x10)
23
       {
24
         Serial.print(byteGPS[3],HEX);Serial.print(",");
25
         msg_length[0]=Serial.read();
26
         msg_length[1]=Serial.read();
27
         Serial.print(msg_length[0],HEX);Serial.print(",");
28
         Serial.print(msg_length[1],HEX);Serial.print(",");
29
         for(int i1=0;i1<msg_length[0];i1++)
30
         { byteGPS[4]=Serial.read();
31
           if(byteGPS[4]!='kkkkkk')
32
           {counter24bits++;
33
           Serial.print(byteGPS[4],HEX);Serial.print(",");
34
           if(counter24bits==24)
35
         {Serial.println("");
36
       counter24bits=0;}}}
37
         gps_length_flag=1;
38
       }}}}}
39
}

Bin für jede Idee dankbar!!!

Taurus
Gast #3141823
Lesenswert?

>    byteGPS[1]=Serial.read();
>    if(byteGPS[1]==0x62)
>    { Serial.print(byteGPS[1],HEX);Serial.print(",");

Du liest ein Byte. Dann sendest du drei Byte.
Wenn das mit der gleichen Baudrate passiert
gehen dir während du sendest schon mal zwei Byte beim
empfangen verloren wenn du darauf wartest das die
drei Bytes gesendet wurden. Das GPS wartet nicht darauf
bis du mit deinem Senden fertig bist. Das bläst dir munter
den Empfangspuffer weiter voll bis er überläuft.
Gast #3141840
Lesenswert?

Ich wußte das das Problem simpler Natur sein würde... macht auf 
jedenfall Sinn.
Werd mich morgen dran machen und das Lesen der Daten von der Ausgabe 
trennen und dann Bericht erstatten.. Danke schonmal!!!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren