diff --git a/Adafruit_VCNL4000/Adafruit_I2C.py b/Adafruit_VCNL4000/Adafruit_I2C.py new file mode 100755 index 00000000..dd2dfa76 --- /dev/null +++ b/Adafruit_VCNL4000/Adafruit_I2C.py @@ -0,0 +1,95 @@ +#!/usr/bin/python + +import smbus + +# =========================================================================== +# Adafruit_I2C Base Class +# =========================================================================== + +class Adafruit_I2C : + + def __init__(self, address, bus=smbus.SMBus(0), debug=False): + self.address = address + self.bus = bus + self.debug = debug + + def reverseByteOrder(self, data): + "Reverses the byte order of an int (16-bit) or long (32-bit) value" + # Courtesy Vishal Sapre + dstr = hex(data)[2:].replace('L','') + byteCount = len(dstr[::2]) + val = 0 + for i, n in enumerate(range(byteCount)): + d = data & 0xFF + val |= (d << (8 * (byteCount - i - 1))) + data >>= 8 + return val + + def write8(self, reg, value): + "Writes an 8-bit value to the specified register/address" + try: + self.bus.write_byte_data(self.address, reg, value) + if (self.debug): + print("I2C: Wrote 0x%02X to register 0x%02X" % (value, reg)) + except IOError, err: + print "Error accessing 0x%02X: Check your I2C address" % self.address + return -1 + + def writeList(self, reg, list): + "Writes an array of bytes using I2C format" + try: + self.bus.write_i2c_block_data(self.address, reg, list) + except IOError, err: + print "Error accessing 0x%02X: Check your I2C address" % self.address + return -1 + + def readU8(self, reg): + "Read an unsigned byte from the I2C device" + try: + result = self.bus.read_byte_data(self.address, reg) + if (self.debug): + print "I2C: Device 0x%02X returned 0x%02X from reg 0x%02X" % (self.address, result & 0xFF, reg) + return result + except IOError, err: + print "Error accessing 0x%02X: Check your I2C address" % self.address + return -1 + + def readS8(self, reg): + "Reads a signed byte from the I2C device" + try: + result = self.bus.read_byte_data(self.address, reg) + if (self.debug): + print "I2C: Device 0x%02X returned 0x%02X from reg 0x%02X" % (self.address, result & 0xFF, reg) + if (result > 127): + return result - 256 + else: + return result + except IOError, err: + print "Error accessing 0x%02X: Check your I2C address" % self.address + return -1 + + def readU16(self, reg): + "Reads an unsigned 16-bit value from the I2C device" + try: + hibyte = self.bus.read_byte_data(self.address, reg) + result = (hibyte << 8) + self.bus.read_byte_data(self.address, reg+1) + if (self.debug): + print "I2C: Device 0x%02X returned 0x%04X from reg 0x%02X" % (self.address, result & 0xFFFF, reg) + return result + except IOError, err: + print "Error accessing 0x%02X: Check your I2C address" % self.address + return -1 + + def readS16(self, reg): + "Reads a signed 16-bit value from the I2C device" + try: + hibyte = self.bus.read_byte_data(self.address, reg) + if (hibyte > 127): + hibyte -= 256 + result = (hibyte << 8) + self.bus.read_byte_data(self.address, reg+1) + if (self.debug): + print "I2C: Device 0x%02X returned 0x%04X from reg 0x%02X" % (self.address, result & 0xFFFF, reg) + return result + except IOError, err: + print "Error accessing 0x%02X: Check your I2C address" % self.address + return -1 diff --git a/Adafruit_VCNL4000/Adafruit_I2C.pyc b/Adafruit_VCNL4000/Adafruit_I2C.pyc new file mode 100644 index 00000000..0ab5c836 Binary files /dev/null and b/Adafruit_VCNL4000/Adafruit_I2C.pyc differ diff --git a/Adafruit_VCNL4000/Adafruit_VCNL4000.py b/Adafruit_VCNL4000/Adafruit_VCNL4000.py new file mode 100755 index 00000000..4ebc3a20 --- /dev/null +++ b/Adafruit_VCNL4000/Adafruit_VCNL4000.py @@ -0,0 +1,54 @@ +#!/usr/bin/python + +import time +from Adafruit_I2C import Adafruit_I2C + +# =========================================================================== +# VCNL4000 Class +# =========================================================================== + +# Address of the sensor +VCNL4000_ADDRESS = 0x13 + +# Commands +VCNL4000_COMMAND = 0x80 +VCNL4000_PRODUCTID = 0x81 +VCNL4000_IRLED = 0x83 +VCNL4000_AMBIENTPARAMETER = 0x84 +VCNL4000_AMBIENTDATA = 0x85 +VCNL4000_PROXIMITYDATA = 0x87 +VCNL4000_SIGNALFREQ = 0x89 +VCNL4000_PROXINITYADJUST = 0x8A + +VCNL4000_3M125 = 0 +VCNL4000_1M5625 = 1 +VCNL4000_781K25 = 2 +VCNL4000_390K625 = 3 + +VCNL4000_MEASUREAMBIENT = 0x10 +VCNL4000_MEASUREPROXIMITY = 0x08 +VCNL4000_AMBIENTREADY = 0x40 +VCNL4000_PROXIMITYREADY = 0x20 + +class VCNL4000 : + i2c = None + + # Constructor + def __init__(self, address=0x13): + self.i2c = Adafruit_I2C(address) + + self.address = address + + # Write proximity adjustement register + self.i2c.write8(VCNL4000_PROXINITYADJUST, 0x81); + + # Read data from proximity sensor + def read_proximity(self): + self.i2c.write8(VCNL4000_COMMAND, VCNL4000_MEASUREPROXIMITY) + while True: + result = self.i2c.readU8(VCNL4000_COMMAND) + if (result and VCNL4000_PROXIMITYREADY): + return self.i2c.readU16(VCNL4000_PROXIMITYDATA) + time.sleep(0.001) + + diff --git a/Adafruit_VCNL4000/Adafruit_VCNL4000.pyc b/Adafruit_VCNL4000/Adafruit_VCNL4000.pyc new file mode 100644 index 00000000..6a36ebe0 Binary files /dev/null and b/Adafruit_VCNL4000/Adafruit_VCNL4000.pyc differ diff --git a/Adafruit_VCNL4000/Adafruit_VCNL4000_example.py b/Adafruit_VCNL4000/Adafruit_VCNL4000_example.py new file mode 100755 index 00000000..36baa422 --- /dev/null +++ b/Adafruit_VCNL4000/Adafruit_VCNL4000_example.py @@ -0,0 +1,17 @@ +#!/usr/bin/python + +from Adafruit_VCNL4000 import VCNL4000 +import time + +# =========================================================================== +# Example Code +# =========================================================================== + +# Initialise the VNCL4000 sensor +vcnl = VCNL4000(0x13) + +# Print proximity sensor data every 100 ms +while True: + + print "Data from proximity sensor", vcnl.read_proximity() + time.sleep(0.1)