apds9960 --- Driver Sensor Kedekatan, Gerak, dan Warna#

Modul ini menyediakan driver untuk sensor kedekatan digital, cahaya sekitar, warna RGB, dan gerak Broadcom/Avago APDS9960 melalui I2C. Driver ini mengekspos kontrol aktifkan/nonaktifkan per fitur, pembacaan saluran mentah (clear, R, G, B, kedekatan), dan mesin keadaan dekoding gerak perangkat lunak yang mengklasifikasikan gesekan atas/bawah/kiri/kanan dan gerak dekat/jauh dari FIFO 4-photodiode pada chip.

Contoh penggunaan:

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)

Kelas#

class apds9960.APDS9960(bus: machine.I2C, address: int = 0x39, valid_id: list = [0xAB, 0x9C, 0xA8, -0x55])#

Membuat instance driver APDS9960.

  • bus adalah objek bus I2C yang dikonfigurasi yang digunakan untuk berkomunikasi dengan sensor. Kelas dasar mengeluarkan panggilan SMBus-style read_byte_data, write_byte_data, dan read_i2c_block_data; untuk machine.I2C MicroPython gunakan uAPDS9960 sebagai gantinya.

  • address adalah alamat I2C 7-bit perangkat. Defaultnya adalah APDS9960_I2C_ADDR (0x39).

  • valid_id adalah daftar nilai yang dapat diterima yang dikembalikan oleh register ID chip. Defaultnya adalah APDS9960_DEV_ID.

Konstruktor membaca ID perangkat dan memunculkan ADPS9960InvalidDevId jika tidak ada dalam valid_id. Kemudian menonaktifkan setiap fitur, memprogram nilai default ATIME/WTIME/PPULSE, dan menerapkan penggerak LED default, gain kedekatan, gain ALS, ambang batas kedekatan, ambang batas cahaya sekitar, persistensi, dan konfigurasi mesin gerak (ambang masuk/keluar, GCONF1, gain gerak, penggerak LED gerak, waktu tunggu gerak, offset gerak, GPULSE, GCONF3, dan aktifkan interupsi gerak).

Kontrol mode dan daya#

getMode() int#

Mengembalikan nilai mentah register ENABLE, yang mengkodekan fitur mana yang saat ini diaktifkan (daya, ALS, kedekatan, tunggu, interupsi ALS, interupsi kedekatan, gerak).

setMode(mode: int, enable: bool = True) None#

Mengaktifkan atau menonaktifkan fitur individual dalam register ENABLE. mode harus salah satu dari nilai APDS9960_MODE_* (APDS9960_MODE_POWER ..\ APDS9960_MODE_ALL). Ketika mode adalah APDS9960_MODE_ALL, semua bit diaktifkan atau dinonaktifkan sekaligus. Memunculkan ADPS9960InvalidMode untuk nilai di luar rentang.

enablePower() None#

Menghidupkan APDS9960 (mengatur bit PON dalam ENABLE).

disablePower() None#

Mematikan APDS9960 (menghapus bit PON dalam ENABLE).

Sensor cahaya sekitar / RGB#

enableLightSensor(interrupts: bool = True) None#

Memulihkan gain ALS default, mengonfigurasi bit aktifkan interupsi ALS, menghidupkan perangkat, dan mengaktifkan mesin cahaya sekitar/warna.

disableLightSensor() None#

Menonaktifkan interupsi ALS dan menghentikan mesin cahaya sekitar/warna.

readAmbientLight() int#

Membaca level cahaya sekitar saluran clear sebagai nilai unsigned 16-bit.

readRedLight() int#

Membaca level saluran merah sebagai nilai unsigned 16-bit.

readGreenLight() int#

Membaca level saluran hijau sebagai nilai unsigned 16-bit.

readBlueLight() int#

Membaca level saluran biru sebagai nilai unsigned 16-bit.

Sensor kedekatan#

enableProximitySensor(interrupts: bool = True) None#

Memulihkan gain kedekatan dan penggerak LED default, mengonfigurasi bit aktifkan interupsi kedekatan, menghidupkan perangkat, dan mengaktifkan mesin kedekatan.

disableProximitySensor() None#

