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

Dependencies:   mbed mbed-dsp

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?

UserRevisionLine numberNew 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 }