Forum: Mikrocontroller und Digitale Elektronik Programm bearbeiten. wie?


von Björn ^^ (Gast)


Lesenswert?

Guten Abend.
ich bin neu in Sachen µC und auch neu in diesem Forum.
ich habe mich bis jetzt nur wenig mit dem µC befasst.
und das nur in Basic.
habe im Netz folgendes projekt gefunden:
http://www.kh-gps.de/gpsdec1.htm
finde ich sehr interresant, aber ich brauche die Geschwindigkein 
natürlich in km/h, und nicht in Knoten.
habe den Quelltext angesehen, und finde trotz aller Bemühungen keine 
Stelle, wo die Daten in Knoten umgewandelt werden, um diedann wiederrrum 
in km/h zu umwandelt.
Könnte mir jemand helfen?
Quelltext:




$regfile = "m8def.dat"
$crystal = 16000000
$baud = 4800

Config Lcd = 16 * 2
Cls
Cursor Off

Dim C As Byte
Dim I As Byte
Dim Time As String * 6
Dim Av As String * 2
Dim Lat As String * 8
Dim Ns As String * 2
Dim Lon As String * 9
Dim Ew As String * 2
Dim Spd As String * 6
Dim Crs As String * 6
Dim Leng As Byte
Dim Mrk As String * 2
Dim Xx As Bit

Declare Sub Wait_for_string(byval S As String)
Declare Function Read_string() As String

Wait 1
   Upperline
   Lcd "WAITING FOR DATA"
Wait 3

Mrk = "-"

Config Serialin = Buffered , Size = 100                     ' Konfig. 
der ser. Eingabe
Enable Interrupts
' $GPRMC,hhmmss.ss,A,llll.ll,a,yyyyy.yy,a,x.x,x.x,ddmmyy,x.x,a*hh
Do
   Call Wait_for_string( "$GPRMC,")                         ' Warte auf 
$GPRMC

   Time = Read_string()
   Av = Read_string()

   Lat = Read_string()
   Leng = Len(lat) - 1
   Lat = Left(lat , Leng)

   Ns = Read_string()
   Leng = Len(ns) - 1
   Ns = Left(ns , Leng)

   Lon = Read_string()
   Leng = Len(lon) - 1
   Lon = Left(lon , Leng)

   Ew = Read_string()
   Leng = Len(ew) - 1
   Ew = Left(ew , Leng)

   Spd = Read_string()
   Leng = Len(spd) - 1
   Spd = Left(spd , Leng)

   Crs = Read_string()
   Leng = Len(crs) - 1
   Crs = Left(crs , Leng)

   Upperline
   Locate 1 , 2
   Lcd Lat ; Ns
   Locate 1 , 12
   Lcd Spd

   Lowerline
   Lcd Lon ; Ew
   Locate 2 , 12
   Lcd Crs

   If Av = "V," Then Av = "*"
   If Av = "A," Then Av = " "
   Locate 1 , 1
   Lcd Av

   If Xx = 1 Then Mrk = "-"
   If Xx = 0 Then Mrk = "+"
   Toggle Xx
   Locate 1 , 11
   Lcd Mrk

Loop

End

'------------------------------------------------------
Sub Wait_for_string(byval S As String) As String
Local Ii As Byte
Local Cc As Byte
Ii = 1
M1:
   Cc = Waitkey()
   If Cc <> Mid(s , Ii , 1) Then
      Goto M1
   Else
      Incr Ii
      If Ii > Len(s) Then Goto M2
      Goto M1
   End If
M2:
End Sub

'------------------------------------------------------
Function Read_string() As String
Local Cc As Byte
Local Ss As String * 10
Ss = ""
Do
   Cc = Waitkey()
   Ss = Ss + Chr(cc)
Loop Until Cc = ","
Read_string = Left(ss , 10)
End Function
End

von Björn ^^ (Gast)


Lesenswert?

Keine Ideen?

von Walter (Gast)


Lesenswert?

