changed the way the gesture method handles reading when no data.

This commit is contained in:
mrmcwethy 2018-01-01 12:43:39 -07:00
parent 69082fc3f6
commit 2f28492443

View file

@ -204,59 +204,57 @@ class APDS9960:
up_down_diff = 0 up_down_diff = 0
left_right_diff = 0 left_right_diff = 0
gesture_received = 0 gesture_received = 0
time.sleep(0.030) # 30 ms time.sleep(0.030) # 30 ms
n_recs = self._read8(APDS9960_GFLVL) n_recs = self._read8(APDS9960_GFLVL)
if not n_recs: if n_recs:
continue
with self.i2c_device as i2c: with self.i2c_device as i2c:
i2c.write(buffer, end=1, stop=False) i2c.write(buffer, end=1, stop=False)
i2c.readinto(buffer, start=1, end=min(129, 1 + n_recs * 4)) i2c.readinto(buffer, start=1, end=min(129, 1 + n_recs * 4))
upp, down, left, right = buffer[1:5] upp, down, left, right = buffer[1:5]
if abs(upp - down) > 13: if abs(upp - down) > 13:
up_down_diff = upp - down up_down_diff = upp - down
if abs(left - right) > 13: if abs(left - right) > 13:
left_right_diff = left - right left_right_diff = left - right
if up_down_diff != 0: if up_down_diff != 0:
if up_down_diff < 0: if up_down_diff < 0:
# either leading edge of down movement # either leading edge of down movement
# or trailing edge of up movement # or trailing edge of up movement
if self._saw_up_start: if self._saw_up_start:
gesture_received = 0x01 # up gesture_received = 0x01 # up
else: else:
self._saw_down_start += 1 self._saw_down_start += 1
elif up_down_diff > 0: elif up_down_diff > 0:
# either leading edge of up movement # either leading edge of up movement
# or trailing edge of down movement # or trailing edge of down movement
if self._saw_down_start: if self._saw_down_start:
gesture_received = 0x02 # down gesture_received = 0x02 # down
else: else:
self._saw_up_start += 1 self._saw_up_start += 1
if left_right_diff != 0: if left_right_diff != 0:
if left_right_diff < 0: if left_right_diff < 0:
# either leading edge of right movement # either leading edge of right movement
# trailing edge of left movement # trailing edge of left movement
if self._saw_left_start: if self._saw_left_start:
gesture_received = 0x03 # left gesture_received = 0x03 # left
else: else:
self._saw_right_start += 1 self._saw_right_start += 1
elif left_right_diff > 0: elif left_right_diff > 0:
# either leading edge of left movement # either leading edge of left movement
# trailing edge of right movement # trailing edge of right movement
if self._saw_right_start: if self._saw_right_start:
gesture_received = 0x04 #right gesture_received = 0x04 #right
else: else:
self._saw_left_start += 1 self._saw_left_start += 1
# saw a leading or trailing edge; start timer # saw a leading or trailing edge; start timer
if up_down_diff != 0 or left_right_diff != 0: if up_down_diff or left_right_diff:
time_mark = time.monotonic() time_mark = time.monotonic()
# finished when a gesture is detected or ran out of time (300ms) # finished when a gesture is detected or ran out of time (300ms)
if gesture_received or time.monotonic() - time_mark > 0.300: if gesture_received or time.monotonic() - time_mark > 0.300: