paj-7620u2是由原相科技公司開發的一款手勢識別晶元, 內整合了光學陣列式感測器單元,可以快速準確的對輸入訊號進行感應和輸出處理。內建光源和環境光抑制濾波器,能在黑暗或低光環境下工作。它支援上、下、左、右、前、後、順時針旋轉、逆時針旋轉和揮動的手勢動作識別,以及支援物體接近檢測等功能。可大致檢測物體體積大小和亮度。使用iic通訊介面可達400khz通訊速率。
感測器內部自帶 led 驅動器,感測器感應陣列、目標資訊提取陣列和手勢識別陣列。感測器工作時通過內部 led 驅動器,驅動紅外 led 向外發射紅外線訊號,當感測器陣列在有效的距離中探測到物體時,目標資訊提取陣列會對探測目標進行特徵原始資料的獲取,獲取的資料被儲存在暫存器中,同時手勢識別陣列會對原始資料進行識別處理,最後將手勢結果存到暫存器中,使用者可根據 i2c 介面對原始資料和手勢識別的結果進行讀取。
vin供電輸入3.3-5v,gnd供電負極,sda資料線,scl時鐘線,int中斷輸出
手勢方向定義
stm32開發板
手勢感測器模組
手勢感測器獲取感應資訊,將結果通過開發版 usart1 串列埠輸給串列埠除錯助手程式顯示出來。
在 main 函式中,首先對 usart 串列埠與 key 按鍵進行初始化配置。然後對感測器paj7620u2 進行初始化配置。當對感測器初始化成功後則退出 while 迴圈,進入第 21 行paj7620u2 感測器功能測試階段。
int main
(void
)printf
("paj7620u2 初始化成功\r\n");
while(1
)}
在 test 函式中,第 12 行使用 scanf 函式,使開發板獲取來自串列埠除錯助手發出的控制指令。當開發板接收到的指令字元為「1」時,開發板控制感測器進入手勢識別工作模式;當接收到的指令字元為「2」時,開發板控制感測器進入接近檢測工作模式;當接收的字元既不是「1」也不是「2」時,則列印提示使用者輸入合法指令。
/**
* @brief paj7620u2感測器測試
* @param 無
* @retval 無
*/void
paj7620u2_sensor_test
(void
)show_mode_message();}}
手勢識別感測器可以工作在手勢識別與接近檢測 2 種模式狀態下。為了進行工作模式
的切換,我們採用了 key 按鈕外部中端的方式。
key 外部中斷
當我們想退出當前的工作模式時,可通過按住 key1 按鈕,激發產生 exti 中斷響應。在 irqhandler 中斷處理函式中,(第 9 行)當接受到中斷訊號時,變數 flag 賦值為 1。
中斷**如下
void
key1_irqhandler
(void
)}
手勢識別工作模式
在 gesrure_test()函式中,首先對 paj7620u2 手勢識別檢測進行初始化,(第 14 行**)配置其 gesture_arry 陣列的引數值。該陣列有使能 9 個手勢識別的中斷標誌輸出的配置,初始化完畢後,在 while 迴圈中一直讀取手勢中斷標誌暫存器(第 26 行**),當識別到相應的手勢,手勢標誌會置 1,讀取暫存器標誌會自動清 0。根據手勢的標誌手勢結果將被列印到串列埠上。當按下 key 按鍵,在中斷處理函式中標誌變數 flag 被賦值 1(第 20 行**),此時關閉 9 個手勢識別的檢測輸出,退出當前的手勢識別測試模式。
/**
* @brief 手勢識別測試
* @param 無
* @retval 無
*/void
gesrure_test
(void);
uint16_t gesture_data;
paj7620u2_selectbank
(bank0);
//進入bank0
for(i=
0;i<
gesture_size
;i++
)paj7620u2_selectbank
(bank0);
//切換回bank0
printf
("按key1鍵退出當前模式\r\n");
while(1
)
status =
gs_read_nbyte
(paj_get_int_flag1,2
,&data[0]
);//讀取手勢狀態 if(
!status)}}
}}
接近檢測測試
ps_test()函式實現接近檢測,獲取接近物體的體積大小和亮度的資料。首先對paj7620u2 接近檢測進行初始化,配置其 proximity_arry 的陣列引數值(第 16 行**),初始化完成後,在 while(1)迴圈中,讀取獲取體積大小和亮度的暫存器,並將讀取結果列印到串列埠上。當按下 key 按鍵,在中斷處理函式中標誌變數 flag 被賦值 1(第 23 行**),退出當前的接近檢測測試模式。
/**
* @brief 接近檢測測試
* @param 無
* @retval 無
*/void
ps_test
(void);
uint8_t obj_brightness=0;
uint16_t obj_size=0;
paj7620u2_selectbank
(bank0);
//進入bank0
for(i=
0;i<
proxim_size
;i++
)paj7620u2_selectbank
(bank0);
//切換回bank0
printf
("按key1鍵退出當前模式\r\n");
while(1
) obj_brightness =
gs_read_byte
(paj_get_object_brightness);
//讀取物體亮度
data[0]
=gs_read_byte
(paj_get_object_size_1);
//讀取物體大小
本實驗可以通過揮舞手勢直觀的了解感測器的手勢識別的基本功能以及接近檢測的功能。
linux spi驅動分析 基於STM32
linux kernel 版本2.6.30,spi驅動基於platform device,platform driver驅動模型來編寫.spi分為主從裝置,乙個主裝置下可心掛接多個從裝置,linux驅動中使用struct spi master結構來表示乙個主裝置,使用struct spi devic...
stm32用pwm驅動舵機
舵機的主要組成部分為伺服電機,所謂伺服就是服從訊號的要求而動作。在訊號來之前,轉子停止不動 訊號來到之後,轉子立即運動。因此我們就可以給舵機輸入不同的訊號,來控制其旋轉到不同的角度。舵機接收的是pwm訊號,當訊號進入內部電路產生乙個偏置電壓,觸發電機通過減速齒輪帶動電位器移動,使電壓差為零時,電機停...
小結 stm32 驅動LED燈
使用位帶操作,位帶操作就是把每個位元膨脹成乙個32位的字,當訪問這些字的時候就訪問這些位元位。然後,埠使能 pb5 pe5 led io void led init void gpio setbits gpiob,gpio pin 5 這個必須要寫,取位址。gpio setbits gpiob,gp...