'----------------------------------------------------------------------------------------- 'Titel : Robotersteuerung 'Name : *.bas 'Autor : Arno Schweißinger 'Datum : 28.02.2005 'MicroContorller : AtMega8 4MHz 'Hardware : Display HD 44780-kompatibel, 2 Schrittmotoren, ' Treiber ULN 2803A, kleiner Lautprecher 'Stromversorgung: : 5V für Logik, 24V für Antrieb 'In Planung : RC5-IR Datenübertagung zum Roboter '-----------------------------------------------------------------------------------------
$regfile = "m8def.dat"
'$crystal = 4000000 $crystal = 1500000 '$baud = 9600 Config Lcd = 20 * 4 Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.5 , Rs = Portc.4
$lib "mcsbyte.lbx" 'use byte library for smaller code
'------------------------- ' Hauptprogramm '------------------------- Gosub Init Do Gosub Info_lcd Gosub Fahre_gerade ' Gosub Sensoren Loop End ' ende Hauptprogramm
'------------------------- ' Init Programm '------------------------- Init: ' Display Cursor Off Cls Locate 1 , 1 : Lcd " A utonomer" Locate 2 , 1 : Lcd " R oboter fuer" Locate 3 , 1 : Lcd " N ull" Locate 4 , 1 : Lcd " eur O"
' Räder Schrittmotoren links PinB.0-3 ' rechts PinD.4-7 Config Pinb.0 = Output Config Pinb.1 = Output Config Pinb.2 = Output Config Pinb.3 = Output Config Pind.4 = Output Config Pind.5 = Output Config Pind.6 = Output Config Pind.7 = Output
'Lautsprecher Lsp Alias Pind.0
'Taster - Kollisions Melder Kollision_li Alias Pind.2 Config Kollision_li = Input Kollision_re Alias Pind.3 Config Kollision_re = Input
Dim I As Byte ' Allgemeiner Zähler Dim Rad_re As Byte ' Position des Schrittmotors Dim Rad_li As Byte Dim Schritte_re As Byte ' Statistik Dim Schritte_li As Byte ' Statistik
' Bitmuster für Schrittmotor: Bit 0-3 Rad_li = &B00010001 Rad_re = &B10001000
' Roboter bereit Gosub Beep_lo_hi: Gosub Beep_lo_hi: Wait 1 Cls : Lcd "Fahre geradeaus" Return
'------------------------- ' Info ausgeben '------------------------- Info_lcd: Locate 3 , 1 Lcd "R=" ; Schritte_re ; " " Locate 3 , 7 Lcd "L=" ; Schritte_li ; " " Locate 4 , 1 Lcd Bin(pind) ' Motor bremsen ' Waitms 20 Return
'------------------------- ' Sensoren Taster '------------------------- ' abfragen Sensoren: If Kollision_re = 0 Then Gosub Angestossen_re End If If Kollision_li = 0 Then Gosub Angestossen_li End If Return
'------------------------- ' Aktoren Lautsprecher '------------------------- ' Tiefer Ton Beep_lo: Sound Lsp , 40 , 60 'BEEP Return ' ' Hoher Ton Beep_hi: Sound Lsp , 200 , 20 'BEEP Return
Beep_lo_hi: Gosub Beep_lo Gosub Beep_hi Return
'------------------------- ' Aktoren Motoren '------------------------- ' Richtungsänderung nach links Angestossen_re: Cls Lcd "Kollision Rechts" Gosub Ausweichen_zurueck Locate 2 , 11 : Lcd " -> links" Gosub Beep_lo For I = 1 To 35 Gosub Info_lcd Gosub Drehe_rechts Next I Gosub Beep_hi Cls Return
' Richtungsänderung nach rechts Angestossen_li: Cls Lcd "Kollision Links" Gosub Ausweichen_zurueck Locate 2 , 11 : Lcd " -> rechts" Gosub Beep_lo For I = 1 To 35 Gosub Info_lcd Gosub Drehe_links Next I Gosub Beep_hi Cls Return
Ausweichen_zurueck: Locate 2 , 1 : Lcd "-> zurueck" Gosub Beep_lo_hi: For I = 1 To 20 Gosub Info_lcd Gosub Fahre_zurueck Next I Return
'------------------------- ' Motorsteuerung Einzelschritte '------------------------- ' Beide Motoren Vortrieb Fahre_gerade: Incr Schritte_li Incr Schritte_re Rotate Rad_li , Right , 1 Rotate Rad_re , Left , 1 Gosub Raeder_drehen Return
' Beide Motoren rückwärts Fahre_zurueck: Decr Schritte_li Decr Schritte_re Rotate Rad_li , Left , 1 Rotate Rad_re , Right , 1 Gosub Raeder_drehen Return
' Rechter Motor Vortrieb ' Linker Motor Rückschritt Drehe_rechts: Decr Schritte_li Incr Schritte_re Rotate Rad_li , Right , 1 Rotate Rad_re , Right , 1 Gosub Raeder_drehen Return
' Linker Motor Vortrieb ' Rechter Motor Rückschritt Drehe_links: Incr Schritte_li Decr Schritte_re Rotate Rad_li , Left , 1 Rotate Rad_re , Left , 1 Gosub Raeder_drehen Return
Raeder_drehen: Portb.0 = Rad_li.0 Portb.1 = Rad_li.1 Portb.2 = Rad_li.2 Portb.3 = Rad_li.3
Portd.4 = Rad_re.0 Portd.5 = Rad_re.1 Portd.6 = Rad_re.2 Portd.7 = Rad_re.3 Return
|