Danke für die Links, oberallgeier.
Ich habe mich jetzt dazu entschieden, den Sensor auf dem Servo immer auf 0 (100) zu stellen. Sobald der Sensor aber etwas "sieht", soll der Roboter stehen bleiben, auf beide seiten den Servo schwenken (50-150), zwei messerte nehmen, und beide vergleichen, bei dem der weniger hoch ist, soll der Roboter hinfahren. Also quazi soll der Roboter den "Besten Weg" finden. Ich weiss, die Sensoren sind nur auf 30cm ausgelegt, trotzdem soll es dem Roboter helfen, sich nicht in eine Ecke zu verfahren.
Ich habe das Programm geschriben
. Jedoch funktioniert das mit dem Servo noch nicht so ganz. Es schlägt nur auf eine Seite aus.
Der Sensor ist bei der Servoposition "100" nach gerade aus gerichtet.
Könntest du mal bitte kruz drüber schauen? *Keks gib* 
Code:
$regfile "m16def.dat"
$crystal = 16000000
$baud = 9600
$swstack = 16
$hwstack = 16
$framesize = 16
Dim A As Word
Dim B As Word
Dim C As Word
Dim X As Word
Dim Y As Word
Dim Z As Word
Config Portd.4 = Output
Config Portd.5 = Output
Config Porta.4 = Output
Config Porta.5 = Output
Config Porta.6 = Output
Config Portc.7 = Output
Config Portc.6 = Output
Config Portc.5 = Output
Config Portb.2 = Output
M1 Alias Porta.5
M2 Alias Porta.6
M3 Alias Portc.6
M4 Alias Portc.5
Config Servos = 1 , Servo1 = Portb.2 , Reload = 10
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 1
Enable Interrupts
Servo(1) = 100
Wait 1
Do
Pwm1a = 64
Pwm1b = 64
A = Getadc(1)
B = Getadc(2)
C = Getadc(3)
If A > 250 Then
Gosub Brems
Waitms 500
Gosub Rueck
Waitms 200
Gosub Rueckr
Waitms 400
Else
Gosub Vor
End If
If B > 250 Then
Gosub Brems
Waitms 500
Gosub Way
Gosub Rueck
Waitms 200
Gosub Rueckl
Waitms 400
Else
Gosub Vor
End If
If C > 250 Then
Gosub Brems
Waitms 500
Gosub Rueck
Waitms 200
Gosub Rueckr
Waitms 400
Else
Gosub Vor
End If
Waitms 40
Vor:
M1 = 0
M2 = 1
M3 = 0
M4 = 1
Return
Rueck:
M1 = 1
M2 = 0
M3 = 1
M4 = 0
Return
Brems:
M1 = 1
M2 = 1
M3 = 1
M4 = 1
Return
Rueckr:
M1 = 1
M2 = 0
M3 = 0
M4 = 0
Return
Rueckl:
M1 = 0
M2 = 0
M3 = 1
M4 = 0
Return
Vorr:
M1 = 0
M2 = 1
M3 = 0
M4 = 0
Return
Vorl:
M1 = 0
M2 = 0
M3 = 0
M4 = 1
Return
Way:
Servo(1) = 100
Waitms 100
X = Getadc(2)
Waitms 100
Servo(1) = 150
Y = Getadc(2)
Waitms 100
Servo(1) = 50
Waitms 300
Z = Getadc(2)
Waitms 100
If Y > Z Then
Gosub Rueckr
Waitms 500
Gosub Brems
Waitms 300
Gosub Vor
End If
If Y < Z Then
Gosub Rueckl
Waitms 500
Gosub Brems
Waitms 300
Gosub Vor
End If
Loop
Mfg JeyBee
Lesezeichen