Hallo Ronny,
ehrlich gesagt kann ich mir nicht so recht vorstellen, dass deine Subs funktionieren. Mal abgesehen davon, dass dein Programm absolut nichts anderes machen kann, weil immer wieder die Waitkey() kommen.
Angenommen, ein Zeichen wird nicht richtig eingelesen, dann kommt das Programm hier nicht mehr raus:
M1:
Cc = Waitkey()
If Cc <> Mid(s , Ii , 1) Then
Goto M1
Bis dann irgendwann später doch mal zufällig das eingelesene Zeichen eines späteren GPS Satzes mit der aktuellen Position in S übereinstimmt.
Wie oben schon geschrieben, geht das mit dem URXC Interrupt viel sicherer und der µC ist nicht blockiert.
Dazu würde ich alle Zeichen einlesen bis ein CR auftauscht. Dann ist ein Satz komplett eingelesen.
Nun kannst du diesen in der Main Loop analysieren. Also etwa so:
Code:
Dim Gps_string As String * 100
Dim Gps_string_ovly(100) As Byte At Gps_string Overlay
Dim Gps_words(15) as String * 12
Dim Gps_pos As Byte
Dim GPS_complete As Byte
On URXC Urxc_isr 'kommentiere die Config Serialin Zeile aus
Enable URXC
Open "COMB.0:115200,8,N,1" For Output As #1
Enable Interrupts
Do
If Gps_complete = 1 Then
Gps_complete = 0
Word_count=Split(Gps_string, Gps_words(1), ",") 'Jetzt hast du alle Wörter in einem Array
'hier kommt die Auswertung hin
End If
Loop
End
Urxc_isr:
Gps_string_ovly(Gps_pos)=UDR
If Gps_string_ovly(Gps_pos) = 13 Then 'ASCII Wert von Carriage Return
Gps_string_ovly(Gps_pos) = 0 'String Ende setzen
GPS_complete = 1
End If
Return
Da sind jetzt vielleicht einige Sachen drin, die du nicht verstehst, aber das kommt schon noch.
Lesezeichen