Menonaktifkan interupsi kedekatan dan menghentikan mesin kedekatan.

readProximity() int#

Membaca level kedekatan sebagai nilai unsigned 8-bit.

Mesin gerak#

enableGestureSensor(interrupts: bool = True) None#

Mereset keadaan gerak, mengatur WTIME dan jumlah pulsa gerak, meningkatkan LED ke 300%, mengonfigurasi bit aktifkan interupsi gerak, memasuki mesin keadaan gerak, menghidupkan perangkat, dan mengaktifkan mode tunggu, kedekatan, dan gerak.

disableGestureSensor() None#

Mereset keadaan gerak, menonaktifkan interupsi gerak dan mesin keadaan, serta menghentikan mesin gerak.

isGestureAvailable() bool#

Mengembalikan True jika bit GVALID dari register status gerak diatur, menunjukkan bahwa data FIFO gerak siap dibaca.

readGesture() int#

Menguras FIFO gerak, menjalankan decoder gerak on-board, dan mengembalikan salah satu konstanta arah APDS9960_DIR_*. Mengembalikan APDS9960_DIR_NONE jika mesin tidak berjalan, tidak ada data valid yang tersedia, atau data tidak terselesaikan menjadi gerak yang dikenali.

resetGestureParameters() None#

Menghapus buffer FIFO gerak internal, delta, hitungan, penghitung dekat/jauh, keadaan, dan gerak terakhir yang didekode.

processGestureData() bool#

Memproses sampel FIFO U/D/L/R mentah yang saat ini di-buffer untuk memperbarui delta U/D dan L/R serta penghitung dekat/jauh. Mengembalikan True jika peristiwa dekat atau jauh terdeteksi, False sebaliknya.

decodeGesture() bool#

Mengkonversi hitungan U/D dan L/R saat ini serta delta yang terakumulasi menjadi arah yang disimpan dalam field internal gesture_motion_. Mengembalikan True ketika arah dikenali, False sebaliknya.

Ambang batas kedekatan#

getProxIntLowThresh() int#

Mengembalikan ambang batas interupsi kedekatan rendah (register PILT).

setProxIntLowThresh(threshold: int) None#

Mengatur ambang batas interupsi kedekatan rendah.

getProxIntHighThresh() int#

Mengembalikan ambang batas interupsi kedekatan tinggi (register PIHT).

setProxIntHighThresh(threshold: int) None#

Mengatur ambang batas interupsi kedekatan tinggi.

getProximityIntLowThreshold() int#

Alias untuk getProxIntLowThresh().

setProximityIntLowThreshold(threshold: int) None#

Alias untuk setProxIntLowThresh().

getProximityIntHighThreshold() int#

Alias untuk getProxIntHighThresh().

setProximityIntHighThreshold(threshold: int) None#

Alias untuk setProxIntHighThresh().

Penggerak LED, gain, dan boost#

getLEDDrive() int#

Mengembalikan kekuatan penggerak LED yang digunakan untuk kedekatan dan ALS. Dikodekan sebagai salah satu dari nilai APDS9960_LED_DRIVE_* (0 = 100 mA, 1 = 50 mA, 2 = 25 mA, 3 = 12.5 mA).

setLEDDrive(drive: int) None#

Mengatur kekuatan penggerak LED yang digunakan untuk kedekatan dan ALS. drive adalah salah satu dari nilai APDS9960_LED_DRIVE_*.

getProximityGain() int#

Mengembalikan gain penerima kedekatan. Dikodekan sebagai salah satu dari nilai APDS9960_PGAIN_* (0 = 1x, 1 = 2x, 2 = 4x, 3 = 8x).

setProximityGain(drive: int) None#

Mengatur gain penerima kedekatan. drive adalah salah satu dari nilai APDS9960_PGAIN_*.

getAmbientLightGain() int#

Mengembalikan gain sensor cahaya sekitar. Dikodekan sebagai salah satu dari nilai APDS9960_AGAIN_* (0 = 1x, 1 = 4x, 2 = 16x, 3 = 64x).

setAmbientLightGain(drive: int) None#

