import smbus import time import RPi.GPIO as GPIO GPIO.setmode (GPIO.BOARD) bus = smbus.SMBus(1) # I2C address 0x29 # Register 0x12 has device ver. # Register addresses must be OR'ed with 0x80 bus.write_byte(0x29,0x80|0x12) ver = bus.read_byte(0x29) # version # should be 0x44 if ver == 0x44: print "Device found\n" bus.write_byte(0x29, 0x80|0x00) # 0x00 = ENABLE register bus.write_byte(0x29, 0x01|0x02) # 0x01 = Power on, 0x02 RGB sensors enabled bus.write_byte(0x29, 0x80|0x14) # Reading results start register 14, LSB then MSB ### registrieren der farbe des hintergrundes ( bg = WERT ) eingabe = raw_input("Bitte Auto auf weiss setzen und Enter drücken") data = bus.read_i2c_block_data(0x29, 0) hintergrund = data[1] << 8 | data[0] print("hintergrund: ", hintergrund) ### registrieren der farbe der linie ( linie = WERT ) eingabe = raw_input("Bitte Auto auf schwarz setzen und Enter drücken") data = bus.read_i2c_block_data(0x29, 0) linie = data[1] << 8 | data[0] print("linie: ", linie) if linie > hintergrund: schwellwert = (linie - hintergrund) /2 else: schwellwert = (hintergrund - linie) /2 print("schwellwert: ", schwellwert) ### alt = 0 GPIO.setup(15, GPIO.OUT) #Lenkung pwm2 = GPIO.PWM(15, 50 ) GPIO.setup(12, GPIO.OUT) #Motor pwm1 = GPIO.PWM(12, 50 ) pwm1.stop() pwm1.start(47) position_alt = "1" position_akt = "0" while True: data = bus.read_i2c_block_data(0x29, 0) clear = data[1] << 8 | data[0] print(clear) red = data[3] << 8 | data[2] green = data[5] << 8 | data[4] blue = data[7] << 8 | data[6] #crgb = "C: %s, R: %s, G: %s, B: %s\n" % (clear, red, green, blue) #print crgb #if red > 5000 and red < 6000: # pwm1.stop() # print ("ENDE!") # break aktuell = clear if aktuell > schwellwert : position_akt = "rechts" if position_alt != position_akt : print ("rechts") pwm2.start(91.9) ## nach rechts if aktuell < schwellwert : position_akt = "links" if position_alt != position_akt : print ("links") pwm2.start(95) ## nach links time.sleep(0.01) position_alt = position_akt else: print "Device not found\n"