Hab mal mein Programm für den ersten Roboter geschrieben:
Funktioniert das so wohl? Bin noch etwas unsicher.Code:$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
Später sollen die Sensoren dann über Interrupts laufen.
MFG







Zitieren

Lesezeichen