Mengatur gain sensor cahaya sekitar. drive adalah salah satu dari nilai APDS9960_AGAIN_*.

getLEDBoost() int#

Mengembalikan boost arus LED. Dikodekan sebagai salah satu dari nilai APDS9960_LED_BOOST_* (0 = 100%, 1 = 150%, 2 = 200%, 3 = 300%).

setLEDBoost(boost: int) None#

Mengatur boost arus LED. boost adalah salah satu dari nilai APDS9960_LED_BOOST_*.

Kompensasi gain kedekatan dan masker photodiode#

getProxGainCompEnable() bool#

Mengembalikan True jika kompensasi gain kedekatan diaktifkan.

setProxGainCompEnable(enable: bool) None#

Mengaktifkan atau menonaktifkan kompensasi gain kedekatan.

getProxPhotoMask() int#

Mengembalikan masker 4-bit dari photodiode kedekatan yang dinonaktifkan. Bit dipetakan sebagai 3=UP, 2=DOWN, 1=LEFT, 0=RIGHT; 1 menonaktifkan photodiode dan 0 mengaktifkannya.

setProxPhotoMask(mask: int) None#

Mengatur masker 4-bit dari photodiode kedekatan yang dinonaktifkan (lihat pengkodean di atas).

Konfigurasi gerak#

getGestureEnterThresh() int#

Mengembalikan ambang batas kedekatan yang diperlukan untuk memasuki mode gerak.

setGestureEnterThresh(threshold: int) None#

Mengatur ambang batas kedekatan yang diperlukan untuk memasuki mode gerak.

getGestureExitThresh() int#

Mengembalikan ambang batas kedekatan yang diperlukan untuk keluar dari mode gerak.

setGestureExitThresh(threshold: int) None#

Mengatur ambang batas kedekatan yang diperlukan untuk keluar dari mode gerak.

getGestureGain() int#

Mengembalikan gain photodiode yang digunakan selama mode gerak. Dikodekan sebagai salah satu dari nilai APDS9960_GGAIN_* (0 = 1x, 1 = 2x, 2 = 4x, 3 = 8x).

setGestureGain(gain: int) None#

Mengatur gain photodiode yang digunakan selama mode gerak.

getGestureLEDDrive() int#

Mengembalikan arus penggerak LED yang digunakan selama mode gerak. Dikodekan sebagai salah satu dari nilai APDS9960_LED_DRIVE_*.

setGestureLEDDrive(drive: int) None#

Mengatur arus penggerak LED yang digunakan selama mode gerak.

getGestureWaitTime() int#

Mengembalikan waktu tunggu daya rendah antara deteksi gerak. Dikodekan sebagai salah satu dari nilai APDS9960_GWTIME_* (0 = 0 ms .. 7 = 39.2 ms).

setGestureWaitTime(time: int) None#

Mengatur waktu tunggu daya rendah antara deteksi gerak.

getGestureMode() bool#

Mengembalikan True jika mesin keadaan gerak sedang berjalan.

setGestureMode(enable: bool) None#

Memasuki atau meninggalkan mesin keadaan gerak.

Ambang batas interupsi cahaya sekitar#

getLightIntLowThreshold() int#

Mengembalikan ambang batas rendah 16-bit yang digunakan untuk interupsi cahaya sekitar.

setLightIntLowThreshold(threshold: int) None#

Mengatur ambang batas rendah 16-bit yang digunakan untuk interupsi cahaya sekitar.

getLightIntHighThreshold() int#

Mengembalikan ambang batas tinggi 16-bit yang digunakan untuk interupsi cahaya sekitar.

setLightIntHighThreshold(threshold: int) None#

Mengatur ambang batas tinggi 16-bit yang digunakan untuk interupsi cahaya sekitar.

Aktifkan interupsi dan hapus#

getAmbientLightIntEnable() bool#

Mengembalikan True jika interupsi cahaya sekitar diaktifkan.

setAmbientLightIntEnable(enable: bool) None#

Mengaktifkan atau menonaktifkan interupsi cahaya sekitar.

getProximityIntEnable() bool#

Mengembalikan True jika interupsi kedekatan diaktifkan.

setProximityIntEnable(enable: bool) None#

