Hallo,
so funktioniert es. Getestet mit Version 1.11.8.3 im Simulator.
Code:
'Winkelmessung mit dem Sensor MLX 90316 und Ausgabe der Gradanzeige
'über den Controler RN-MiniControl von Robotikhardware auf das Display
'Wintek 27 * 4 von Pollin
'>>>Besondere Lernleistung von Felix König<<<
$regfile = "m168def.dat" 'Controller definieren
$crystal = 16000000 'Quarzfrequenz
$baud = 9600 'Übertragungsrate in Baud
$hwstack = 32
$framesize = 32
$swstack = 32
'Die üblichen Definitionen bei Standardprogrammen auf Miniboard
'Hier kommt die Ausgabe auf das Display
Config Lcd = 40 * 4 'Bascom kennt keine Displays mit 27 * 4 Zeichen,
'daher 40 * 4 verwenden
Config Lcdpin = Pin , Db4 = Portb.5 , Db5 = Portb.0 , Db6 = Portd.7 , Db7 = Portd.6 , E = Portb.3 , E2 = Portc.3 , Rs = Portd.3
'man achte auf die Ergänzung E2 für den 2. Steuerkontroller des Displays
Dim ___lcdno As Byte 'Systemvariable der LCD-Bibliothek
___lcdno = 0 'wählt den ersten Chip aus
Initlcd 'die beiden oberen Zeilen initialisieren
Cls 'die beiden oberen Zeilen löschen
___lcdno = 1 'auf Chip 2 schalten
Initlcd 'die beiden unteren Zeilen initialisieren
Cls 'die beiden unteren Zeilen löschen
___lcdno = 0 'wählt die obere Zeile aus
Locate 1 , 1 'schreibt in die erste Zeile an Position 1
Lcd " Besondere Lernleistung "; 'den Text in Anführungszeichen
Locate 2 , 1 'schreibt in die zweite Zeile an Position 1
Lcd " von Felix Koenig 13 BGD" 'den Text in Anführungszeichen
Cursor Off 'unterdrückt den Cursor
___lcdno = 1 'wählt die beiden unteren Zeilen aus
Locate 1 , 1 'Wiederholt die Displayausgabe auf den unteren
Lcd "Windrichtung : "; '2 Zeilen
Locate 2 , 1
Lcd "Grad : "
Cursor Off 'unterdrückt den Cursor
'Hier kommt die Sensorwerterfassung
Config Adc = Single , Prescaler = Auto , Reference = Avcc 'Konfiguriert den AD Wandler
Start Adc 'Startet den AD Wandler
Config Pinc.2 = Input 'ADC 2 an Ctrl
Dim Sensor As Long 'Deklariert "Sensor" als Long mit 4 Byte Zeichenvorrat
Dim Grad As Single 'Deklariert die Gradvariable "Grad" als Single
Dim Grad_mit_einer_kommastelle As String * 5
Do ' Beginnt die Abfrageschleife zur Werteerfassung
Sensor = 0 'Initialisiert die Variablen Sensor, Grad, Grad2
Grad = 0
Sensor = Getadc(2) 'Der AD Wert wird am Pin C2 abgelesen und in die Variable "Sensor" geschrieben
Grad = Sensor - 50 ' ((-50+Sensor)*360)/922
Grad = Grad * 360
Grad = Grad / 922 'Ergebnis als Gradwert mit Kommastellen
Grad_mit_einer_kommastelle = Fusing(grad , "#.#")
Print "Grad: " ; Grad_mit_einer_kommastelle
'Hierhin kommt die Anzeige der Ausgesprochenen Windrichtung (NOSW)
Select Case Grad
___lcdno = 1
Case Is > 337.5 : Print "Nord" ;
Locate 1 , 16
Lcd "Nord"
Case 292.5 To 337.4 : Print "Nord/West" ;
Locate 1 , 16
Lcd "Nord/West"
Case 247.5 To 292.4 : Print "West" ;
Locate 1 , 16
Lcd "West"
Case 202.5 To 247.4 : Print "Sued/West" ;
Locate 1 , 16
Lcd "Sued/West"
Case 157.5 To 202.4 : Print "Sued" ;
Locate 1 , 16
Lcd "Sued"
Case 112.5 To 157.4 : Print "Sued/Ost" ;
Locate 1 , 16
Lcd "Sued/Ost"
Case 67.5 To 112.4 : Print "Ost" ;
Locate 1 , 16
Lcd "Ost"
Case 22.5 To 67.4 : Print "Nord/Ost" ;
Locate 1 , 16
Lcd "Nord/Ost"
Case Is < 22.4 : Print "Nord" ;
Locate 1 , 16
Lcd "Nord"
Case Else : Print "Error" ;
Locate 1 , 16
Lcd "Error"
End Select
Print " "
___lcdno = 1 'wählt die unteren 2 Zeilen aus
Locate 2 , 8
Lcd Grad_mit_einer_kommastelle ; "^"
Waitms 500 '500 ms Wartezeit zwischen der Abfragewiederholung
___lcdno = 1 'Löschen der vorherig angezeigten Werte auf dem Display
Locate 1 , 16
Lcd " "
Locate 2 , 8
Lcd " "
Loop 'Ende der Ausführungsschleife
'und Sprung zum Anfang der Schleife
End 'Programmende
Gruß
Günter
Lesezeichen