Hier Bitteschön, zu finden bei http://www.home.fh-karlsruhe.de/~saka0012!
Code:
'**************************************************************************
'* Roboter.BAS *
'**************************************************************************
'* Beispielprogramm zur Steuerung eines einfachen Roboters mit 90S8535 *
'* Controller mit 8 MHz. *
'**************************************************************************
'* Version: 1.0 *
'* Datum: 21.10.2001 *
'* Autor: Kai Sachsenheimer *
'**************************************************************************
'**************************************************************************
'**************************************************************************
'* Deklaration der Ports und Variablen: *
'**************************************************************************
'* Port D = Servos bzw. Motoren *
'* Port C = IR Sensoren *
'* Port A = Taster *
'**************************************************************************
Config Portd = Output
Config Portc = Input
Config Pina.0 = Input
Dim X As Byte
Dim Weg As Byte
Dim Y As Byte
Dim Zufallszahl As Byte
Dim Servor As Integer
Dim Servol As Integer
'**************************************************************************
'* Initialisierung der Variablen: *
'**************************************************************************
X = 0
Y = 0
Servor = 0
Servol = 0
Losgehts:
'Warten bis Taster am Port A.0 high ist.
Bitwait Pina.0 , Set
Sense:
If Y = 10 Then Goto Ausweichen
'**************************************************************************
'* Auswertung der IR-Sensoren: *
'**************************************************************************
'* Sensoren-Port-Belegung: *
'* IR Links außen = C.4 *
'* IR Links mitte = C.3 *
'* IR Mitte = C.2 *
'* IR rechts mitte = C.1 *
'* IR rechts außen = C.0 *
'* Erkanntes Hindernis: Sensor meldet 0 *
'**************************************************************************
Select Case Pinc
'Kein Hinderniss wird nicht benötigt
'Case &B00011111 : Goto -----------
Case &B00011110 : Goto Linksaussen
Case &B00011101 : Goto Linksmitte
Case &B00011100 : Goto Linksbeide
Case &B00011011 : Goto Zurueck
Case &B00011010 : Goto Linksaussen
Case &B00011001 : Goto Zurueck
Case &B00011000 : Goto Linksaussen
Case &B00010111 : Goto Rechtsmitte
Case &B00010110 : Goto Zurueck
Case &B00010101 : Goto Zurueck
Case &B00010100 : Goto Linksaussen
Case &B00010011 : Goto Rechtsmitte
Case &B00010010 : Goto Linksaussen
Case &B00010001 : Goto Zurueck
Case &B00010000 : Goto Linksaussen
Case &B00001111 : Goto Rechtsaussen
Case &B00001110 : Goto Zurueck
Case &B00001101 : Goto Zurueck
Case &B00001100 : Goto Zurueck
Case &B00001011 : Goto Rechtsaussen
Case &B00001010 : Goto Zurueck
Case &B00001001 : Goto Zurueck
Case &B00001000 : Goto Linksaussen
Case &B00000111 : Goto Rechtsbeide
Case &B00000110 : Goto Rechtsaussen
Case &B00000101 : Goto Rechtsaussen
Case &B00000100 : Goto Zurueck
Case &B00000011 : Goto Rechtsaussen
Case &B00000010 : Goto Rechtsaussen
Case &B00000001 : Goto Rechtsaussen
Case &B00000000 : Goto Zurueck
End Select
'Fährt geradeaus
Fahren:
Servor = 2
Servol = 1
Weg = 2
Y = 0
Goto Motoren
'Fährt links
Linksaussen:
Servor = 2
Servol = 2
Weg = 10
Y = Y + 1
Goto Motoren
'Fährt links
Linksmitte:
Servor = 2
Servol = 2
Weg = 20
Y = Y + 1
Goto Motoren
'Fährt links
Linksbeide:
Servor = 2
Servol = 2
Weg = 15
Y = Y + 1
Goto Motoren
'Fährt rechts
Rechtsaussen:
Servor = 1
Servol = 1
Weg = 10
Y = Y + 1
Goto Motoren
'Fährt rechts
Rechtsmitte:
Servor = 1
Servol = 1
Weg = 105
Y = Y + 1
Goto Motoren
'Fährt rechts
Rechtsbeide:
Servor = 1
Servol = 1
Weg = 202
Y = Y + 1
Goto Motoren
'Fährt zrück
Zurueck:
Servor = 1
Servol = 2
Weg = 100
Goto Motoren
'**************************************************************************
'* Motorsteuerung: *
'**************************************************************************
'* Portd.3 = Servo rechts *
'* Portd.4 = Servo links *
'**************************************************************************
Motoren:
For X = 1 To Weg
Portd.3 = 1
Waitms Servor
Portd.3 = 0
Portd.4 = 1
Waitms Servol
Portd.4 = 0
Waitms 15
Next
Goto Sense
'**************************************************************************
'* Ausweichen: *
'**************************************************************************
'* Y wird um eins erhöht, wenn der Roboter immer nach links bzw. nach *
'* rechts fährt ohne sich dabei nach vorwärts zu fahren. *
'* Ist der Roboter 10 mal nach links bzw. recht gefahren (hat sich an *
'* einem Hindernis festgefahren) wird die Ausweich-Routine gestartet. *
'* Zufallszahlen werden generiert, um den Robo zufällig nach links oder *
'* rechts zu steuern. *
'**************************************************************************
Ausweichen:
Y = 0
Zufallszahl = Rnd(11)
For X = 1 To 150
Portd.3 = 1
Waitms 1
Portd.3 = 0
Portd.4 = 1
Waitms 2
Portd.4 = 0
Waitms 15
Next
If Zufallszahl > 5 Then Goto Linksaussen Else Goto Rechtsaussen
Lesezeichen