changeset 0:a0491f551a81

Initial commit
author Radomir Dopieralski <sheep-devel@sheep.art.pl>
date Fri, 09 Sep 2016 14:51:15 +0200
parents
children e43175de4495
files gp2y0e03.py
diffstat 1 files changed, 32 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gp2y0e03.py	Fri Sep 09 14:51:15 2016 +0200
@@ -0,0 +1,32 @@
+
+_REGISTER_SHIFT_BIT = const(0x35)
+_REGISTER_DISTANCE1 = const(0x5e)
+_REGISTER_DISTANCE2 = const(0x5f)
+
+
+class GP2Y0E03:
+    def __init__(self, i2c, address=0x40):
+        self.i2c = i2c
+        self.address = address
+        self.shift(1)
+
+    def _register8(self, register, value=None):
+        if value is None:
+            return self.i2c.readfrom_mem(self.address, register, 1)[0]
+        self.i2c.writeto_mem(self.address, register, bytearray([value]))
+
+    def shift(self, value=None):
+        if value not in (1, 2, None):
+            raise ValueError("shift has to be 1 or 2")
+        if value is not None:
+            self._shift = value
+        return self._register8(_REGISTER_SHIFT_BIT, value)
+
+    def read(self, raw=False):
+        low = self._register8(_REGISTER_DISTANCE2)
+        high = self._register8(_REGISTER_DISTANCE1)
+        value =  (high << 4 | low & 0x0f)
+        if raw:
+            return high, low, value
+        # value in cm
+        return (value / 16) / (1 << self._shift)