atk-paj7620手勢(shì)識(shí)別傳感器模塊使用說(shuō)明 nano stm32f1 _an1805_W_第1頁(yè)
atk-paj7620手勢(shì)識(shí)別傳感器模塊使用說(shuō)明 nano stm32f1 _an1805_W_第2頁(yè)
atk-paj7620手勢(shì)識(shí)別傳感器模塊使用說(shuō)明 nano stm32f1 _an1805_W_第3頁(yè)
atk-paj7620手勢(shì)識(shí)別傳感器模塊使用說(shuō)明 nano stm32f1 _an1805_W_第4頁(yè)
atk-paj7620手勢(shì)識(shí)別傳感器模塊使用說(shuō)明 nano stm32f1 _an1805_W_第5頁(yè)
已閱讀5頁(yè),還剩14頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 正點(diǎn)原子AN1805AN1805 ATK-PAJ7620U2 手勢(shì)識(shí)別傳感器模塊使用說(shuō)明本應(yīng)用文檔(AN1805)將教大家如何在 ATK-PAJ7620U2 手勢(shì)識(shí)別傳感器模塊。本文檔分為如下幾部分: 1, ATK-PAJ7620U2 模塊簡(jiǎn)介 2, 硬件連接 3, 軟件實(shí)現(xiàn) 4, 驗(yàn)證 1、ATK-PAJ7620U2 模塊簡(jiǎn)介ATK-PAJ7620U2_V1.2(V1.2 是版本號(hào),下面均以 NANO STM32F103 開(kāi)發(fā)板上使用 ALIENTEKATK-PAJ7620U2 表示該產(chǎn)品) 是 ALIENTEK 推出的一款高性能手勢(shì)識(shí)別傳感器模塊。該模塊采

2、用原相科技(Pixart)公司的PAJ7620U2 芯片,芯片內(nèi)部集成了光學(xué)數(shù)組式傳感器,以使復(fù)雜的手勢(shì)和光標(biāo)模式輸出,自帶九種手勢(shì)識(shí)別,支持上、下、左、右、前、后、順時(shí)針旋轉(zhuǎn)、逆時(shí)針旋轉(zhuǎn)和揮動(dòng)的手勢(shì)動(dòng)作識(shí)別,以及支持物體接近檢測(cè)等功能。 ATK-PAJ7620U2 模塊具有:體積小、靈敏度高、支持中斷輸出、兼容 3.3V/5V 系統(tǒng)、使用方便等特點(diǎn),模塊通過(guò) 6 個(gè) 2.54mm 間距的排針與外部連接,模塊外觀如圖 1.1 所示:圖 1.1 ATK-PAJ7620U2 模塊外觀圖 1.1 PAJ7620U2 簡(jiǎn)介PAJ7620U2 是原相科技(PixArt)公司推出的一款光學(xué)數(shù)組式傳感器,內(nèi)

3、置光源和環(huán)境光抑制濾波器集成的 LED,鏡頭和手勢(shì)感測(cè)器在一個(gè)小的立方體模組,能在或低光環(huán)境下工作。同時(shí)傳感器內(nèi)置手勢(shì)識(shí)別,支持 9 個(gè)手勢(shì)類(lèi)型和輸出的手勢(shì)中斷結(jié)果。并且內(nèi)置接近檢測(cè)功能,可用于感測(cè)物體接近或離開(kāi)。 PAJ7620U2 的特點(diǎn)包括: IIC 接口,支持高達(dá) 400Khz 通信速率。 內(nèi)置 9 個(gè)手勢(shì)類(lèi)型(上、下、左、右、前、后、順時(shí)針旋轉(zhuǎn)、逆時(shí)針旋轉(zhuǎn)、揮動(dòng)),支持輸出中斷。 支持接近檢測(cè)功能,檢測(cè)物體體積大小和亮度。 待機(jī)功耗電流 15uA。 抗燈光干擾 PAJ7620U2 的模塊功能框圖如圖 1.1.1 所示: 1開(kāi)源電子網(wǎng)08/09/2018

4、正點(diǎn)原子AN1805圖 1.1.1 PAJ7620U2 功能框圖 在圖 1.1.1 框圖可以看到,PAJ7620U2 內(nèi)部自帶 LED 驅(qū)動(dòng)器,傳感器感應(yīng)陣列、目標(biāo)信息提取陣列和手勢(shì)識(shí)別陣列。PAJ7620U2 工作時(shí)通過(guò)內(nèi)部 LED 驅(qū)動(dòng)器,驅(qū)動(dòng)紅外 LED 向外發(fā)射紅外線信號(hào),當(dāng)傳感器陣列在有效的距離中探測(cè)到物體時(shí),目標(biāo)信息提取陣列會(huì)對(duì)探測(cè)目標(biāo)進(jìn)行特征原始數(shù)據(jù)的獲取,獲取的數(shù)據(jù)會(huì)存在寄存器中,同時(shí)手勢(shì)識(shí)別陣列會(huì)對(duì)原始數(shù)據(jù)進(jìn)行識(shí)別處理,最后將手勢(shì)結(jié)果存到寄存器中,用戶(hù)可根據(jù) I2C 接口對(duì)原始數(shù)據(jù)和手 勢(shì)識(shí)別的結(jié)果進(jìn)行讀取。 1.2 手勢(shì)操作說(shuō)明PAJ7620

5、U2 內(nèi)部自帶了 9 個(gè)手勢(shì)識(shí)別,分別是“上”、“下”、“左”、“右”、“前”、“后”、“順時(shí)針旋轉(zhuǎn)”、“逆時(shí)針旋轉(zhuǎn)”、“揮動(dòng)”。使用時(shí)傳感器的開(kāi)窗口位置需朝上,如圖 1.2.1 所示: 圖 1.2.1 傳感器朝向位置(開(kāi)窗口向上) 手在傳感器的上方,保持與傳感器的垂直距離,做出圖 1.2.2(1)和(2)所示的手勢(shì),可以分別得出“上”、“下”、“左”、“右”、“順時(shí)針旋轉(zhuǎn)”、“逆時(shí)針旋轉(zhuǎn)”、“揮動(dòng)”的識(shí)別結(jié)果。 圖 1.2.2(1)“上”、“下”、“左”、“右”手勢(shì) 2開(kāi)源電子網(wǎng)08/09/2018 正點(diǎn)原子AN1805圖 1.2

6、.2(2)“順時(shí)針旋轉(zhuǎn)”、“逆時(shí)針旋轉(zhuǎn)”、“揮動(dòng)”手勢(shì) 手在傳感器的上方,與傳感器的垂直方向上距離有相對(duì)的變化,做出圖 1.2.2(3)所示的手勢(shì),可以得出“前”、“后”的識(shí)別結(jié)果。 圖 1.2.2(3)“前”、“后”手勢(shì) 1.3 模塊常用寄存器簡(jiǎn)介PAJ7620U2 內(nèi)部總共有上百個(gè)寄存器,但官方的也只是對(duì)部分的寄存器進(jìn)行講解,這里我們僅介紹PAJ7620U2 常用的幾個(gè)寄存器。其他的請(qǐng)大家參考:PAJ7620U2 芯片手冊(cè)。 這里我們先提及下,在 PAJ7620U2 的內(nèi)部有兩個(gè) BANK 寄存器區(qū)域,分別是 BANK0 和 BANK1。不同的區(qū)域用于訪問(wèn)不同的功能寄存器,但想訪問(wèn)其中的

7、BANK 區(qū)域下的寄存器,需在訪問(wèn)前發(fā)送控制指令進(jìn)入該寄存器區(qū)域,具體控制指令如表 1.3.1 所示: 表 1.3.1 控制指令 從表可以看到,進(jìn)入 BANK0 區(qū)域往傳感器 0xEF 地址寫(xiě) 0x00 數(shù)值,而 BANK1 區(qū)域往傳感器 0xEF 地址寫(xiě) 0x01 數(shù)值。 首先,我們介紹下BANK1 下的 PAJ7620U2 使能工作寄存器,該寄存器地址為 0X72, 3開(kāi)源電子網(wǎng)08/09/2018BANK 區(qū)域 地址 數(shù)值 BANK00xEF0x00BANK10xEF0x01 正點(diǎn)原子AN1805寄存器描述如圖 1.3.2 所

8、示:圖 1.3.2 使能工作寄存器 該寄存器用于使能 PAJ7620U2 工作,這里我們只關(guān)心 bit0 位,設(shè)置為 1,則使能PAJ7620 工作,設(shè)置為 0,則失能PAJ7620U2 工作。 接下來(lái)我們介紹下 BANK0 下的掛起管理寄存器,該寄存器地址為 0X03,各位描述如圖 1.3.3 所示: 圖 1.3.3 掛起管理寄存器各位描述 其中,Suspend bit0 位用來(lái)控制掛起,要使PAJ7620U2 進(jìn)入掛起狀態(tài),并非設(shè)置該位為1 就可以,手冊(cè)上有具體說(shuō)明如何進(jìn)入和退出掛起,如圖 1.3.4 所示: 圖 1.3.4 進(jìn)入和退出掛起過(guò)程 進(jìn)入掛起前,先配置 BANK1 的 PAJ7

9、620U2 使能工作寄存器 0X72 為 0X00,失能PAJ7620U2 工作,然后再往 BANK0 的掛起管理寄存器 0X03 寫(xiě) 0X01,才真正的掛起PAJ7620U2。而退出掛起到喚醒工作,則需執(zhí)行 3 個(gè)步驟: (1)往PAJ7620U2 發(fā)送寫(xiě)命令,以觸發(fā)喚醒,命令格式如圖 1.3.5 所示: 圖 1.3.5 喚醒命令格式 喚醒命令格式就是 I2C 通訊的命令格式,從圖可以看到,在發(fā)送寫(xiě)命令后不用等待 PAJ7629U2 的應(yīng)答,直接發(fā)送停止就可以了。 (2)發(fā)送完喚醒命令后,需等待大于 700us 的時(shí)間,然后讀取PAJ7620U2 的 0X00 寄存器,判斷是否為 0X20

10、數(shù)值,若不是則繼續(xù)執(zhí)行步驟 1 繼續(xù)喚醒。直到讀取 0X00 寄存器值為 0X20,則喚醒成功。 4開(kāi)源電子網(wǎng)08/09/2018 正點(diǎn)原子AN1805(3)喚醒成功后(由于在掛起時(shí),把PAJ7620U2 給關(guān)閉了)往BANK1 的使能工作寄存器 0X72 寫(xiě) 0X01,使能 PAJ7620U2 工作。 按照上面的三個(gè)步驟,就可以讓 PAJ7620U2 從掛起到喚醒工作了。這里需注意一下, PAJ7620U2 首次上電,傳感器也是工作在掛起狀態(tài),同樣也需喚醒其工作。 接著我們看下BANK0 下的手勢(shì)檢測(cè)輸出中斷使能寄存器 1,該寄存

11、器地址為 0X41,各位描述如圖 1.3.6 所示: 圖 1.3.6 手勢(shì)檢測(cè)輸出中斷使能寄存器 1該寄存器作用于手勢(shì)識(shí)別,bit0bit7 位用于使能不同手勢(shì)識(shí)別結(jié)果的中斷輸出,默認(rèn)值為 0XFF,其中 bit0 位為“上”、bit1 位為“下”、bit2 位為“左”、bit3 位為“右”、bit4 位為“前”、bit5 位為“后”、bit6 位為“順時(shí)針旋轉(zhuǎn)”、而 bit7 位為“逆時(shí)針旋轉(zhuǎn)”。對(duì)應(yīng)位設(shè)置為 1,則使能,當(dāng)檢測(cè)到對(duì)應(yīng)的手勢(shì)識(shí)別時(shí),會(huì)輸出對(duì)應(yīng)手勢(shì)識(shí)別結(jié)果中斷。若對(duì)應(yīng)位設(shè)置為0,則關(guān)閉手勢(shì)識(shí)別結(jié)果中斷。 接著我們看下BANK0 下的手勢(shì)檢測(cè)輸出中斷使能寄存器 2,該寄存器地址為

12、 0X42,各 位描述如圖 1.3.7 所示: 圖 1.3.7 手勢(shì)檢測(cè)輸出中斷使能寄存器 2該寄存器也是作用于手勢(shì)識(shí)別,其中只有 bit0 位有作用,bit1-bit7 為保留位,寄存器默認(rèn)值為 0XFF。bit0 為用于使能手勢(shì)識(shí)別“揮動(dòng)”的輸出中斷,當(dāng) bit0 位設(shè)置為 1 時(shí),則使能“揮動(dòng)”手勢(shì)識(shí)別輸出中斷,設(shè)置 0,則關(guān)閉輸出中斷。 5開(kāi)源電子網(wǎng)08/09/2018 正點(diǎn)原子AN1805接著我們看下 BANK0 的手勢(shì)識(shí)別中斷標(biāo)志寄存器 1,該地址為 0X43,各位描述如圖 1.3.8 所示: 圖 1.3.8 手勢(shì)識(shí)別中

