![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
This is the published version of the ADPD2140 driver for STM32 NUCLEO-L432KC microcontroller evaluation board. This firmware allows use of the ADPD2140 light angle sensor and ADPD1080 AFE on-chip gesture recognition engine. Swipe your hand over the sensor board to detect: -up -down -left -right -click
main.cpp@0:27c59a993903, 2018-11-20 (annotated)
- Committer:
- tylerrayADI
- Date:
- Tue Nov 20 18:16:45 2018 +0000
- Revision:
- 0:27c59a993903
This is the published version of the ADPD2140 daughterboard NUCLEO-L432KC code, used for gesture recognition with the ADPD2140 and ADPD1080.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
tylerrayADI | 0:27c59a993903 | 1 | // Copyright (C) 2018 Analog Devices, Inc. - All Rights Reserved |
tylerrayADI | 0:27c59a993903 | 2 | #include "mbed.h" |
tylerrayADI | 0:27c59a993903 | 3 | |
tylerrayADI | 0:27c59a993903 | 4 | I2C i2c(D4, D5); // I2C i2c(D14, D15); |
tylerrayADI | 0:27c59a993903 | 5 | DigitalIn gpio0(D9); |
tylerrayADI | 0:27c59a993903 | 6 | Serial serial(PA_2, PA_15, 115200); //Serial serial(D0, D1, 115200); |
tylerrayADI | 0:27c59a993903 | 7 | |
tylerrayADI | 0:27c59a993903 | 8 | uint16_t ADPD_Read_Register(uint8_t register_address) |
tylerrayADI | 0:27c59a993903 | 9 | { |
tylerrayADI | 0:27c59a993903 | 10 | char data[1] = {register_address}; |
tylerrayADI | 0:27c59a993903 | 11 | char buffer[2]; |
tylerrayADI | 0:27c59a993903 | 12 | i2c.write(0xC8, data, 1); |
tylerrayADI | 0:27c59a993903 | 13 | i2c.read(0xC9, buffer, 2); |
tylerrayADI | 0:27c59a993903 | 14 | uint16_t register_value = buffer[0]*256 + buffer[1]; |
tylerrayADI | 0:27c59a993903 | 15 | return(register_value); |
tylerrayADI | 0:27c59a993903 | 16 | } |
tylerrayADI | 0:27c59a993903 | 17 | |
tylerrayADI | 0:27c59a993903 | 18 | void ADPD_Write_Register(uint8_t register_address, uint16_t register_value) |
tylerrayADI | 0:27c59a993903 | 19 | { |
tylerrayADI | 0:27c59a993903 | 20 | char data[3]; |
tylerrayADI | 0:27c59a993903 | 21 | data[0] = register_address; |
tylerrayADI | 0:27c59a993903 | 22 | data[1] = register_value>>8; |
tylerrayADI | 0:27c59a993903 | 23 | data[2] = register_value; |
tylerrayADI | 0:27c59a993903 | 24 | i2c.write(0xC8, data, 3); |
tylerrayADI | 0:27c59a993903 | 25 | } |
tylerrayADI | 0:27c59a993903 | 26 | |
tylerrayADI | 0:27c59a993903 | 27 | void ADPD_Load_Config(void) |
tylerrayADI | 0:27c59a993903 | 28 | { |
tylerrayADI | 0:27c59a993903 | 29 | ADPD_Write_Register(0x10, 0x0001); |
tylerrayADI | 0:27c59a993903 | 30 | ADPD_Write_Register(0x00, 0x80FF); |
tylerrayADI | 0:27c59a993903 | 31 | ADPD_Write_Register(0x01, 0x01EF); |
tylerrayADI | 0:27c59a993903 | 32 | ADPD_Write_Register(0x02, 0x0005); |
tylerrayADI | 0:27c59a993903 | 33 | ADPD_Write_Register(0x06, 0x0000); |
tylerrayADI | 0:27c59a993903 | 34 | ADPD_Write_Register(0x11, 0x300B); |
tylerrayADI | 0:27c59a993903 | 35 | ADPD_Write_Register(0x12, 0x0050); |
tylerrayADI | 0:27c59a993903 | 36 | ADPD_Write_Register(0x14, 0x0555); |
tylerrayADI | 0:27c59a993903 | 37 | ADPD_Write_Register(0x15, 0x0000); |
tylerrayADI | 0:27c59a993903 | 38 | ADPD_Write_Register(0x18, 0x1F00); |
tylerrayADI | 0:27c59a993903 | 39 | ADPD_Write_Register(0x19, 0x1F00); |
tylerrayADI | 0:27c59a993903 | 40 | ADPD_Write_Register(0x1A, 0x1F00); |
tylerrayADI | 0:27c59a993903 | 41 | ADPD_Write_Register(0x1B, 0x1F00); |
tylerrayADI | 0:27c59a993903 | 42 | ADPD_Write_Register(0x23, 0x303F); |
tylerrayADI | 0:27c59a993903 | 43 | ADPD_Write_Register(0x25, 0x02CC); |
tylerrayADI | 0:27c59a993903 | 44 | ADPD_Write_Register(0x26, 0x0A00); |
tylerrayADI | 0:27c59a993903 | 45 | ADPD_Write_Register(0x28, 0x0050); |
tylerrayADI | 0:27c59a993903 | 46 | ADPD_Write_Register(0x30, 0x0319); |
tylerrayADI | 0:27c59a993903 | 47 | ADPD_Write_Register(0x31, 0x0813); |
tylerrayADI | 0:27c59a993903 | 48 | ADPD_Write_Register(0x34, 0x0000); |
tylerrayADI | 0:27c59a993903 | 49 | ADPD_Write_Register(0x39, 0x21FB); |
tylerrayADI | 0:27c59a993903 | 50 | ADPD_Write_Register(0x3C, 0x3006); |
tylerrayADI | 0:27c59a993903 | 51 | ADPD_Write_Register(0x42, 0x1C34); |
tylerrayADI | 0:27c59a993903 | 52 | ADPD_Write_Register(0x43, 0xADA5); |
tylerrayADI | 0:27c59a993903 | 53 | ADPD_Write_Register(0x4B, 0x2695); |
tylerrayADI | 0:27c59a993903 | 54 | ADPD_Write_Register(0x54, 0x0AA0); |
tylerrayADI | 0:27c59a993903 | 55 | } |
tylerrayADI | 0:27c59a993903 | 56 | |
tylerrayADI | 0:27c59a993903 | 57 | int main() { |
tylerrayADI | 0:27c59a993903 | 58 | i2c.frequency(400000); |
tylerrayADI | 0:27c59a993903 | 59 | |
tylerrayADI | 0:27c59a993903 | 60 | ADPD_Load_Config(); |
tylerrayADI | 0:27c59a993903 | 61 | ADPD_Write_Register(0x10, 0x0002); |
tylerrayADI | 0:27c59a993903 | 62 | uint16_t G; |
tylerrayADI | 0:27c59a993903 | 63 | |
tylerrayADI | 0:27c59a993903 | 64 | while(1) { |
tylerrayADI | 0:27c59a993903 | 65 | if (gpio0 == 0) { |
tylerrayADI | 0:27c59a993903 | 66 | G = ADPD_Read_Register(0x60); |
tylerrayADI | 0:27c59a993903 | 67 | ADPD_Write_Register(0x00, 0x80FF); |
tylerrayADI | 0:27c59a993903 | 68 | |
tylerrayADI | 0:27c59a993903 | 69 | if ((G>>7) & 0x01) { |
tylerrayADI | 0:27c59a993903 | 70 | serial.printf("click\n\r"); |
tylerrayADI | 0:27c59a993903 | 71 | } else if ((G>>6) & 0x01) { |
tylerrayADI | 0:27c59a993903 | 72 | serial.printf("down\n\r"); |
tylerrayADI | 0:27c59a993903 | 73 | } else if ((G>>5) & 0x01) { |
tylerrayADI | 0:27c59a993903 | 74 | serial.printf("up\n\r"); |
tylerrayADI | 0:27c59a993903 | 75 | } else if ((G>>4) & 0x01) { |
tylerrayADI | 0:27c59a993903 | 76 | serial.printf("right\n\r"); |
tylerrayADI | 0:27c59a993903 | 77 | } else if ((G>>3) & 0x01) { |
tylerrayADI | 0:27c59a993903 | 78 | serial.printf("left\n\r"); |
tylerrayADI | 0:27c59a993903 | 79 | } |
tylerrayADI | 0:27c59a993903 | 80 | } |
tylerrayADI | 0:27c59a993903 | 81 | } |
tylerrayADI | 0:27c59a993903 | 82 | } |