'Lautsprecher (L1) in 3m Abstand vom Micro. T1= Takte/8
'Lautsprecher (L2) in 2m Abstand vom Micro. T2= Takte/8
'Lautsprecher (L3) in 1m Abstand vom Micro. T3= Takte/8

'Offset = 474     = T3*2 - T2
'Faktor = 2907    = T3 - Offset








'Das Programm:



$regfile = "m32def.dat"                                     'welcher Comtroller
$crystal = 8000000                                          'Quarz
$baud = 4800                                                'baud rate




' $sim



Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0       'confic Serille
$timeout = 1000000



Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.1 , Rs = Portc.0
Config Lcd = 20 * 4 , Chipset = Ks077

Config Lcdbus = 4
Cursor Off Noblink

Config Porta = Output
Config Portb = Input

Config Timer1 = Timer , Prescale = 8


Enable Interrupts



'Config Adc = Single , Prescaler = Auto                      'Confic Ad -Wandler
'Start Adc



Dim Laenge1 As Single                                       'Laenge [m]
Dim Laenge2 As Single
Dim Laenge3 As Single
Dim Laenge1_hoch2 As Single
Dim Laenge2_hoch2 As Single
Dim Laenge3_hoch2 As Single

Dim X_mic As Single
Dim Y_mic As Single
Dim Z_mic As Single
Dim X_mic_hoch2 As Single
Dim Y_mic_hoch2 As Single

Dim X_abstand As Single
Dim Y_abstand As Single
Dim Z_abstand As Single                                     'Raumhöhe
Dim X_abstand_hoch2 As Single
Dim Y_abstand_hoch2 As Single


Dim S As Single
Dim A As Single                                             'Hilfszahl

Dim Dreieckshoehe As Single
Dim Dreieckshoehe_hoch2 As Single

Dim Klammer1 As Single                                      'Hilfszahl
Dim Klammer2 As Single
Dim Klammer3 As Single
Dim Klammer4 As Single

Dim Timera As Long
Dim Timerb As Long
Dim Timerc As Long

Dim Lautsprecher As Byte








Dim Offset As Single
Dim Faktor As Single

Dim Gpgga$ As String * 100
Dim Gprmc$ As String * 100

Dim Check As Byte

Dim Hexx$ As String * 2


Dim A$ As String * 1
Dim Laenge As Single
Dim Breite As Single
Dim Laenge_faktor As Single
Dim Breite_faktor As Single

Dim Laengeplus As Single
Dim Breiteplus As Single
Dim Zeit As Long
Dim X As Byte
Dim Poti1 As Word
Dim Poti2 As Word
Dim Kurs As Word
Dim Speed As Word
Dim X$ As String * 10




Zeit = 0
Breite = 5230.48
Laenge = 1320.7

Breite_faktor = 0.72                                        '5231.2 - 5230.48                            'Rahmen für Karte
Laenge_faktor = 2.4                                         '1323.1 - 1320.7




Offset = 474                                                ' timerc * 2 - timerb
Faktor = 2907                                               ' timerc - Offset

Z_abstand = 0.600
X_abstand = 0.780
Y_abstand = 1.560





Cls

Locate 1 , 1
Lcd "  Ruhr-Universit" ; Chr(123) ; "t"
Locate 3 , 1
Lcd "       Bochum"
Locate 2 , 1
Lcd "Fachdidaktik Physik"
Locate 4 , 1
Lcd "   GPS-Simulator"
Wait 3





On Int0 Zeitstop1



Anfang:


Lautsprecher = 1
Start Timer1
Timer1 = 0
Enable Int0
Pulseout Porta , Lautsprecher , 500
Waitms 500

Lautsprecher = 2
Start Timer1
Timer1 = 0
Enable Int0
Pulseout Porta , Lautsprecher , 500
Waitms 500

Lautsprecher = 3
Start Timer1
Timer1 = 0
Enable Int0
Pulseout Porta , Lautsprecher , 500





If Laenge1 = 0 Then Goto Fehler                             'Schutz vor unberechenbaren Koordinaten
If Laenge2 = 0 Then Goto Fehler
If Laenge3 = 0 Then Goto Fehler

If Laenge1 > 10 Then Goto Fehler                            'Schutz vor unberechenbaren Koordinaten
If Laenge2 > 10 Then Goto Fehler
If Laenge3 > 10 Then Goto Fehler



Laenge1_hoch2 = Laenge1 ^ 2
Laenge2_hoch2 = Laenge2 ^ 2
Laenge3_hoch2 = Laenge3 ^ 2