13、斷標(biāo)志寄存器 1該寄存器作用于手勢(shì)識(shí)別,實(shí)現(xiàn)手勢(shì)識(shí)別輸出結(jié)果的中斷標(biāo)志。當(dāng) BANK0 寄存器 0X41 使能了對(duì)應(yīng)手勢(shì)中斷位后,當(dāng) PAJ7620U2 檢測(cè)到內(nèi)置的手勢(shì),則對(duì)應(yīng)的寄存器手勢(shì)標(biāo)志會(huì)置 1,讀取標(biāo)志可清除對(duì)應(yīng)的中斷標(biāo)志位。用戶(hù)根據(jù)讀取對(duì)應(yīng)的狀態(tài),可知道當(dāng)前手勢(shì)識(shí)別的結(jié)果。 接著我們看下 BANK0 的手勢(shì)識(shí)別中斷標(biāo)志寄存器 2,該地址為 0X44,各位描述如圖 1.3.9 所示: 圖 1.3.9 手勢(shì)識(shí)別中斷標(biāo)志寄存器 2該寄存器是承接著 0X43 寄存器,同樣也是作用于手勢(shì)識(shí)別,實(shí)現(xiàn)手勢(shì)識(shí)別輸出結(jié)果的中斷標(biāo)志,其中只有 bit0 位有作用,bit1-bit7 為保留位。當(dāng) BA

14、NK0 寄存器 0X42 使能了“揮動(dòng)”手勢(shì)中斷位后,PAJ7620U2 檢測(cè)到“揮動(dòng)”的手勢(shì),則對(duì)應(yīng)的寄存器手勢(shì)標(biāo)志會(huì)置 1, 讀取標(biāo)志可清除對(duì)應(yīng)的中斷標(biāo)志位。用戶(hù)根據(jù)讀取對(duì)應(yīng)的狀態(tài),可知道當(dāng)前手勢(shì)識(shí)別的結(jié)果。 接下來(lái)我們看下 BANK0 的檢測(cè)物體亮度寄存器,該地址為 0XB0,寄存器描述如圖 1.3.10 所示: 6開(kāi)源電子網(wǎng)08/09/2018 正點(diǎn)原子AN1805圖 1.3.10 檢測(cè)物體亮度寄存器 該寄存器實(shí)現(xiàn)獲取檢測(cè)物體亮度值。在接近檢測(cè)下,當(dāng)物體在 PAJ7620U2 的有效檢測(cè)距離內(nèi),讀取該寄存器能獲得物體的亮度,

15、亮度值為 0255。 接下來(lái)我們看下 BANK0 的檢測(cè)物體體積大小寄存器,地址為 0XB2 和 0XB1,寄存器 描述如圖 1.3.11 所示: 圖 1.3.11 檢測(cè)物體體積大小寄存器 物體的體積大小值由兩個(gè)寄存器值組合而成,分別是 0XB2 寄存器的低四位值和 0XB1 寄存器八位值。在接近檢測(cè)下,當(dāng)物體在 PAJ7620U2 的有效檢測(cè)距離內(nèi),讀取這兩個(gè)寄存器能獲得物體體積大小,體積值為 0900。 以上就是常用的寄存器介紹,更多的寄存器介紹說(shuō)明請(qǐng)看PAJ7620U2 芯片手冊(cè)。 1.4 模塊實(shí)驗(yàn)流程本例程實(shí)驗(yàn)主要測(cè)試 PAJ7620U2 的手勢(shì)識(shí)別和接近檢測(cè)(物體的體積大小和亮度)的

16、功能(采用輪詢(xún)方式,沒(méi)有使用中斷引腳),具體的工作流程如圖 1.4.1 所示: 7開(kāi)源電子網(wǎng)08/09/2018 正點(diǎn)原子AN1805圖 1.4.1 工作流程圖 在前面的寄存器介紹有提及過(guò),PAJ7620U2 在初次上電時(shí)會(huì)處于掛起狀態(tài),所以需喚醒才能使用,喚醒后需要初始化,但在 PAJ7620U2 的初始化中,需配置多個(gè)寄存器,而有些寄存器手冊(cè)沒(méi)提及到,不過(guò)幸好的是手冊(cè)上有提供配置數(shù)組給用戶(hù),我們直接調(diào)用就可以了。同樣手勢(shì)識(shí)別和接近檢測(cè),手冊(cè)也有提供初始化配置數(shù)組,我們也是調(diào)用就可以了。 在實(shí)驗(yàn)例程中,手勢(shì)識(shí)別和接近檢測(cè)通過(guò)按鍵進(jìn)

17、行選擇,下面我們說(shuō)下: 1:手勢(shì)識(shí)別測(cè)試:通過(guò) KEY1 按鍵進(jìn)入此項(xiàng)測(cè)試。實(shí)現(xiàn) PAJ7620U2 自帶的 9 個(gè)手勢(shì)識(shí)別檢測(cè),向上(Up)、向下(Dowm)、向左(Left)、向右(Right)、向前(Forward)、 向后(Backward)、順時(shí)針旋轉(zhuǎn)(Clockwise)、逆時(shí)針旋轉(zhuǎn)(Counterclockwise)和 揮動(dòng)(Wave)。當(dāng)識(shí)別到正確的手勢(shì),DS1 燈會(huì)閃爍,同時(shí)手勢(shì)結(jié)果通過(guò)串口輸出。DS0燈閃爍提示程序正在運(yùn)行。 2,接近檢測(cè)測(cè)試:通過(guò) KEY0 按鍵進(jìn)入此項(xiàng)測(cè)試。實(shí)現(xiàn)讀取 PAJ7620U2 接近物體的體積大小和亮度的傳感器數(shù)據(jù),數(shù)據(jù)串口輸出,同時(shí) DS0 燈

18、閃爍,提示程序正在運(yùn)行。 2、硬件連接2.1 硬件準(zhǔn)備資源本實(shí)驗(yàn)所需要的硬件資源如下 1,ALIENTEK NANO STM32 開(kāi)發(fā)板 1 個(gè) 3,ATK-PAJ7620U2 模塊 1 個(gè)(包含連接的杜邦線) 4,Micro USB 線一條(用于供電和模塊與電腦串口調(diào)試助手通信)2.2 模塊與開(kāi)發(fā)板連接NANO STM32 開(kāi)發(fā)板與 ATK-PAJ7620U2 模塊的連接關(guān)系如表 2.3.1 所示: 8開(kāi)源電子網(wǎng)08/09/2018 正點(diǎn)原子AN1805表 2.2.1 ATK-PAJ7620U2 模塊與NANO STM32 開(kāi)發(fā)板

19、連接關(guān)系圖 3、軟件實(shí)現(xiàn)本實(shí)驗(yàn)在NANO STM32 開(kāi)發(fā)板的 IIC 實(shí)驗(yàn)基礎(chǔ)上進(jìn)行修改。 由于例程中沒(méi)有用到 24C02,所以,先去掉 24cxx.c 和 myiic.c。然后在 HARDWARE 文件夾下新建一個(gè)PAJ7620U2 的文件夾。然后新建 paj7620u2.c、paj7620u2.h、paj7620u2_iic.c、paj7620u2_iic.h、paj7620u2_cfg.h 共 5 個(gè)文件,paj7620u2.c 文件為手勢(shì)識(shí)別和接近檢測(cè)的驅(qū)動(dòng),paj7620u2_iic 文件為底層的 IIC 驅(qū)動(dòng),而 paj7620u2_cfg.h 文件為存放上電初始化、手勢(shì)識(shí)別初始

20、化、以及接近檢測(cè)初始化的配置數(shù)組。接著在工程目錄 HARDWARE 文件夾中添加paj7620u2_iic.c 和 paj7620u2.c 文件,最后添加頭文件包含路徑。最終的工程如圖 3.1 所示: 圖 3.1 ATK-PAJ7620U2 模塊測(cè)試實(shí)驗(yàn)工程截圖 本例程代碼比較簡(jiǎn)單,這里我們先說(shuō)下 paj7620u2_cfg.h 文件,該文件內(nèi)容是關(guān)于初始化配置數(shù)組的,代碼如下: 9開(kāi)源電子網(wǎng)08/09/2018#define INIT_SIZE sizeof(init_Array)/2/上電初始化數(shù)組 const unsigned char init_Array

