# code von bradspi.blogspot.de

import smbus
import time
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, 0x0f|0x02) # Set Gain level?;  0x02 16x gain?
 bus.write_byte(0x29, 0x80|0x14) # Reading results start register 14, LSB then MSB

 Stop_Meas = 'N'
 counter_1 = 0

 while True:

  Stop_Meas = raw_input('Stop measuring? Y/N: ') #stops only on a uppercase Y! 
  if Stop_Meas.strip() == 'Y':
    print 'End of measurement'
    break 
  counter_1 = (counter_1 + 1)
 
  print
  ID_probe = raw_input('Please enter name of sample ')
  print
  print 'Measurement No. ', counter_1
  print 'Sample: ', ID_probe
 
  data = bus.read_i2c_block_data(0x29, 0)
  clear = clear = data[1] << 8 | data[0]
  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" % (clear, red, green, blue)
  print crgb

  # abgeleitete RGB Werte: Messwerte normiert gegen Maximalwert (65535) * 256
  nCl = int(float(clear)/65535*256)
  nRd = int(float(red)/65535*256)
  nGr = int (float(green)/65535*256)
  nBl = int (float(blue)/65535*256)
  ncrgb = "nC: %s, nR: %s, nG: %s, nB: %s" % (nCl, nRd, nGr, nBl)
  print ncrgb
  print
  time.sleep(1)

  
else: 
 print "Device not found\n"


