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
Deflcdchar 0 , 10 , 32 , 14 , 17 , 17 , 17 , 14 , 32 ' Chr(0) --> ö
Deflcdchar 1 , 32 , 32 , 15 , 17 , 17 , 15 , 1 , 30 ' Chr(1) --> g
Deflcdchar 2 , 10 , 32 , 32 , 17 , 17 , 17 , 14 , 32 ' Chr(2) --> ü
Deflcdchar 3 , 6 , 9 , 9 , 6 , 32 , 32 , 32 , 32 ' Chr(3) --> °
Initlcd 'die beiden oberen Zeilen initialisieren
Cls 'die beiden oberen Zeilen löschen
___lcdno = 1 'auf Chip 2 schalten
Deflcdchar 0 , 10 , 32 , 14 , 17 , 17 , 17 , 14 , 32 ' Chr(0) --> ö
Deflcdchar 1 , 32 , 32 , 15 , 17 , 17 , 15 , 1 , 30 ' Chr(1) --> g
Deflcdchar 2 , 10 , 32 , 32 , 17 , 17 , 17 , 14 , 32 ' Chr(2) --> ü
Deflcdchar 3 , 6 , 9 , 9 , 6 , 32 , 32 , 32 , 32 ' Chr(3) --> °
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 Lernleistun" ; Chr(1) ; " "; 'den Text in Anführungszeichen
Locate 2 , 1 'schreibt in die zweite Zeile an Position 1
Lcd " von Felix K" ; Chr(0) ; "ni" ; Chr(1) ; " 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 "Windrichtun" ; Chr(1) ; " : "; '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 "S" ; Chr(2) ; "d/West" ;
Locate 1 , 16
Lcd "S" ; Chr(2) ; "d/West"
Case 157.5 To 202.4 : Print "S" ; Chr(2) ; "d" ;
Locate 1 , 16
Lcd "S" ; Chr(2) ; "d"
Case 112.5 To 157.4 : Print "S" ; Chr(2) ; "d/Ost" ;
Locate 1 , 16
Lcd "S" ; Chr(2) ; "d/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 ; Chr(3)
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
Hoffe dass es dafür eine Lösung gibt
Lesezeichen