JeyBee
27.10.2008, 22:04
Hallo Leute,
Ich habe soeben meinen ersten Roboter zusammen gebastelt. Ich möchte als erstes nur schauen, dass der Roboter nirgens hinein fährt. Dazu habe ich drei Sharp Infrarot Sensoren an der Fron befestig. Einer gerade aus und je einer links und recht in einem 30° Winkel (schätzungsweise).
Ich habe das Programm im Anhang, welches ich geschriben habe. Ich habe es geflash und gleich ausprobiert. Ich freute mich tierisch, als ich merkte, dass es direkt funktionierte. Jedoch hielt die Freude nicht lange. Sobal der Roboter zwei bis drei Hindernissen ausgewichen ist, spielt er komplett verrückt. er denkt, dass es nur noch Hindernisse gibt und fährt rückwärts Kurven. Wenn ich den Bot resete, geht das Spiel wieder von Vorne los.
Als Info: M1-M4 sind die Ausgänge für die zwei Motoren, ich verwende das L293D IC.
A-C sind die drei Sensoren (A rechts, B mitte, C links)
Ich hoffe ihr könnt mir helfen, ich konnte den Fehler bisslang nicht finden.
Hier das Programm:
$regfile "m16def.dat"
$crystal = 16000000
Dim A As Word
Dim B As Word
Dim C As Word
Config Porta.4 = Output
Config Porta.5 = Output
Config Porta.6 = Output
Config Portc.7 = Output
Config Portc.6 = Output
Config Portc.5 = Output
M1 Alias Porta.5
M2 Alias Porta.6
M3 Alias Portc.6
M4 Alias Portc.5
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
Do
Porta.4 = 1
Portc.7 = 1
A = Getadc(1)
B = Getadc(2)
C = Getadc(3)
If A > 150 Then
M1 = 1
M2 = 1
M3 = 1
M4 = 1
Waitms 500
M1 = 0
M2 = 1
M3 = 0
M4 = 0
Wait 1
Else
M1 = 0
M2 = 1
M3 = 0
M4 = 1
End If
If B > 200 Then
M1 = 1
M2 = 1
M3 = 1
M4 = 1
Waitms 500
M1 = 1
M2 = 0
M3 = 0
M4 = 0
Wait 1
Else
M1 = 0
M2 = 1
M3 = 0
M4 = 1
End If
If C > 200 Then
M1 = 1
M2 = 1
M3 = 1
M4 = 1
Waitms 500
M1 = 0
M2 = 0
M3 = 1
M4 = 0
Wait 1
Else
M1 = 0
M2 = 1
M3 = 0
M4 = 1
End If
Loop
Ich habe soeben meinen ersten Roboter zusammen gebastelt. Ich möchte als erstes nur schauen, dass der Roboter nirgens hinein fährt. Dazu habe ich drei Sharp Infrarot Sensoren an der Fron befestig. Einer gerade aus und je einer links und recht in einem 30° Winkel (schätzungsweise).
Ich habe das Programm im Anhang, welches ich geschriben habe. Ich habe es geflash und gleich ausprobiert. Ich freute mich tierisch, als ich merkte, dass es direkt funktionierte. Jedoch hielt die Freude nicht lange. Sobal der Roboter zwei bis drei Hindernissen ausgewichen ist, spielt er komplett verrückt. er denkt, dass es nur noch Hindernisse gibt und fährt rückwärts Kurven. Wenn ich den Bot resete, geht das Spiel wieder von Vorne los.
Als Info: M1-M4 sind die Ausgänge für die zwei Motoren, ich verwende das L293D IC.
A-C sind die drei Sensoren (A rechts, B mitte, C links)
Ich hoffe ihr könnt mir helfen, ich konnte den Fehler bisslang nicht finden.
Hier das Programm:
$regfile "m16def.dat"
$crystal = 16000000
Dim A As Word
Dim B As Word
Dim C As Word
Config Porta.4 = Output
Config Porta.5 = Output
Config Porta.6 = Output
Config Portc.7 = Output
Config Portc.6 = Output
Config Portc.5 = Output
M1 Alias Porta.5
M2 Alias Porta.6
M3 Alias Portc.6
M4 Alias Portc.5
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
Do
Porta.4 = 1
Portc.7 = 1
A = Getadc(1)
B = Getadc(2)
C = Getadc(3)
If A > 150 Then
M1 = 1
M2 = 1
M3 = 1
M4 = 1
Waitms 500
M1 = 0
M2 = 1
M3 = 0
M4 = 0
Wait 1
Else
M1 = 0
M2 = 1
M3 = 0
M4 = 1
End If
If B > 200 Then
M1 = 1
M2 = 1
M3 = 1
M4 = 1
Waitms 500
M1 = 1
M2 = 0
M3 = 0
M4 = 0
Wait 1
Else
M1 = 0
M2 = 1
M3 = 0
M4 = 1
End If
If C > 200 Then
M1 = 1
M2 = 1
M3 = 1
M4 = 1
Waitms 500
M1 = 0
M2 = 0
M3 = 1
M4 = 0
Wait 1
Else
M1 = 0
M2 = 1
M3 = 0
M4 = 1
End If
Loop