moin!
So hier nochmal der ganze code
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
ich hab dieses 'und messen...' nur mal in die schleife reingemacht um zu kontrollieren, ob er aus der 'Fahren-Sub' rausgeht...
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
Lesezeichen