Mengaktifkan atau menonaktifkan interupsi kedekatan.

getGestureIntEnable() bool#

Mengembalikan True jika interupsi gerak diaktifkan.

setGestureIntEnable(enable: bool) None#

Mengaktifkan atau menonaktifkan interupsi gerak.

clearAmbientLightInt() None#

Menghapus interupsi cahaya sekitar yang tertunda.

clearProximityInt() None#

Menghapus interupsi kedekatan yang tertunda.

class apds9960.uAPDS9960(bus: machine.I2C, address: int = 0x39, valid_id: list = [0xAB, 0x9C, 0xA8, -0x55])#

Subkelas MicroPython dari APDS9960. API publik identik, tetapi akses register yang mendasarinya menggunakan panggilan machine.I2C-style readfrom_mem dan writeto_mem daripada metode SMBus-style. Ini adalah kelas yang digunakan pada target OpenMV / MicroPython.

Pengecualian#

exception apds9960.ADPS9960InvalidDevId(id: int, valid_ids: list)#

Subkelas dari ValueError. Dimunculkan oleh konstruktor APDS9960 ketika nilai yang dibaca dari register ID chip tidak ada dalam daftar valid_id.

exception apds9960.ADPS9960InvalidMode(mode: int)#

Subkelas dari ValueError. Dimunculkan oleh APDS9960.setMode() ketika argumen mode berada di luar rentang APDS9960_MODE_POWER..\ APDS9960_MODE_ALL.

Konstanta#

Alamat I2C dan ID perangkat#

apds9960.APDS9960_I2C_ADDR: int#

Alamat I2C 7-bit default APDS9960 (0x39).

apds9960.APDS9960_DEV_ID: list#

Daftar default nilai register ID perangkat yang valid ([0xAB, 0x9C, 0xA8, -0x55]).

Penyetelan gerak#

apds9960.APDS9960_GESTURE_THRESHOLD_OUT: int#

Magnitudo sampel minimum (per photodiode) yang digunakan oleh decoder gerak saat mencari sampel FIFO pertama/terakhir dalam rentang.

apds9960.APDS9960_GESTURE_SENSITIVITY_1: int#

Ambang batas pada delta U/D dan L/R yang terakumulasi di mana decoder memutuskan arah gesekan.

apds9960.APDS9960_GESTURE_SENSITIVITY_2: int#

Ambang batas pada delta U/D dan L/R per langkah di mana decoder menganggap sampel sebagai kandidat dekat/jauh daripada gesekan.

apds9960.APDS9960_TIME_FIFO_PAUSE: int#

Milidetik yang tidur oleh loop gerak antara pengosongan FIFO.

Mode fitur#

Nilai-nilai ini diteruskan ke APDS9960.setMode().

apds9960.APDS9960_MODE_POWER: int#

Bit hidupkan daya (0).

apds9960.APDS9960_MODE_AMBIENT_LIGHT: int#

Bit aktifkan mesin cahaya sekitar/warna (1).

apds9960.APDS9960_MODE_PROXIMITY: int#

Bit aktifkan mesin kedekatan (2).

apds9960.APDS9960_MODE_WAIT: int#

Bit aktifkan keadaan tunggu (3).

apds9960.APDS9960_MODE_AMBIENT_LIGHT_INT: int#

Bit aktifkan interupsi cahaya sekitar (4).

apds9960.APDS9960_MODE_PROXIMITY_INT: int#

Bit aktifkan interupsi kedekatan (5).

apds9960.APDS9960_MODE_GESTURE: int#

Bit aktifkan mesin gerak (6).

apds9960.APDS9960_MODE_ALL: int#

Nilai sentinel (7) yang memberi tahu APDS9960.setMode() untuk mengaktifkan atau menonaktifkan setiap bit dalam register ENABLE sekaligus.

Arus penggerak LED#

apds9960.APDS9960_LED_DRIVE_100MA: int#

Penggerak LED 100 mA (0).

apds9960.APDS9960_LED_DRIVE_50MA: int#

Penggerak LED 50 mA (1).

apds9960.APDS9960_LED_DRIVE_25MA: int#

Penggerak LED 25 mA (2).

