From 52fe8044822e6453acc7dc3316d96c356c02f20f Mon Sep 17 00:00:00 2001 From: marcoschwartz Date: Fri, 11 Jan 2013 15:33:16 +0000 Subject: [PATCH] first commit for VCNL4000 code --- Adafruit_VCNL4000/Adafruit_I2C.py | 95 ++++++++++++++++++ Adafruit_VCNL4000/Adafruit_I2C.pyc | Bin 0 -> 4470 bytes Adafruit_VCNL4000/Adafruit_VCNL4000.py | 54 ++++++++++ Adafruit_VCNL4000/Adafruit_VCNL4000.pyc | Bin 0 -> 1829 bytes .../Adafruit_VCNL4000_example.py | 17 ++++ 5 files changed, 166 insertions(+) create mode 100755 Adafruit_VCNL4000/Adafruit_I2C.py create mode 100644 Adafruit_VCNL4000/Adafruit_I2C.pyc create mode 100755 Adafruit_VCNL4000/Adafruit_VCNL4000.py create mode 100644 Adafruit_VCNL4000/Adafruit_VCNL4000.pyc create mode 100755 Adafruit_VCNL4000/Adafruit_VCNL4000_example.py 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 0000000000000000000000000000000000000000..0ab5c836596ad8d9caa637cd14676cf2c9aa4f9e GIT binary patch literal 4470 zcmdT{U2hXd6uq-+J9aQoRR{utW?N`$9zsHjAVn1o1WJ+8fYzl6Q7dcX9VeUEyXnlD zVl`2#hCcPBKcX-F5&ch<`UB{>ch`v%IijLXqz3Qh?#%3b+;i@k8TYS~qklMmK50_^ z=i>iaJoYk7h@YZ1(J~x|!UBaZy(HQpdbX^%u3jsmUGxfn3uzVZ-7sjGZj?42P0#J? z^d5KGfYInqk#=a^>*|wl?L0 zm99;BxuIU^uGYBcl#SKxmd~I0Jdn>VYj`qa>+mMml8&C-j3zgG=~@y`_JcIx2X=Es z8`GP35=}gj%89uo)VnPjU(GGd-E=#K`!7lAMwCzxeSY-GL6hFIk9u2nvP?5F^^kRV!04x@vLOFi- zzqw6c<5N_ZIHZ7Nc6)@j&;*FVK}?G@23*F@+_9Cu4!+jmufFDp*CL9@`Bil;?%2Mzd5lIrB_kmwUc<&t9>+`6+92xT^;d)Q-)w3 zs|0?6fAk7&#BqqYN|-7*uIU$otcuLqvLKzn;_MKvUE?nNUAV&_ z4FvblrbfQuDbFR{IF+6-BbiDhHWnM!(8UoG;w_9|vPj;;gdTGUxy-U5_o6zlN@`q< zstf9rYBEcCNz7-V2&ZOmhBILuKS`2xumX-lJ1!}%aLL?a`f%zfYB_ZF;pZ{YV(d`? zA=wxuvrG!KQ6Lw8AT7YM`clY<^I-NC%%X`>;0<(V7)DP}^wLBaU^jI$YDGHqj9!gw zs?B7ch4u=*1^;h*izWe0re3^1HNC{&^;_me_8J;KFa~r9noZF23V=HW=Rq!=7b1hfetO=&=kTN|5n`t1uPej;u)-fdoGW z{5jcWzB3o$*;6p&xIn$4&Z^U@It26kXwtiMIOZ9!t^oUK4s4$pfF2+NSfDEruvgLB z9v+N9#iV~DNvvJ7^7O&D$e_i z0##LZ257+C-rb1#tk#PTrvdU^(H#~7{Q7Fl$18` z2=|~$`~q4OuyY?y3(otT76USo9nJDBe284^oxuK)aNJnRG-psaaF9DHhKQ`lmLeMj zqqY{Y@*OK#_@=><_VoJAhj8uNFd18}9F&ZGT=^Z%dOy8}E35`LL=7C8!C^m^yAP-_ zj6{WlB--XXz#fTk&fmAy93ateIf-xs5Z>`Aq0HJ+fwu78XD49}Xv=FEw5t>UCocK# z@k)PRn~?#-ge^sRo%;JBgb73K<6--Dso?PNUID!fu;inP#@rzwy?; zxR>93KMUGc`;s**Y5oN^m)Ll0-eq%{%@vrv6P9>Kbr<$A6!B3@HrkRiR;*Mjqm^>y iMCDYanoWWaTE6US-1wL#CK3K5i|HM{8(5x3we&X(F6o^B literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..6a36ebe081ef8728a7b6fec2fec6e9b97ae58cd3 GIT binary patch literal 1829 zcmcgsU2hXd6g{&}>^O10A;4P^0=W;t`6x6<2w3bbGGrHb?383)R*q*wHnL;0I}tyJ^AC*KeZMHPln$2XrzA< zX!;ju1FCO3XbW@%lz`9~Cd3q21t2fY9_54{Mr0DTU63Hm(V0dIjFwa69Kix;T6_&<7r zq9D^02wdIVOO9d_R@ch$B0Ichc*8(v5mOAr?-@QY{Lb(P0}aF+Cw3T^gLsZ%g5e&+ z4+Ms%zm*dPwM>rQO|6qC zO-+{U=Sgg$4Revq;YGrle7s!^s*N4D@^Gu(umLFtl@qo1Bu6UJ=tH_qR%yT6iAue= z)H^o&-NVw5_+{Bld%IDR952`6<(l1GE_Zb_@(71Xzh1dc!IN?fw7{HLT8zVYW=>vsOi-eRd*h%zV)K=yGIC8) z+U9%pafZ@z)nPB`zKA=qIlj(y@sAW@QRKyfD2O=`6m5O|t{*l#Q5c#@atXsuS0A-` z$~*_%!>G?Xt644(e7T6V{#R8>R^DYAR*hMa%@p$e{O7owSq2(s<|EhoE=GnEMH&!3f+9{c@-&%RZj;BOBkolk@ndgM(Pevc^ nu%;!;z>@ksyJ){HxBI%f!{4;@8Ud*=m(5U5PyRWB+35WlG_rSM literal 0 HcmV?d00001 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)