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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.