apds9960.APDS9960_LED_DRIVE_12_5MA: int#

Penggerak LED 12.5 mA (3).

Gain kedekatan (PGAIN)#

apds9960.APDS9960_PGAIN_1X: int#

Gain kedekatan 1x (0).

apds9960.APDS9960_PGAIN_2X: int#

Gain kedekatan 2x (1).

apds9960.APDS9960_PGAIN_4X: int#

Gain kedekatan 4x (2). Default diterapkan oleh konstruktor.

apds9960.APDS9960_PGAIN_8X: int#

Gain kedekatan 8x (3).

Gain cahaya sekitar (AGAIN)#

apds9960.APDS9960_AGAIN_1X: int#

Gain ALS 1x (0).

apds9960.APDS9960_AGAIN_4X: int#

Gain ALS 4x (1). Default diterapkan oleh konstruktor.

apds9960.APDS9960_AGAIN_16X: int#

Gain ALS 16x (2).

apds9960.APDS9960_AGAIN_64X: int#

Gain ALS 64x (3).

Gain gerak (GGAIN)#

apds9960.APDS9960_GGAIN_1X: int#

Gain gerak 1x (0).

apds9960.APDS9960_GGAIN_2X: int#

Gain gerak 2x (1).

apds9960.APDS9960_GGAIN_4X: int#

Gain gerak 4x (2). Default diterapkan oleh konstruktor.

apds9960.APDS9960_GGAIN_8X: int#

Gain gerak 8x (3).

Boost LED#

apds9960.APDS9960_LED_BOOST_100: int#

Boost LED 100% (0).

apds9960.APDS9960_LED_BOOST_150: int#

Boost LED 150% (1).

apds9960.APDS9960_LED_BOOST_200: int#

Boost LED 200% (2).

apds9960.APDS9960_LED_BOOST_300: int#

Boost LED 300% (3). Diterapkan secara otomatis oleh APDS9960.enableGestureSensor().

Waktu tunggu gerak#

apds9960.APDS9960_GWTIME_0MS: int#

0 ms (0).

apds9960.APDS9960_GWTIME_2_8MS: int#

2.8 ms (1). Default diterapkan oleh konstruktor.

apds9960.APDS9960_GWTIME_5_6MS: int#

5.6 ms (2).

apds9960.APDS9960_GWTIME_8_4MS: int#

8.4 ms (3).

apds9960.APDS9960_GWTIME_14_0MS: int#

14.0 ms (4).

apds9960.APDS9960_GWTIME_22_4MS: int#

22.4 ms (5).

apds9960.APDS9960_GWTIME_30_8MS: int#

30.8 ms (6).

apds9960.APDS9960_GWTIME_39_2MS: int#

39.2 ms (7).

Arah gerak#

Nilai-nilai ini dikembalikan oleh APDS9960.readGesture().

apds9960.APDS9960_DIR_NONE: int#

Tidak ada gerak yang terdeteksi (0).

apds9960.APDS9960_DIR_LEFT: int#

Gesekan kiri (1).

apds9960.APDS9960_DIR_RIGHT: int#

Gesekan kanan (2).

apds9960.APDS9960_DIR_UP: int#

Gesekan atas (3).

apds9960.APDS9960_DIR_DOWN: int#

Gesekan bawah (4).

apds9960.APDS9960_DIR_NEAR: int#

Peristiwa dekat (5).

apds9960.APDS9960_DIR_FAR: int#

Peristiwa jauh (6).

apds9960.APDS9960_DIR_ALL: int#

Nilai sentinel (7) yang digunakan secara internal untuk mewakili "semua arah".

Keadaan gerak#

Nilai keadaan internal yang dilaporkan melalui mesin keadaan gerak.

apds9960.APDS9960_STATE_NA: int#

Tidak ada keadaan (0).

apds9960.APDS9960_STATE_NEAR: int#

Keadaan dekat terdeteksi (1).

apds9960.APDS9960_STATE_FAR: int#

Keadaan jauh terdeteksi (2).

apds9960.APDS9960_STATE_ALL: int#

Nilai sentinel (3) yang digunakan secara internal untuk mewakili "semua keadaan".