changed the way the gesture method handles reading when no data.
This commit is contained in:
parent
69082fc3f6
commit
2f28492443
1 changed files with 42 additions and 44 deletions
|
|
@ -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:
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue