apds9960 --- ไดรเวอร์เซนเซอร์ตรวจจับระยะใกล้ ท่าทาง และสี¶
โมดูลนี้จัดเตรียมไดรเวอร์สำหรับเซนเซอร์ระยะใกล้แบบดิจิทัล แสงแวดล้อม สี RGB และท่าทาง Broadcom/Avago APDS9960 ผ่าน I2C ไดรเวอร์เปิดเผยการควบคุมเปิด/ปิดแต่ละฟีเจอร์ การอ่านช่องสัญญาณดิบ (clear, R, G, B, proximity) และสเตตแมชชีนถอดรหัสท่าทางซอฟต์แวร์ที่จำแนกการปัดขึ้น/ลง/ซ้าย/ขวา และท่าทาง near/far จาก FIFO 4-photodiode บนชิป
ตัวอย่างการใช้งาน:
import time
from machine import I2C, Pin
from apds9960 import uAPDS9960 as APDS9960
bus = I2C(1, scl=Pin("P15"), sda=Pin("P14"))
sensor = APDS9960(bus)
sensor.enableLightSensor()
sensor.enableProximitySensor()
while True:
r = sensor.readRedLight()
g = sensor.readGreenLight()
b = sensor.readBlueLight()
c = sensor.readAmbientLight()
p = sensor.readProximity()
print(r, g, b, c, p)
time.sleep_ms(100)
คลาส¶
- class apds9960.APDS9960(bus: machine.I2C, address: int = 0x39, valid_id: list = [0xAB, 0x9C, 0xA8, -0x55])¶
สร้างอินสแตนซ์ไดรเวอร์ APDS9960
busคือออบเจกต์บัส I2C ที่กำหนดค่าไว้แล้วสำหรับสื่อสารกับเซนเซอร์ คลาสพื้นฐานออกread_byte_data,write_byte_dataและread_i2c_block_dataแบบ SMBus สำหรับmachine.I2Cของ MicroPython ให้ใช้uAPDS9960แทนaddressคือที่อยู่ I2C 7 บิตของอุปกรณ์ ค่าเริ่มต้นคือAPDS9960_I2C_ADDR(0x39)valid_idคือรายการค่าที่ยอมรับได้ซึ่งส่งคืนโดยรีจิสเตอร์ ID ของชิป ค่าเริ่มต้นคือAPDS9960_DEV_ID
คอนสตรักเตอร์อ่าน ID อุปกรณ์และเกิดข้อยกเว้น
ADPS9960InvalidDevIdหากไม่อยู่ในvalid_idจากนั้นจะปิดการใช้งานทุกฟีเจอร์ โปรแกรมค่า ATIME/WTIME/PPULSE เริ่มต้น และใช้ค่าเริ่มต้นสำหรับ LED drive, proximity gain, ALS gain, proximity thresholds, ambient-light thresholds, persistence และการกำหนดค่าเอนจิน gesture (entry/exit thresholds, GCONF1, gesture gain, gesture LED drive, gesture wait time, gesture offsets, GPULSE, GCONF3 และการเปิดใช้งาน gesture interrupt)การควบคุมโหมดและพลังงาน¶
- getMode() int¶
ส่งคืนค่าดิบของรีจิสเตอร์ ENABLE ซึ่งเข้ารหัสฟีเจอร์ที่เปิดใช้งานอยู่ในขณะนั้น (power, ALS, proximity, wait, ALS interrupt, proximity interrupt, gesture)
- setMode(mode: int, enable: bool = True) None¶
เปิดหรือปิดใช้งานฟีเจอร์แต่ละอย่างในรีจิสเตอร์ ENABLE
modeต้องเป็นหนึ่งในค่าAPDS9960_MODE_*(APDS9960_MODE_POWER..\APDS9960_MODE_ALL) เมื่อmodeเป็นAPDS9960_MODE_ALLบิตทั้งหมดจะถูกเปิดหรือปิดพร้อมกัน เกิดข้อยกเว้นADPS9960InvalidModeสำหรับค่าที่อยู่นอกช่วง
เซนเซอร์แสงแวดล้อม / RGB¶
เซนเซอร์ตรวจจับระยะใกล้¶
เอนจินท่าทาง¶
- enableGestureSensor(interrupts: bool = True) None¶
รีเซ็ตสถานะท่าทาง ตั้งค่า WTIME และจำนวนพัลส์ท่าทาง เพิ่ม LED เป็น 300% กำหนดค่าบิตเปิดใช้งาน gesture interrupt เข้าสู่สเตตแมชชีน gesture เปิดอุปกรณ์ และเปิดใช้งานโหมด wait, proximity และ gesture
- disableGestureSensor() None¶
รีเซ็ตสถานะท่าทาง ปิดใช้งาน gesture interrupt และสเตตแมชชีน และหยุดเอนจิน gesture
- isGestureAvailable() bool¶
ส่งคืน
Trueหากบิต GVALID ของรีจิสเตอร์สถานะ gesture ถูกตั้งค่า ซึ่งบ่งชี้ว่าข้อมูล FIFO ของ gesture พร้อมให้อ่าน
- readGesture() int¶
ดึงข้อมูลจาก gesture FIFO เรียกใช้ตัวถอดรหัส gesture บนบอร์ด และส่งคืนค่าคงที่ทิศทาง
APDS9960_DIR_*ตัวใดตัวหนึ่ง ส่งคืนAPDS9960_DIR_NONEหากเอนจินไม่ทำงาน ไม่มีข้อมูลที่ถูกต้อง หรือข้อมูลไม่สามารถระบุเป็นท่าทางที่รู้จักได้
- resetGestureParameters() None¶
ล้างบัฟเฟอร์ gesture FIFO ภายใน เดลต้า ตัวนับ ตัวนับ near/far สถานะ และการเคลื่อนไหวที่ถอดรหัสล่าสุด
ค่าขีดแบ่ง proximity¶
- getProximityIntLowThreshold() int¶
ชื่อเล่นสำหรับ
getProxIntLowThresh()
- setProximityIntLowThreshold(threshold: int) None¶
ชื่อเล่นสำหรับ
setProxIntLowThresh()
- getProximityIntHighThreshold() int¶
ชื่อเล่นสำหรับ
getProxIntHighThresh()
- setProximityIntHighThreshold(threshold: int) None¶
ชื่อเล่นสำหรับ
setProxIntHighThresh()
LED drive, gain และ boost¶
- getLEDDrive() int¶
ส่งคืนความแรงของ LED drive ที่ใช้สำหรับ proximity และ ALS เข้ารหัสเป็นหนึ่งในค่า
APDS9960_LED_DRIVE_*(0 = 100 mA, 1 = 50 mA, 2 = 25 mA, 3 = 12.5 mA)
- setLEDDrive(drive: int) None¶
ตั้งค่าความแรงของ LED drive ที่ใช้สำหรับ proximity และ ALS
driveเป็นหนึ่งในค่าAPDS9960_LED_DRIVE_*
- getProximityGain() int¶
ส่งคืน proximity-receiver gain เข้ารหัสเป็นหนึ่งในค่า
APDS9960_PGAIN_*(0 = 1x, 1 = 2x, 2 = 4x, 3 = 8x)
- setProximityGain(drive: int) None¶
ตั้งค่า proximity-receiver gain
driveเป็นหนึ่งในค่าAPDS9960_PGAIN_*
- getAmbientLightGain() int¶
ส่งคืน ambient-light-sensor gain เข้ารหัสเป็นหนึ่งในค่า
APDS9960_AGAIN_*(0 = 1x, 1 = 4x, 2 = 16x, 3 = 64x)
- setAmbientLightGain(drive: int) None¶
ตั้งค่า ambient-light-sensor gain
driveเป็นหนึ่งในค่าAPDS9960_AGAIN_*
การชดเชย proximity gain และมาสก์ photodiode¶
การกำหนดค่าท่าทาง¶
- setGestureEnterThresh(threshold: int) None¶
ตั้งค่าขีดแบ่ง proximity ที่จำเป็นสำหรับเข้าสู่โหมด gesture
- setGestureExitThresh(threshold: int) None¶
ตั้งค่าขีดแบ่ง proximity ที่จำเป็นสำหรับออกจากโหมด gesture
- getGestureGain() int¶
ส่งคืน photodiode gain ที่ใช้ในโหมด gesture เข้ารหัสเป็นหนึ่งในค่า
APDS9960_GGAIN_*(0 = 1x, 1 = 2x, 2 = 4x, 3 = 8x)
- getGestureLEDDrive() int¶
ส่งคืน LED drive current ที่ใช้ในโหมด gesture เข้ารหัสเป็นหนึ่งในค่า
APDS9960_LED_DRIVE_*
ค่าขีดแบ่ง ambient-light interrupt¶
การเปิดใช้งานและการล้าง interrupt¶
- class apds9960.uAPDS9960(bus: machine.I2C, address: int = 0x39, valid_id: list = [0xAB, 0x9C, 0xA8, -0x55])¶
คลาสย่อยของ MicroPython สำหรับ
APDS9960มี API สาธารณะเหมือนกันทุกประการ แต่การเข้าถึงรีจิสเตอร์พื้นฐานใช้การเรียกreadfrom_memและwriteto_memแบบmachine.I2Cแทนเมธอดแบบ SMBus นี่คือคลาสที่ควรใช้บน OpenMV / MicroPython
ข้อยกเว้น¶
- exception apds9960.ADPS9960InvalidDevId(id: int, valid_ids: list)¶
คลาสย่อยของ
ValueErrorเกิดขึ้นโดยคอนสตรักเตอร์APDS9960เมื่อค่าที่อ่านจากรีจิสเตอร์ ID ของชิปไม่มีอยู่ในรายการvalid_id
- exception apds9960.ADPS9960InvalidMode(mode: int)¶
คลาสย่อยของ
ValueErrorเกิดขึ้นโดยAPDS9960.setMode()เมื่ออาร์กิวเมนต์modeอยู่นอกช่วงAPDS9960_MODE_POWER..\APDS9960_MODE_ALL
ค่าคงที่¶
ที่อยู่ I2C และ device ID¶
การปรับแต่ง gesture¶
- apds9960.APDS9960_GESTURE_THRESHOLD_OUT: int¶
ขนาดของสัญญาณตัวอย่างขั้นต่ำ (ต่อ photodiode) ที่ใช้โดยตัวถอดรหัส gesture เมื่อค้นหาตัวอย่าง FIFO แรก/สุดท้ายในช่วง
- apds9960.APDS9960_GESTURE_SENSITIVITY_1: int¶
ค่าขีดแบ่งของเดลต้า U/D และ L/R สะสมที่ตัวถอดรหัสยืนยันทิศทางการปัด
โหมดฟีเจอร์¶
ค่าเหล่านี้จะถูกส่งไปยัง APDS9960.setMode()
- apds9960.APDS9960_MODE_ALL: int¶
ค่า Sentinel (
7) ที่บอกAPDS9960.setMode()ให้เปิดหรือปิดทุกบิตในรีจิสเตอร์ ENABLE พร้อมกัน
LED drive currents¶
Proximity gain (PGAIN)¶
Ambient-light gain (AGAIN)¶
Gesture gain (GGAIN)¶
LED boost¶
- apds9960.APDS9960_LED_BOOST_300: int¶
LED boost 300% (
3) ใช้งานโดยอัตโนมัติโดยAPDS9960.enableGestureSensor()
เวลารอ gesture¶
ทิศทาง gesture¶
ค่าเหล่านี้จะถูกส่งคืนโดย APDS9960.readGesture()
สถานะ gesture¶
ค่าสถานะภายในที่รายงานผ่านสเตตแมชชีน gesture