STM32C8T6-APDS9960手勢識別
阿新 • • 發佈:2018-12-15
一:材料準備
spi-oled一個,APDS9960一個,stm32f103c8t6一個
二:引腳說明
VL引腳不接
sda,scl 不做過多解釋
INT 識別結束標誌位,本文使用PB0,配置如下:
extern int isr_flag ; //標誌位 //外部中斷0服務程式 void EXTIX_Init(void) { EXTI_InitTypeDef EXTI_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; EXTI_IO_Init(); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); //使能複用功能時鐘 //GPIOE.2 中斷線以及中斷初始化配置 下降沿觸發 GPIO_EXTILineConfig(GPIO_PortSourceGPIOB,GPIO_PinSource0); EXTI_InitStructure.EXTI_Line=EXTI_Line0; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); //根據EXTI_InitStruct中指定的引數初始化外設EXTI暫存器 NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; //使能所在的外部中斷通道 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //搶佔優先順序2, NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02; //子優先順序2 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中斷通道 NVIC_Init(&NVIC_InitStructure); } void EXTI_IO_Init() { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//使能PORTA,PORTE時鐘 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //設定成上拉輸入 GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIOE0 GPIO_SetBits(GPIOB,GPIO_Pin_0); } //外部中斷0服務程式 void EXTI0_IRQHandler(void) { delay_ms(10);//消抖 if(EXTI_GetITStatus(EXTI_Line0)!=RESET) { isr_flag = 1; EXTI_ClearITPendingBit(EXTI_Line0); //清除LINE2上的中斷標誌位 } }
9960的庫從網上找的,
識別結果有兩種模式,一種近距離,一種遠距離,官方給的庫是arduino的,讀者可以測試一遍
UP,WODN,RIGHT ,LEFT
NEAR(近距離), FAR(遠距離), NONE(沒有識別到)
識別距離參考資料手冊
廢話不多說 直接上圖