Hi,
hab mir dein Programm auch mal angesehen.
Mir ist aufgefallen, dass die Endlosschleife (Do...Loop) über den ganzen Programmcode geht auch über die Unterfunktionen, die mit "gosub" angesprochen werden. Ich würde die Schleife nur über die "Aufrufe" der Unterfunktionen stellen, also in etwa so:
Keine Ahnung, ob das zur Lösung des "Ausschlagproblems" beiträgt, mir ist es nur ins Auge gestochenCode:$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 Loop 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 Return
Viele Grüße







Zitieren

Lesezeichen