21、2 = 0xEF,0x00,0x37,0x07,0x38,0x17,.省略部分設(shè)置 ATK-PAJ7620U2 手勢(shì)識(shí)別傳感器模塊與開(kāi)發(fā)板連接關(guān)系A(chǔ)TK-PAJ7620U2 模塊VCCGNDSCLSDANANO STM32 開(kāi)發(fā)板5VGNDPA2PA3 正點(diǎn)原子AN1805以上代碼,我們省略了部分(全部貼出來(lái)太長(zhǎng)了),該文件包含了三個(gè)配置數(shù)組,分別作用于上電時(shí)的初始化、手勢(shì)識(shí)別以及接近檢測(cè)。該數(shù)組為二維數(shù)組,每個(gè)數(shù)組的第一個(gè)字節(jié)為寄存器號(hào)(也就是寄存器地址),第二個(gè)字節(jié)為要設(shè)置的值,比如0xEF,0X00,就表示在 0xEF 地址,寫(xiě)入 0x00 這個(gè)值。 接下

22、來(lái)我們說(shuō)下 paj7620u2_iic.c 文件,該文件包括 PAJ7620U2 的 IIC 底層驅(qū)動(dòng)讀寫(xiě)函數(shù),引腳 IO 初始化以及喚醒命令的函數(shù),關(guān)于底層和 IO 初始化就不做講解了。這里我們講解下喚醒命令函數(shù),喚醒命令函數(shù)代碼如下: 該函數(shù)實(shí)現(xiàn)觸發(fā)喚醒,在前面有說(shuō)到,喚醒需發(fā)送喚醒命令,而喚醒命令其實(shí)就是寫(xiě)指令,在發(fā)送寫(xiě)指令給 PAJ7620U2 后,不必等待 PAJ7620U2 返回的應(yīng)答,直接釋放總線就可以 10開(kāi)源電子網(wǎng)08/09/2018/PAJ7620U2 喚醒命令 void GS_WakeUp(void)GS_IIC_Start();/開(kāi)始GS_

23、IIC_Send_Byte(PAJ7620_ID);/發(fā)寫(xiě)命令GS_IIC_Stop();/釋放總線 0x73,0x35,0x74,0x00,0x77,0x01,;#define PROXIM_SIZE sizeof(proximity_arry)/2/接近檢測(cè)初始化數(shù)組 const unsigned char proximity_arry2=0xEF,0x00,0x41,0x00,0x42,0x00,0x6B,0x50,.省略部分設(shè)置 0x6C,0xC3,0x6D,0x50,0x6E,0xC3,0x74,0x05,;#define GESTURE_SIZE sizeof(gesture_ar

24、ry)/2/手勢(shì)識(shí)別初始化數(shù)組 const unsigned char gesture_arry2=0xEF,0x00,0x74,0x00,.省略部分設(shè)置 0xEF,0x00,0x41,0xFF,0x42,0x01,; 正點(diǎn)原子AN1805觸發(fā)一次喚醒。 接下來(lái)我們說(shuō)下 paj7620u2.c 文件,該文件包括手勢(shì)識(shí)別和接近檢測(cè)等代碼,這里我們講下: (1)paj7620u2_selectBank()函數(shù),具體代碼如下: 該函數(shù)實(shí)現(xiàn)選擇BANK 區(qū)域,通過(guò) bank 的入口參數(shù)選擇要進(jìn)入 BANK 的區(qū)域。 (2)paj7620u2_wakeup()函數(shù),具體代

25、碼如下: 該函數(shù)實(shí)現(xiàn)對(duì) PAJ7620U2 喚醒,在代碼中我們發(fā)送兩次GS_Wake()喚醒命令,因?yàn)榘l(fā)送一次,可能會(huì)遇到喚醒不起 PAJ7620U2。在發(fā)送喚醒命令后需等待大于 700us 的時(shí)間,然后切換到 BANK0 區(qū)域,讀取 0x00 寄存器,判斷讀取的值是否為 0x20,若是則喚醒成功,否則喚醒失敗。 (3)paj7620u2_init()函數(shù),具體代碼如下: 11開(kāi)源電子網(wǎng)08/09/2018/PAJ7620U2 初始化 /返回值:0:失敗 1:成功u8 paj7620u2_init(void)u8 i;u8 status;GS_i2c_init()

26、;/IIC 初始化 /PAJ7620U2 喚醒 u8 paj7620u2_wakeup(void)u8 data=0x0a;GS_WakeUp();/喚醒 PAJ7620U2 delay_ms(5);/喚醒時(shí)間700us GS_WakeUp();/喚醒 PAJ7620U2 delay_ms(5);/喚醒時(shí)間700uspaj7620u2_selectBank(BANK0);/進(jìn)入 BANK0 寄存器區(qū)域 data = GS_Read_Byte(0x00);/讀取狀態(tài)if(data!=0x20) return 0; /喚醒失敗 return 1;/選擇 PAJ7620U2 BANK 區(qū)域 void