>und finde trotz aller Bemühungen keine
>Stelle, wo die Daten in Knoten umgewandelt werden

da wird nix in Knoten umgewandelt, die Strings sind wohl in Knoten.
Da hat jemand beim Programmieren Tastendrücke gespart sonst müsste man 
nicht raten ob z.B.
Spd Speed bedeutet

von Nils (Gast)


Lesenswert?

Hallo Björn,

bin weder Basic-Programmierer noch kenne ich mich besonders gut mit GPS 
aus, aber aus dem Code meine ich zu lesen, dass Spd die Geschwindigkeit 
ist.

Die scheint schon in Knoten vom GPS-Empfänger zu kommen, denn 
umgerechnet wird hier nichts. Du mußt Dir eigentlich nur Spd greifen, 
und von Knoten in km/h umrechnen.

Gruß, Nils

von holger (Gast)


Lesenswert?

Da ist die Stelle:

>   Spd = Read_string()
>   Leng = Len(spd) - 1
>   Spd = Left(spd , Leng)

Der einfache Weg:
Aus dem String Spd machst du eine float Zahl tempo.
Wie man das in Basic macht weiss ich nicht.
Gibt es da überhaupt einen Befehl ?
tempo ist jetzt noch in Knoten.
Umrechnen in km/h = Knoten * 1.85 ungefähr.
tempo = tempo * 1.85;
Dann aus der float Zahl tempo einen neuen String in Spd
machen. Fettig!

Mit Festkommaarithmetik spart man sich den float Kram.
Dann muss man den String Spd aber wohl von Hand
in Vorkomma- und Nachkommastellen zerlegen.

von Björn ^^ (Gast)


Lesenswert?

danke erstmal an alle!
die Überlegung ist:

Dim kmh as byte

Spd = Read_string()
Leng = Len(spd) - 1
Spd = Left(spd , Leng)

kmh = Spd*1.85

   Upperline
   Locate 1 , 2
   Lcd Lat ; Ns
   Locate 1 , 12
   Lcd kmh


so im etwa?

von holger (Gast)


Lesenswert?

>Dim kmh as byte

byte geht nur bis 255 km/h ;)

>Spd = Read_string()
>Leng = Len(spd) - 1
>Spd = Left(spd , Leng)

Ist Groß-/Kleinschreibung in Basic egal ?

>kmh = Spd*1.85

Geht nicht. Spd ist ein Text. Aus Spd musst du erst eine Zahl
machen bevor du multiplizieren kannst.

>   Lcd kmh

kmh ist eine Zahl. Aus der musst du erst einen Text
machen bevor du sie auf dem Display ausgeben kannst.

von Björn ^^ (Gast)


Lesenswert?

und noch was:
es steht da auf der Seite
"Insgesamt kommt man für alle Bauteile des Decoders auf Kosten in der 
Größenordnung von etwa Euro 10."
wie ist das gemeint?
mit dem µC und lcd? und was ist mit dem GPS empfänder?
ich glaube ich habe was falsch verstanden, oder?
ist das normale RS232 GPS-Empf? wo krigt man den? bei eBay sind schon 
alle USB, rs232 findet man noch kaum.
klärt mich bitte auf.
Danke schön ^^

von Björn ^^ (Gast)


Lesenswert?

>byte geht nur bis 255 km/h ;)
reicht ;)


>Spd ist ein Text. Aus Spd musst du erst eine Zahl machen
wie kann man das machen? das wird ja schon so Empfangen, oder?

von holger (Gast)


Lesenswert?

>>Spd ist ein Text. Aus Spd musst du erst eine Zahl machen
>wie kann man das machen?

Das steht im Handbuch deines BASIC Compilers.

> das wird ja schon so Empfangen, oder?

Rüchtüch.

von Paul Baumann (Gast)


Lesenswert?

Mit dem Befehl "VAL" kannst Du die Werte, die Du aus dem String 
herausgesägt hast, in einen numerischen Wert umwandeln.

MfG Paul

von Björn ^^ (Gast)


Lesenswert?

@Paul
danke

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.