roboter
03.01.2005, 01: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
$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