27、 paj7620u2_selectBank(bank_e bank)switch(bank)case BANK0: GS_Write_Byte(PAJ_REGITER_BANK_SEL,PAJ_BANK0);break;/BANK0 寄存器區(qū)域 case BANK1: GS_Write_Byte(PAJ_REGITER_BANK_SEL,PAJ_BANK1);break;/BANK1 寄存器區(qū)域 正點(diǎn)原子AN1805該函數(shù)實(shí)現(xiàn)對(duì) PAJ7620U2 初始化,先對(duì) IIC 通信的 IO 引腳初始化,然后調(diào)用paj7620u2_wakeup()函數(shù)對(duì) PAJ7620

28、U2 進(jìn)行喚醒,喚醒成功后,由于后面要調(diào)用init_Array 初始化數(shù)組,初始化時(shí)是從 BANK0 區(qū)域開(kāi)始的,所以這里先選擇進(jìn)入 BANK0 區(qū)域,初始化數(shù)組配置完畢后,又切換回 BANK0 區(qū)域,這時(shí) PAJ7620U2 初始化完成。 (4)Gesrure_test()函數(shù),具體代碼如下: 12開(kāi)源電子網(wǎng)08/09/2018/手勢(shì)識(shí)別測(cè)試 void Gesrure_test(void)u8 i;u8 status;u8 data2=0x00; u16 gesture_data; u8 ledflash=0;paj7620u2_selectBank(BANK0

29、);/進(jìn)入 BANK0 寄存器區(qū)域 for(i=0;iGESTURE_SIZE;i+)GS_Write_Byte(gesture_arryi0,gesture_arryi1);/手勢(shì)識(shí)別模式初始化 paj7620u2_selectBank(BANK0);/切換回 BANK0 寄存器區(qū)域 i=0;printf(rn 手勢(shì)識(shí)別測(cè)試rn); while(1)status = GS_Read_nByte(PAJ_GET_INT_FLAG1,2,&data0);/讀取手勢(shì)狀態(tài)if(!status)gesture_data =(u16)data18 | data0; if(gesture_data)sta

30、tus = paj7620u2_wakeup();/喚醒 PAJ7620U2 if(!status) return 0;paj7620u2_selectBank(BANK0);/進(jìn)入 BANK0 寄存器區(qū)域 for(i=0;iINIT_SIZE;i+)GS_Write_Byte(init_Arrayi0,init_Arrayi1);/初始化 PAJ7620U2paj7620u2_selectBank(BANK0);/切換回 BANK0 寄存器區(qū)域 return 1; 正點(diǎn)原子AN1805手勢(shì)識(shí)別檢測(cè)進(jìn)行初始化,配置其該函數(shù)實(shí)現(xiàn)手勢(shì)識(shí)別功能,一開(kāi)始先對(duì) PAJ76

31、20U2gesture_arry 數(shù)組的參數(shù)值。這里說(shuō)一下,該數(shù)組有使能 9 個(gè)手勢(shì)識(shí)別的中斷標(biāo)志輸出的配置,初始化完畢后,在while 循環(huán)中一直讀取手勢(shì)中斷標(biāo)志寄存器,當(dāng)識(shí)別到相應(yīng)的手勢(shì), 13開(kāi)源電子網(wǎng)08/09/2018switch(gesture_data)case GES_UP:printf(Uprn);ledflash=1; break; /向上case GES_DOWM: printf(Dowmrn);ledflash=1;break; /向下case GES_LEFT:printf(Leftrn);ledflash=1;break; /向左cas

32、e GES_RIGHT:printf(Rightrn);ledflash=1; break; /向右case GES_FORWARD:printf(Forwardrn);ledflash=1;break; /向前caseGES_BACKWARD:printf(Backwardrn);ledflash=1;break; / 向 后case GES_CLOCKWISE:printf(Clockwisern);ledflash=1; break; /順時(shí)針case GES_COUNT_CLOCKWISE:printf(AntiClockwisern); ledflash=1; break; /逆時(shí)針

