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






Zitieren


Lesezeichen