Danke Radbruch, jetzt hat's geklappt.
Der Vollständigkeit halber noch der richtige Code:
Sind bei euch die 3 Liniensensor-Werte auch so unterschiedlich?Code:'Verwendeter Compiler Bascom V 1.11.9.7 ' 'Aufgabe: 'NIBOBee fällt nicht vom Tisch 'Autor: Pinsel120866 '################################################### $regfile = "m16def.dat" $crystal = 15000000 $hwstack = 32 $swstack = 8 $framesize = 24 Lineled Alias Portb.4 Config Portd.4 = Output ' pmw_r Config Portd.5 = Output ' pwm_l Config Portd.6 = Output ' dir_l Config Portd.7 = Output ' dir_r Config Lineled = Output ' Lineled Config Adc = Single , Prescaler = 64 , Reference = Avcc ' 235 kHz Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 1 Declare Sub Motorpwm(byval Pwm_l As Byte , Byval Pwm_r As Byte) Declare Sub Motordir(byval Dir_l As Byte , Byval Dir_r As Byte) Declare Sub Frontled(byval Ledstatus As Byte) Declare Sub Linedata() Dim Linesensl As Integer Dim Linesensc As Integer Dim Linesensr As Integer Dim _lcd_e As Byte 'Needed to control 4 line LCD Enable Interrupts Start Adc $lib "Lcd_i2c_DOGM.lib" 'I2c driver for the LCD Config I2cdelay = 1 Const Pcf8574_lcd = &H4E 'Defines the address of the I/O expander for LCD Config Scl = Portc.0 'Configure I2C SCL Config Sda = Portc.1 'Configure I2C SDA Config Lcd = 16 * 3 , Chipset = Dogm163v5 '16*3 type LCD display 5V I2cstart Call Linedata _lcd_e = 128 'Upper half of 4-line display is selected Cls 'clear the LCD display Lcd "*Liniensensoren*" 'display this at the top line Waitms 1 Lowerline 'select the lower line Lcd "R-" ; Linesensr ; " M-" ; Linesensc ; " L-" ; Linesensl Waitms 1 'display this at the lower line _lcd_e = 64 'Lower half of 4-line display is selected Lcd "nix" Waitms 1 Lowerline Lcd "nix" Wait 3 Do Call Frontled(0) Waitms 10 Call Linedata _lcd_e = 128 'Upper half of 4-line display is selected Cls 'clear the LCD display Lcd "*Liniensensoren*" 'display this at the top line Waitms 1 Lowerline 'select the lower line Lcd "R-" ; Linesensr ; " M-" ; Linesensc ; " L-" ; Linesensl Waitms 1 'display this at the lower line _lcd_e = 64 'Lower half of 4-line display is selected Lcd "nix" Waitms 1 Lowerline Lcd "nix" Waitms 10 If Linesensc < 7 Or Linesensr < 12 Or Linesensl < 22 Then 'hier anpassen! Call Motordir(0 , 0) Call Motorpwm(0 , 0) Waitms 500 Call Motordir(0 , 0) Call Motorpwm(100 , 100) Waitms 500 Call Motordir(1 , 0) Call Motorpwm(100 , 100) Waitms 500 Call Motordir(1 , 1) Call Motorpwm(100 , 100) Else Call Motordir(1 , 1) Call Motorpwm(100 , 100) End If Loop End Sub Motorpwm(byval Pwm_l As Byte , Byval Pwm_r As Byte) Pwm1a = Pwm_l * 4 Pwm1b = Pwm_r * 4 End Sub Sub Motordir(byval Dir_l As Byte , Byval Dir_r As Byte) If Dir_l = 0 Then Portd.6 = 0 Else Portd.6 = 1 If Dir_r = 0 Then Portd.7 = 1 Else Portd.7 = 0 End Sub Sub Frontled(byval Ledstatus As Byte) ' LED für Liniensensor ein-/aus-schalten Ddrb.4 = 1 Portb.4 = Ledstatus.0 End Sub Sub Linedata() ' Liniensensoren lesen Config Portb.4 = Output Portb.4 = 1 Linesensl = Getadc(5) Linesensc = Getadc(6) Linesensr = Getadc(7) Portb.4 = 0 End Sub







Zitieren

Lesezeichen