33、 case GES_WAVE:printf(Wavern);ledflash=1; break; /揮動(dòng)default:ledflash=0; break;if(ledflash)/DS1 閃爍 LED1=0;delay_ms(80);LED1=1;delay_ms(80); LED1=0;delay_ms(80);LED1=1;delay_ms(80); ledflash=0;delay_ms(50); i+;if(i=5)LED0=!LED0;/提示系統(tǒng)正在運(yùn)行i=0; 正點(diǎn)原子AN1805手勢(shì)標(biāo)志會(huì)置 1,讀取寄存器標(biāo)志會(huì)自動(dòng)清 0。根據(jù)手勢(shì)的標(biāo)志,手勢(shì)結(jié)

34、果打印到串口,DS1 燈會(huì)閃爍,DS0 燈閃爍表示檢測(cè)正在運(yùn)行。 (5)Ps_test()函數(shù),具體代碼如下: 14開(kāi)源電子網(wǎng)08/09/2018/接近檢測(cè)測(cè)試void Ps_test(void)u8 i=0; u8 t=0;u8 data2=0x00; u8 obj_brightness=0; u16 obj_size=0;paj7620u2_selectBank(BANK0);/進(jìn)入 BANK0 寄存器區(qū)域 for(i=0;iPROXIM_SIZE;i+)GS_Write_Byte(proximity_arryi0,proximity_arryi1);/接近檢

35、測(cè)模式初始化 paj7620u2_selectBank(BANK0);/返回 BANK0 寄存器區(qū)域 i=0;printf(rn 接近距離測(cè)試rn); while(1)obj_brightness = GS_Read_Byte(PAJ_GET_OBJECT_BRIGHTNESS);/讀取物體亮度data0 = GS_Read_Byte(PAJ_GET_OBJECT_SIZE_1);/讀取物體大小 data1 = GS_Read_Byte(PAJ_GET_OBJECT_SIZE_2); obj_size = (u16)data1 & 0x0f)8 | data0; delay_ms(10);t+

36、;if(t=10)/每 100MS 打印檢測(cè)數(shù)據(jù) t=0;printf(Brightness: %drn,obj_brightness); printf(Size: %drn,obj_size); i+;if(i=50)LED0=!LED0;/提示系統(tǒng)正在運(yùn)行i=0; 正點(diǎn)原子AN1805該函數(shù)實(shí)現(xiàn)接近檢測(cè),獲取接近物體的體積大小和亮度的數(shù)據(jù)。同樣開(kāi)始對(duì)接近檢測(cè)進(jìn)行初始化,配置其 proximity_arry 的數(shù)組,初始化完成后,在 while(1)循環(huán)中,讀取獲取體積大小和亮度的寄存器,讀到的數(shù)據(jù)打印到串口上,DS0 閃爍表示檢測(cè)正在運(yùn)行。 最后我們說(shuō)下 m

37、ain.c,代碼如下: 此部分代碼比較簡(jiǎn)單,對(duì)用到的外設(shè)進(jìn)行初始化,然后通過(guò)調(diào)用 paj7620u2_sensor_test() 函數(shù),進(jìn)入ATK-PAJ7620U2 模塊的主測(cè)試程序,對(duì)ATK-PAJ7620U2 的手勢(shì)識(shí)別和接近檢測(cè)功能進(jìn)行測(cè)試。 另外, 為了方便大家調(diào)試, 我們?cè)诒纠痰?USMART 添加了 GS_Write_Byte 和GS_Read_Byte 兩個(gè)函數(shù),這樣,我們就可以通過(guò)串口調(diào)試助手,改寫(xiě)和讀取 PAJ7620U2 的寄存器數(shù)據(jù)了,方便大家調(diào)試。 至此,軟件實(shí)現(xiàn)部分介紹完了,我們接下來(lái)看代碼驗(yàn)證。 4、驗(yàn)證首先,請(qǐng)先確保硬件都已經(jīng)連接好了: 1,ATK-PAJ7620U2 模塊與ALIENTEK NANO STM32 開(kāi)發(fā)板連接(連接方式見(jiàn) 2.3 小節(jié)) 2,Micro USB 線連接 ALIENTEK NANO STM32 開(kāi)發(fā)板 USB_JTAG 接口,對(duì)其供電并且串口通信。 3,串口調(diào)試軟件設(shè)置 115200 波特率(軟件建議使用XCOM)。 代碼編譯成功之后,我們將代碼下載到 STM32 開(kāi)發(fā)板上。打開(kāi)串口調(diào)試助手,設(shè)置好115200 波特率,串口打印如圖 4.1 所示: 15開(kāi)源電子網(wǎng)www.

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論