Ein Beispiel und Testprogramm in Basic
Code:
'###################################################
'rnsteuerung.bas Demo zu RN-Steuerung
'für
'RoboterNetz Board RN-STEUERUNG ab Version 1.0 und
'
'Aufgabe:
' Dieses Testprogramm demonstriert die Ansteuerung
' des großen universellen Steuerboardes RN-Steuerung
'Autor: Frank
'Weitere Beispiele und Beschreibung der Hardware
'unter http://www.Roboternetz.de oder robotikhardware.de
'Eigene Programmbeispiele sind im Roboternetz gerne willkommen!
'##############################################################
' ********* Übliche bei RN-Steuerung ***************
Declare Sub Init_digitalanzeige()
Declare Sub Ziffer_digitalanzeige(byval Ziffernummer As Byte , Byval Zahl As Byte , Byval Dezimalpunkt As Byte)
Declare Sub Zahl_digitalanzeige(byval Zahl As Integer)
Declare Function Rn_sendefunkbefehl(byval Funkbefehl As String) As Byte
Declare Function Rn_empfange_funkstring(dat As String) As Byte
$regfile = "m32def.dat"
$hwstack = 82 '80
$framesize = 68 ' 64
$swstack = 68 '44
$crystal = 7372800 'Quarzfrequenz
$baud = 19200
Config Scl = Portc.0 'Ports fuer IIC-Bus
Config Sda = Portc.1
Config Pinb.2 = Input
Portb.2 = 1
Taste1 Alias Pinb.2
Config Pinb.5 = Input
Portb.5 = 1
Taste2 Alias Pinb.5
Config Pinb.6 = Input
Portb.6 = 1
Taste3 Alias Pinb.6
Config Pinb.3 = Output
Alarmgeber Alias Portb.3
Config Pinb.4 = Output
Relais1 Alias Portb.4
Config Pinc.7 = Output
Relais2 Alias Portc.7
Config Pinc.2 = Output
Ledgruen Alias Portc.2
Config Pinc.3 = Output
Ledgelb Alias Portc.3
Config Pinc.4 = Output
Ledrot Alias Portc.4
Config Pinc.6 = Output
Ausgang_ua Alias Portc.6
Config Pinc.5 = Output
Ausgang_ub Alias Portc.5
Const Slave_digi = &H70
Sound Portb.7 , 400 , 450 'BEEP
Sound Portb.7 , 400 , 250 'BEEP
Sound Portb.7 , 400 , 450 'BEEP
' ********* Übliche bei RN-Steuerung Ende***************
Config Serialin = Buffered , Size = 120
Config Serialout = Buffered , Size = 120
Enable Interrupts
Dim I As Integer
Dim P As Byte
Dim U As Byte
Dim Rueck As Byte
Dim S As String * 90
Wait 1
Print
Print "**** RN-STEUERUNG *****"
Print "Das neue große komplette Steuerboard"
Print
I2cinit
Init_digitalanzeige
Wait 1
'Testet Funkmodul und sendet Version zurück
'Alarmgeber ertönnt sofort, wenn Befehl nicht als Echo zurückkommt
'Denkbare Ursache: Falsche Baudrate eingestellt (bei neuen Modulen in der Regel 19200 baud)
'Ruft die Firmware Versionsnummer des Easyradio Funkmodules ab
Rueck = Rn_sendefunkbefehl( "ER_CMD#T3")
If Rueck <> 0 Then 'Error
For I = 1 To 20
Alarmgeber = 1
Waitms 100
Alarmgeber = 0
Waitms 100
Next
End If
Rueck = Rn_empfange_funkstring(s)
Print "Funkmodul Version: " ; S
'Test der vierstelligen Digitalanzeige
'Nacheinander alle Ziffern bis 9 hochzählen
For P = 1 To 4
For U = 0 To 9
Ziffer_digitalanzeige P , U , 0
Waitms 100
Next U
Next P
Wait 2
'Test der vierstelligen Digitalanzeige
'Zählt in hoher Geschwindigkeit bis 4000
For I = 1 To 4000
Zahl_digitalanzeige I
Waitms 5
Next
Wait 1
'LED Test durch Lauflicht
For I = 1 To 20
Ledrot = 0
Waitms 400
Ledrot = 1
Ledgelb = 0
Waitms 400
Ledgelb = 1
Ledgruen = 0
Waitms 400
Ledgruen = 1
Waitms 400
Next
Ledgruen = 0 'Gruen bleibt an
Wait 1
'Relais 1 wird getestet
For I = 1 To 20
Relais1 = 1
Wait 1
Relais1 = 0
Wait 1
Next
Wait 1
'Relais 2 wird getestet
For I = 1 To 20
Relais2 = 1
Wait 1
Relais2 = 0
Wait 1
Next
Wait 1
'Ausgangsspannung des elektronischen Power Schlaters UA umschalten
'Nicht sichtbar, entweder Verbraucher anschliessen oder messen
For I = 1 To 5
Sound Portb.7 , 400 , 250 'BEEP
Ausgang_ua = 1
Wait 2
Sound Portb.7 , 400 , 250 'BEEP
Ausgang_ua = 0
Wait 2
Next
Wait 1
'Ausgangsspannung des elektronischen Power Schlaters UB umschalten
'Nicht sichtbar, entweder Verbraucher anschliessen oder messen
For I = 1 To 5
Sound Portb.7 , 400 , 250 'BEEP
Ausgang_ub = 1
Wait 2
Sound Portb.7 , 400 , 250 'BEEP
Ausgang_ub = 0
Wait 2
Next
Wait 1
'Alarm wird getestet
For I = 1 To 20
Alarmgeber = 1
Waitms 100
Alarmgeber = 0
Waitms 100
Next
Wait 1
'Test abgeschlossen, nun wird noch ständig über Funk gesendet
' Funkmodultest
Do
For I = 1 To 30000
Print "www.robotikhardware.de Z:" ; I
Waitms 500
Next I
Loop
End
' ----------------- Hilfreiche Unterfunktionen ------------------------
Sub Init_digitalanzeige()
Local Z As Byte
I2cstart
I2cwbyte Slave_digi
I2cwbyte 0 'Control Byte
'Dynamic Alternative Mode und Helligkeit
'Die oberen 3 Bits bestimmen die Helligkeit
'Wenn es dunkler sein soll dann z.b. &B0110111
' I2cwbyte &B1110111
I2cwbyte &B0110111
I2cstop
'Alle Ziffern auf 0
For Z = 1 To 4
Ziffer_digitalanzeige Z , 0 , 0
Next Z
End Sub
Sub Ziffer_digitalanzeige(byval Ziffernummer As Byte , Byval Zahl As Byte , Byval Dezimalpunkt As Byte)
Local Segmente As Byte
I2cstart
I2cwbyte Slave_digi
I2cwbyte Ziffernummer
Select Case Zahl
Case 0:
Segmente = &H3F '00111111
Case 1:
Segmente = &H06
Case 2:
Segmente = &H5B
Case 3:
Segmente = &H4F '01001111
Case 4:
Segmente = &H66
Case 5:
Segmente = &H6D
Case 6:
Segmente = &H7D
Case 7:
Segmente = &H07
Case 8:
Segmente = &H7F '01111111
Case 9:
Segmente = &H67
Case 10: 'Steht für keine Ziffer
Segmente = &H0
Case 11: 'Steht für keine Ziffer
Segmente = &B10111110 'Buchstabe V
Case 12: 'Steht für keine Ziffer
Segmente = &B10111000 'Buchstabe L
Case Else :
Segmente = &H80 'Ansonsten Dezimalpunkt
End Select
If Dezimalpunkt = Ziffernummer Then Segmente = Segmente Or &H80
I2cwbyte Segmente
I2cstop
End Sub
Sub Zahl_digitalanzeige(byval Zahl As Integer)
Local Tausender As Integer
Local Hunderter As Integer
Local Zehner As Byte
Local Einer As Byte
Local Temp As Integer
Local Temp2 As Byte
Local Abschneiden As Byte
Tausender = Zahl / 1000
Temp = Tausender * 1000
Zahl = Zahl - Temp
Hunderter = Zahl / 100
Temp = Hunderter * 100
Zahl = Zahl - Temp
Zehner = Zahl / 10
Temp = Zehner * 10
Zahl = Zahl - Temp
Einer = Zahl
'Nullen vorne entfernen
If Tausender = 0 Then
Tausender = 10
If Hunderter = 0 Then
Hunderter = 10
If Zehner = 0 Then
Zehner = 10
End If
End If
End If
Ziffer_digitalanzeige 4 , Einer , 0
Ziffer_digitalanzeige 3 , Zehner , 0
Temp2 = Hunderter
Ziffer_digitalanzeige 2 , Temp2 , 0
Temp2 = Tausender
Ziffer_digitalanzeige 1 , Temp2 , 0
End Sub
'Sendet Easyradio Befehl und prüft ob korrekt empfangen
'Rückgabe: 0=Erfolgreich 1=Fehler
Function Rn_sendefunkbefehl(byval Funkbefehl As String) As Byte
Local Sech As String * 20
Local Z As Byte
Print Funkbefehl;
Waitms 40
Sech = ""
Do 'Auf Echo warten
Z = Inkey()
Sech = Sech + Chr(z)
Loop Until Z = 0
If Left(sech , 9) = Funkbefehl Then
Print "ACK";
Rn_sendefunkbefehl = 0
Else
Rn_sendefunkbefehl = 1
End If
End Function
'Empfängt Datenstring (Holt alles aus dem Eingabebuffer)
'Rückgabe: 0=Erfolgreich 1=Fehler
Function Rn_empfange_funkstring(dat As String) As Byte
Local Z As Byte
Waitms 20
Dat = ""
Do 'Auf Echo warten
Z = Inkey()
If Z <> 0 Then Dat = Dat + Chr(z)
Loop Until Z = 0
Rn_empfange_funkstring = 0
End Function
Lesezeichen