moin!
So hier nochmal der ganze code
ich hab dieses 'und messen...' nur mal in die schleife reingemacht um zu kontrollieren, ob er aus der 'Fahren-Sub' rausgeht...Code:Declare Function Srf08_firmware(byval Sf08_adr_0 As Byte) As Byte Declare Sub Anfahren() Declare Sub Fahrt() Declare Sub Bremsen() $regfile = "m32def.dat" $crystal = 16000000 $baud = 9600 Const Sf08_adr_0 = &HE0 ' I2C Adresse Const Sf08_c_range = 100 ' Reichweite Const Sf08_c_gain = 1 'Empfindlichkeit Const Sf08_adr_0_read = &HE1 Dim I As Integer Dim Infahrt As Bit Config Scl = Portc.0 'Ports fuer IIC-Bus Config Sda = Portc.1 'Ports für linken Motor Config Pinc.6 = Output 'Linker Motor Kanal 1 Config Pinc.7 = Output 'Linker Motor Kanal 2 Config Pind.4 = Output 'Linker Motor PWM 'Ports für rechten Motor Config Pinb.0 = Output 'Rechter Motor Kanal 1 Config Pinb.1 = Output 'Rechter Motor Kanal 2 Config Pind.5 = Output 'Rechter Motor PWM Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down Pwm1a = 0 Pwm1b = 0 Tccr1b = Tccr1b Or &H02 'Prescaler = 8 '############################################################################### '############################################################################### '## MAIN ## '############################################################################### '############################################################################### I2cinit '############################################################################### '# Setzten des Range Wertes # '############################################################################### I2cstart I2cwbyte Sf08_adr_0 I2cwbyte 2 I2cwbyte Sf08_c_range I2cstop '############################################################################### '# Setzten des Gain Wertes # '############################################################################### I2cstart I2cwbyte Sf08_adr_0 I2cwbyte 1 I2cwbyte Sf08_c_gain I2cstop Dim Lsb As Byte Dim Msb As Byte Dim Ival As Word Dim D As Integer Dim Firmware As Byte '############################################################################### '# Messung auslösen # '############################################################################### Messen: Do I2cstart I2cwbyte Sf08_adr_0 I2cwbyte 0 I2cwbyte 81 Waitms 70 Warteaufmessung: Waitms 1 Firmware = Srf08_firmware(&He0) If Firmware = 255 Then Goto Warteaufmessung '############################################################################### '# Ergebnis abholen # '############################################################################### I2cstart I2cwbyte Sf08_adr_0 I2cwbyte 2 I2cstart I2cwbyte Sf08_adr_0_read I2crbyte Msb , Ack I2crbyte Lsb , Nack I2cstop Ival = Makeint(lsb , Msb) '############################################################################### '# Ergebnis anzeigen # '############################################################################### Print "Die Entfernung beträgt " ; Ival ; " Zentimeter." Print "***************************************************" Waitms 100 '############################################################################### '# Fahren # '############################################################################### Print "***************************************************" If Infahrt = 0 Then Call Anfahren Infahrt = 1 End If Do Call Fahrt Print "und messen..." Goto Messen Loop Until Ival < 50 Call Bremsen Wait 3 Loop End '############################################################################### '############################################################################### '## MAIN ENDE ## '############################################################################### '############################################################################### Function Srf08_firmware(byval Sf08_adr_0 As Byte) As Byte Local Sf08_adr_0_read As Byte I2cstart I2cwbyte Sf08_adr_0 I2cwbyte 0 'Leseregister festlegen I2cstop I2cstart I2cwbyte &HE1 I2crbyte Firmware , Nack I2cstop Srf08_firmware = Firmware End Function Sub Anfahren() 'Linker Motor ein Portc.6 = 1 'bestimmt Richtung Portc.7 = 0 'bestimmt Richtung Portd.4 = 1 'Linker Motor EIN 'Rechter Motor ein Portb.0 = 1 'bestimmt Richtung rechter Motor Portb.1 = 0 'bestimmt Richtung rechter Motor Portd.5 = 1 'rechter Motor EIN I = 0 Do Pwm1a = I Pwm1b = I Waitms 40 I = I + 5 Loop Until I > 1023 End Sub Sub Fahrt() 'Linker Motor ein Portc.6 = 1 'bestimmt Richtung Portc.7 = 0 'bestimmt Richtung Portd.4 = 1 'Linker Motor EIN 'Rechter Motor ein Portb.0 = 1 'bestimmt Richtung rechter Motor Portb.1 = 0 'bestimmt Richtung rechter Motor Portd.5 = 1 'rechter Motor EIN I = 1023 Pwm1a = I Pwm1b = I End Sub Sub Bremsen() 'Linker Motor ein Portc.6 = 1 'bestimmt Richtung Portc.7 = 0 'bestimmt Richtung Portd.4 = 1 'Linker Motor EIN 'Rechter Motor ein Portb.0 = 1 'bestimmt Richtung rechter Motor Portb.1 = 0 'bestimmt Richtung rechter Motor Portd.5 = 1 'rechter Motor EIN I = 1023 Do Pwm1a = I Pwm1b = I Waitms 40 I = I - 30 Loop Until I < 5 Pwm1a = 0 Pwm1b = 0 End Sub
das macht er soweit...
also muss das problem wirklich an dem vergleich liegen...
so dass er eben nicht erkennt wenn die entfernung kleiner 50 ist ( ival<50)
mfg
Jürchen







Zitieren

Lesezeichen