PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Roboter Komplett Quellcode



davil
07.11.2003, 07:51
Kann denn nicht jemand mal ein kompletten Quelltext für einen Microcontroller hier rein stellen. Ich kann sowas nirgends finden.

wizzard
07.11.2003, 12:35
Das versteh ich nicht! Wie soll das denn jemand machen? Er weiss ja nicht, was du für Teile wie an deinem Bot hast!

davil
07.11.2003, 17:13
Hi, am liebsten Basic oder ASM für C-Control. Aber auch ein AVR-Mega8 Programm wäre schon hilfreich.
So unterschiedlich sind die Roboter doch nicht. Es geht mir ja nur um das Grundprinzip mit Sensorauswertung. Da kann man doch angeben an welchen Port was für ein Sensor dran hängt. Oft ist es doch eh ein oder zwei Sharp und nur ein paar Microschalter.
Halt einfach zum lernen.

Omitheuser
13.04.2004, 21:07
Hier Bitteschön, zu finden bei http://www.home.fh-karlsruhe.de/~saka0012!



'************************************************* *************************
'* 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