Hab mich mal an den Algo gesetzt, habe aber im Moment das Problem, dass die rechte Seite immer langsamer wird. Sollte doch nach dem Programm nicht so sein, oder?
Kann sich jemand das mal bitte anschauen?
jonCode:'############################################################################### 'Programm zum Geradeausfahren mit Hilfe des Kompass CMPS03 ' 'Geht nicht! Warum?? 'Wert für Servo_1 wird die ganze Zeit nur erhöht, nicht erniedrigt. ' 'Autor: RN_jon 'Datum: 16.08.2007 '############################################################################### Declare Function Cmps_himmelsrichtung() As Word $regfile = "m32def.dat" $crystal = 16000000 $baud = 19200 $framesize = 42 $swstack = 32 $hwstack = 32 'I2C Config Scl = Portc.0 Config Sda = Portc.1 'Variablen für Kompass Dim Himmelsrichtung As Word Dim Grad As Single 'LEDs Config Portd.4 = Output 'rot Config Portd.5 = Output 'gelb Config Portd.6 = Output 'grün 'Motoren: Config Servos = 2 , Servo1 = Portc.2 , Servo2 = Portc.3 , Reload = 5 Config Portc.2 = Output 'rechts Config Portc.3 = Output 'links Enable Interrupts Dim Servo_1 As Byte Dim Servo_2 As Byte '192 = Stopp '128 = Vollgas vor '255 = Vollgas rück 'Variablen für Geradeausfahrt Dim Start_cmps As Single '+++++++++++++++++++++++++ Portd.4 = 1 Portd.5 = 1 Portd.6 = 1 Portd.4 = 0 Waitms 500 Portd.4 = 1 Portd.5 = 0 Waitms 500 Portd.5 = 1 Portd.6 = 0 Waitms 500 Portd.6 = 1 '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Wait 1 Servo_1 = 140 Servo_2 = 140 Himmelsrichtung = Cmps_himmelsrichtung() Start_cmps = Himmelsrichtung / 10 Print "Startausrichtung: " ; Start_cmps Do Servo(1) = Servo_1 Servo(2) = Servo_2 Himmelsrichtung = Cmps_himmelsrichtung() Grad = Himmelsrichtung / 10 Print "Fahrtausrichtung: " ; Grad If Grad < Start_cmps Then 'nach rechts drehen Servo_1 = Servo_1 + 2 End If If Grad > Start_cmps Then 'nach links drehen Servo_1 = Servo_1 - 2 End If Waitms 200 Print "Servo_1: " ; Servo_1 Print "Servo_2: " ; Servo_2 Loop End '+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Function Cmps_himmelsrichtung() As Word Local Lob As Byte Local Hib As Byte I2cstart I2cwbyte &HC0 I2cwbyte 2 I2cstop I2cstart I2cwbyte &HC1 I2crbyte Hib , Ack I2crbyte Lob , Nack I2cstop Cmps_himmelsrichtung = Makeint(lob , Hib) End Function
P.S.: Es ist im Moment so, dass es nicht funktionieren würde, wenn der Bot über die 360° fährt. Wenn er also meinetwegen bei 359° startet und dann nach 1° abdriftet. Dass habe ich im Moment noch nicht in ein Programm umgesetzt.
Ich habe es nur so getestet, dass ich den Bot vor dem Programmstart nach Süden ausgerichtet habe.






Zitieren

Lesezeichen