X_abstand_hoch2 = X_abstand ^ 2
Y_abstand_hoch2 = Y_abstand ^ 2



'Umrechnung X


X_mic = X_abstand_hoch2 - Laenge1_hoch2
X_mic = X_mic + Laenge2_hoch2
X_mic = X_mic / 2
X_mic = X_mic / X_abstand





'Umrechnung Y


A = Y_abstand_hoch2 - Laenge3_hoch2
A = A + Laenge2_hoch2
A = A / 2
Y_mic = A / Y_abstand




'Umrechnung Z

X_mic_hoch2 = X_mic ^ 2
Y_mic_hoch2 = Y_mic ^ 2

A = Laenge2_hoch2 - X_mic_hoch2
A = A - X_mic_hoch2
A = A - Y_mic_hoch2
Z_mic = Sqr(a)
Z_mic = Z_abstand - Z_mic











   Cls

       Locate 1 , 1

       Lcd "X=" ; Fusing(x_mic , "#.###") ; "m"




      Locate 3 , 1

       Lcd "Y=" ; Fusing(y_mic , "#.###") ; "m"



       Locate 2 , 1

       Lcd "Z=" ; Fusing(z_mic , "#.###") ; "m"



       Locate 1 , 12

       Lcd "L1=" ; Fusing(laenge1 , "#.###") ; "m"




      Locate 3 , 24

       Lcd "L2=" ; Fusing(laenge2 , "#.###") ; "m"



       Locate 2 , 12

       Lcd "L3=" ; Fusing(laenge3 , "#.###") ; "m"


       Locate 4 , 1

       Lcd "T=" ; Timera ; "/" ; Timerb ; "/" ; Timerc



'X_mic = 0       zum Testen
'Y_mic = 0






Gps_mouse:


Y_mic = Y_mic / Y_abstand
X_mic = X_mic / X_abstand

X_mic = 1 - X_mic

Y_mic = Y_mic * Laenge_faktor
X_mic = X_mic * Breite_faktor


Y_mic = Y_mic + Laenge
X_mic = X_mic + Breite

Gpgga$ = "GPGGA," + Str(zeit) + ".000," + Str(x_mic) + ",N," + Str(y_mic) + ",E,1, 9,1.0, 142.1,M,47.5,M,,0000"
Gprmc$ = "GPRMC," + Str(zeit) + ".000,A," + Str(x_mic) + ",N," + Str(y_mic) + ",E," + Str(speed) + "," + Str(kurs) + ",291206,,,A"

Check = 0
For X = 1 To Len(gpgga$)
A$ = Mid(gpgga$ , X , 1)
Check = Check Xor Asc(a$)
Next
Hexx$ = Hex(check)
Print "$" ; Gpgga$ ; "*" ; Hexx$


Check = 0
For X = 1 To Len(gprmc$)
A$ = Mid(gprmc$ , X , 1)
Check = Check Xor Asc(a$)
Next
Hexx$ = Hex(check)
Print "$" ; Gprmc$ ; "*" ; Hexx$

Zeit = Zeit + 1

If Zeit = 1 Then Print "$GPGSA,A,3,30,25,24,31,06,21,07,16,10,,,,2.0,1.0,1.7*33"
If Zeit = 1 Then Print "$GPGSV,3,1,11,07,79,069,36,06,59,074,40,21,48,169,45,31,42,224,36*70"
If Zeit = 1 Then Print "$GPGSV,3,2,11,25,42,240,31,16,39,298,36,30,26,128,39,10,18,054,31*7B"
If Zeit = 1 Then Print "$GPGSV,3,3,11,24,15,042,25,23,07,311,18,13,07,341,*45"
If Zeit >= 9 Then Zeit = 0





Waitms 500


Goto Anfang












Zeitstop1:
   Stop Timer1
   Disable Int0


     Pulseout Porta , 0 , 500                               'Puls Rückmeldung


If Lautsprecher = 1 Then
   Timera = Timer1
   Laenge1 = Timer1
   Laenge1 = Laenge1 - Offset
   Laenge1 = Laenge1 / Faktor
End If

If Lautsprecher = 2 Then
   Timerb = Timer1
   Laenge2 = Timer1
   Laenge2 = Laenge2 - Offset
   Laenge2 = Laenge2 / Faktor
End If

 If Lautsprecher = 3 Then
   Timerc = Timer1
   Laenge3 = Timer1
   Laenge3 = Laenge3 - Offset
   Laenge3 = Laenge3 / Faktor
End If



     Return
     Return





Fehler:



Cls

Lcd "Fehler"
Wait 2

Goto Anfang


End