在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

機智云Gokit3.0源代碼分析之按鍵處理機制

9GxC_IoTMaker ? 來源:未知 ? 作者:李倩 ? 2018-07-13 14:57 ? 次閱讀

按鍵的實現邏輯(包括長按、短按、雙擊等),在交互之中的用戶體驗尤為重要,機智云GoKit_STM32按鍵的實現邏輯,在我見過的按鍵模塊中算不錯的一個了!

上期我們分享了機智云串口的環形buff,相信大家在看了思維導圖之后對整個協議的結構有了很好的理解,今天我們重點分析下機智云的按鍵處理機制。

在主程序main.c中,我們看到有2個定義

keyTypedef_tsingleKey[2];

keysTypedef_tkeys;

這個就是按鍵結構體的相關定義了,我們先來看下singleKey[2],這是一個數組,類型為keyTypedef_t,我們看看具體定義:

__packed typedefstruct

{

uint8_tkeyNum;

uint32_tkeyRccPeriph;

GPIO_TypeDef *keyPort;

uint32_tkeyGpio;

gokitKeyFunction shortPress;

gokitKeyFunction longPress;

}keyTypedef_t;

結構體包括第幾個按鍵、所屬按鍵時鐘、Port、Gpio、短按回調函數與長按回調函數,gokitKeyFunction是一個函數指針類型的定義,使用回調的好處就是一次性定義好,之后按下去所做的事情直接在回調函數中寫就可以了,結構比較明了。

接下來再看看keysTypedef_t的定義

__packed typedefstruct

{

uint8_tkeyNum;

keyTypedef_t*singleKey;

}keysTypedef_t;

這個比較簡單,定義了一個按鍵數量與 keyTypedef_t *類型的一個指針。然后我們看兩者怎么聯系的。

首先通過keyInitOne將按鍵0的相關信息定義到singleKey[0] 中,然后keys.keyNum++,之后將相關信息也定義到singleKey[1]中,之后將singleKey數組的指針賦值給 keys.singleKey ,之后通過keys就可以輕松調用2個按鍵的各項功能了。

在下面的keyParaInit中,實際初始化了按鍵IO的各項參數,最后有一個定時器的初始化函數。timer2Init();主要初始化了定時器2,從預分頻與自動重裝初值我們判斷出定時器1ms中斷一次,那么每1ms中斷一次做什么呢?我們追蹤到定時器2的中斷函數,

我們看到,中斷中只做了一件事,按鍵句柄,我們具體看

keyHandle((keysTypedef_t*)&keys),

首先是讀取按鍵值,這個比較重點,也是精髓,我們進去看看,里面會對keyCountTime進行累加10次,用來消抖,確定之后去得到按鍵真正的值

PRESS_KEY1與PRESS_KEY2定義如下

#define PRESS_KEY1 0x01

#define PRESS_KEY2 0x02

之后返回的readKey便是按鍵的值,函數返回值賦給keyPress,接下來便是一個狀態機。

具體的過程為:

開始keyState為0,第一個10ms進來,如果檢測到keyPress!=0,證明有按鍵按下,將keyState狀態更新為1,keyPrev = keyPress;并將keyPress賦值給上一次的按鍵值。下一個10ms的時候我們進去狀態1的地方執行,分為2步,

1、如果當前獲取到的狀態與上次一樣,認為按鍵確實按下了,將狀態更新為2,同時將哪個按鍵以及按鍵按下的值賦給keyReturn,通過這個就可以明確哪個按鍵按下了。

2、如果當前獲取到的狀態與上次不一樣,認為是按鍵抖動,不進行響應。

第三個10ms來之后,進去狀態2(假如不是抖動),也是分2步

1、如果按鍵不等于上次的狀態(按下),則認為按鍵松開,認為一次按下完成,狀態清零,返回按鍵值。

2、如果狀態與上次還是一樣,則認為一直在按著按鍵,就可以做長按功能了。返回按鍵值。

