PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Programm für den ersten Roboter --> So richtig???



roboter
03.01.2005, 00:08
Hab mal mein Programm für den ersten Roboter geschrieben:

$regfile = "m16def.dat"
$crystal = 16000000

Dim I As Byte
I = 0

' Sensoren: 2 IS471
' Motorsteuerung mit L293D

' Pind.6 = linker Sensor
' Pind.7 = rechter Sensor
' Portd.4 = linker Motor vorwärts/rückwärts
' Portd.5 = rechter Motor vorwärts/rückwärts
' Portd.2 = linker Motor an/aus
' Portd.3 = rechter Motor an/aus
Ddrd = 00111111 ' Pind.6 und Pind.7 = Input / Rest Output
Portd = 11000000 ' Pullup von Pind.6 und Pind.7 aktivieren
' Pind.6 = linker Sensor
' Pind.7 = rechter Sensor
' Portd.4 = linker Motor vorwärts/rückwärts
' Portd.5 = rechter Motor vorwärts/rückwärts
' Portd.2 = linker Motor an/aus
' Portd.3 = rechter Motor an/aus

Portd. 2 = 0 ' linker Motor aus
Portd. 3 = 0 ' rechter Motor aus

Cls
Locate 2 , 1
Lcd " Start in 5"
Locate 3 , 1
Lcd " Sekunden"
Waitms 5000

Cls
Portd. 2 = 0 ' linker Motor aus
Portd. 3 = 0 ' rechter Motor aus

Do
If Pind.7 = 0 Then
If Pind.6 = 0 Then ' wenn kein Sensor ein Hindernis meldet
If I <> 1 Then
Cls
Locate 1 , 1
Lcd "Kein Hindernis"
Locate 2 , 1
Lcd "geradeaus fahren"
End If
I = 1
Portd.5 = 1 ' rechter Motor vorwärts
Portd.4 = 1 ' linker Motor vorwärts
Else ' wenn der linker Sensor ein Hindernis meldet
Portd.2 = 0 ' linker Motor aus
Portd.3 = 0 ' rechter Motor aus
If I <> 2 Then
Cls
Locate 1 , 1
Lcd "Hindernis links"
Locate 2 , 1
Lcd "-> Links vorbei"
Locate 3 , 1
Lcd "fahren"

End If
I = 2
Portd.5 = 0 ' rechter Motor rückwärts
Portd.3 = 1 ' rechter Motor an
Waitms 1500
Portd.3 = 0 ' rechter Motor aus
Portd.2 = 1 ' Linker Motor wieder an und vorwärts
Waitms 1000
Portd.5 = 1 ' rechter Motor vorwärts
Portd.3 = 1 ' rechter Motor wieder an
End If
Else
If Pind.6 = 0 Then ' wenn rechter Sensor Hindernis meldet
Portd.3 = 0 ' rechter Motor aus
Portd.2 = 0 ' linker Motor aus
If I <> 3 Then
Cls
Locate 1 , 1
Lcd "Hindernis rechts"
Locate 2 , 1
Lcd "-> rechts vorbei"
Locate 3 , 1
Lcd "fahren"
End If
I = 3
Portd.4 = 0 ' linker Motor rückwärts
Portd.2 = 1 ' Linker Motor an
Waitms 1500
Portd.2 = 0 ' linker Motor aus
Portd.3 = 1 ' rechter Motor wieder an und vorwärts
Waitms 1000
Portd.4 = 1 ' linker Motor vorwärts
Portd.2 = 1 ' linker Motor wieder an
Else ' wenn beide Sensoren Hindernis melden
Portd.3 = 0 ' rechter Motor aus
Portd.2 = 0 ' linker Motor aus
If I <> 4 Then
Cls
Locate 1 , 1
Lcd " Hindernis"
Locate 2 , 1
Lcd "-> umdrehen"
End If
I = 4
Portd.3 = 1 ' rechter Motor an
Portd.2 = 1 ' linker Motor an
Portd.4 = 0 ' linker Motor rückwärts
Waitms 3000
Portd.4 = 1 ' linker Motor vorwärts
End If
End If
Loop

End 'end program


Funktioniert das so wohl? Bin noch etwas unsicher.
Später sollen die Sensoren dann über Interrupts laufen.

MFG

zwerg1
03.01.2005, 08:36
Probiers doch einfach aus
Probieren geht über studieren