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".