如果進去長按了,則將狀態更新為3。

第四個10ms到來之后,進去狀態3,用于判斷長按之后的松手狀態。就不多說了。

之后,通過keyReturn & KEY_UP判斷短按,keyReturn & KEY_LONG判斷長按,之后通過回掉函數進去相應的函數執行,這里的一個好處就是通過指針keys就可以調用所有的回調函數指針。

好,就先分析到這里,相信大家對按鍵部分的代碼都有一個比較詳細的了解了,但還是要一個一個分析,達到為我所用的地步,方可真正學會其中的精髓。覺得好的話可以下面點贊哦,你們的點贊是我最大的動力!

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 函數
    +關注

    關注

    3

    文章

    4332

    瀏覽量

    62677
  • 源代碼
    +關注

    關注

    96

    文章

    2945

    瀏覽量

    66767
  • 機智云
    +關注

    關注

    2

    文章

    590

    瀏覽量

    26420

原文標題:Gokit3.0 STM32源代碼分析之四

文章出處:【微信號:IoTMaker,微信公眾號:機智云開發者】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    GoKit試用體驗】+機智GoKit開發套件學習分享1開箱圖

    本帖最后由 孤雨冰狐 于 2015-6-9 10:34 編輯 機智GoKit開發套件學習分享1開箱圖今天我申請的機智
    發表于 06-08 17:13

    GoKit試用體驗】+機智GoKit開發套件學習分享2開發板初認識

    GoKit試用體驗】+機智GoKit開發套件學習分享2開發板初認識 好長時間沒有更新,被催了,實在很抱歉,不是因為不想發帖,只是我本人
    發表于 07-25 11:49

    【科技亦能傳承】轉贈 Gokit2.0,免費換加強版Gokit3.0

    閑置開發板已落滿灰塵?舍不得扔,又不適合送友人?為何不將它贈送給需要的人呢?只要你在此帖留言,并成功贈送出去,機智將免費贈送 10 塊首批限量加強版 Gokit3.0 開發板,包郵哦~活動時間
    發表于 06-21 15:25

    【萬元大獎】機智智能硬件創新大賽

    。//幸運觀眾獎的禮物設置:機智大禮包、Gokit3.0Gokit2.0 、T恤 、GoDay入場券、數據線(其他項目)2016.08.29~2016.08.30專家評審專家評審
    發表于 07-06 13:42

    Gokit 3試用體驗】(8)微信控制Gokit體驗機智寵物屋

    ,而實現微信控制Gokit的二維碼只有在紙字版的說明書上有,如下圖所示。于是悲劇了……  經過機智網官網論壇查詢資料、機智網QQ群咨詢問題,最后拿到了相應的控制二維碼,在Gokit S
    發表于 10-02 12:19

    重磅| Gokit1.0用戶真情回饋-Gokit3.0免費兌換

    表達機智由衷的謝意,特在金秋十月送上真誠回饋:Gokit1.0用戶憑Gokit1.0開發板,免費兌換Gokit3.0
    發表于 10-16 19:16

    如何使用機智開發一款智能硬件產品

    Gokit3】序列2:Gokit3介紹第3篇:【原創】【魅力Gokit3】序列3:wifi控制走起第4篇:【原創】【魅力
    發表于 12-26 15:56

    機智在Amazon Alexa平臺發布Smarthome和Custom Skill,實現亞馬遜Echo直接控制Gokit

    控制機智開源套件Gokit(包括Gokit2.0和Gokit3.0)!這也將意味著:隨著機智
    發表于 03-31 11:54

    機智2016~2017優秀項目盤點

    】之無線工業粉塵監測儀【Gokit 3】倉鼠管家和OpenHamtaro開源項目【Gokit智慧宿舍【Gokit 3】
    發表于 09-22 13:03

    Cortex-M3的異常處理機制分析

    Cortex-M3的異常處理機制分析  詳細闡述CortexM3異常的分類、優先級、進入和退出,以及在CortexM3異常處理機制中使用的新技術——遲到(late?arriving)和
    發表于 03-29 15:07 ?2018次閱讀
    Cortex-M3的異常<b class='flag-5'>處理機制</b><b class='flag-5'>分析</b>

    機智Gokit3.0源代碼分析協議結構體的定義

    這里主要定義了一些gizwits協議的下發報文標志、緩沖區、數據長度、sn、系統時間、上次上報數據的時間、重發機制定義、控制事件、WiFi狀態事件、上次上報的數據、云端下發的控制報文以及WiFi狀態信息這些數據的定義,這里我們重點關注幾個就行了。
    的頭像 發表于 07-13 14:53 ?4648次閱讀
    <b class='flag-5'>機智</b><b class='flag-5'>云</b><b class='flag-5'>Gokit3.0</b><b class='flag-5'>源代碼</b><b class='flag-5'>分析</b><b class='flag-5'>之</b>協議結構體的定義

    總結:ARM的異常處理機制分析資料下載

    電子發燒友網為你提供總結:ARM的異常處理機制分析資料下載的電子資料下載,更有其他相關的電路圖、源代碼、課件教程、中文資料、英文資料、參考設計、用戶指南、解決方案等資料,希望可以幫助到廣大的電子工程師們。
    發表于 04-15 08:45 ?7次下載
    總結:ARM的異常<b class='flag-5'>處理機制</b><b class='flag-5'>分析</b>資料下載

    基于機智Gokit3.0的智能加濕器APP控制系統

    本文選用機智Gokit3.0開發板作為核心處理器,進行整個系統的控制和工作,GoKit采用可擴展式的硬件設計方案。核心硬件是包括:功能擴展
    的頭像 發表于 03-30 19:50 ?751次閱讀

    基于機智Gokit3.0的智能加濕器APP控制系統

    本文選用機智Gokit3.0開發板作為核心處理器,進行整個系統的控制和工作,GoKit采用可擴展式的硬件設計方案。核心硬件是包括:功能擴展
    的頭像 發表于 04-07 16:07 ?886次閱讀
    基于<b class='flag-5'>機智</b><b class='flag-5'>云</b><b class='flag-5'>Gokit3.0</b>的智能加濕器APP控制系統

    如何處理機智移動應用的刪除問題

    如何處理機智移動應用的刪除問題在日常使用機智移動應用時,用戶可能會遇到無法自行刪除應用的問題。根據最新版本的設計,機智
    的頭像 發表于 10-23 08:04 ?194次閱讀
    如何<b class='flag-5'>處理機智</b><b class='flag-5'>云</b>移動應用的刪除問題
    主站蜘蛛池模板: 欧美亚洲网站| 天天操夜夜骑| 久久黄网站| 亚洲丁香| 国模于子涵啪啪大胆| 99热久| 亚洲欧美成人综合久久久| 午夜色片| 日本三级吹潮| 欧美18同性gay视频| 毛片毛片免费看| 国产视频三区| 亚洲 欧美 校园| 久久夜视频| 手机看片福利永久| 精品免费福利视频| 欧美精品高清在线xxxx| 久久久久女人精品毛片| 草草操| 亚洲免费视频播放| 欧美xxxxxxxxx| 日本一卡精品视频免费| 亚洲毛片大全| 欧美一级鲁丝片| 国产精品99r8免费视频2022| 综合激情在线| 精品午夜久久影视| 亚洲一区免费视频| 亚洲人成网站色7777| 人人做人人澡人人人爽| 国产亚洲美女| 午夜毛片视频| 婷婷四房播客五月天| 国产又爽又黄又粗又大| 可以在线看黄的网站| 狂野欧美性色xo影院| 怡红院黄色| 欧美18同性gay视频| 伊人福利网| 窝窝午夜在线观看免费观看| 高清视频一区二区|