0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

關(guān)于按鍵的開源軟件模塊MultiButton

strongerHuang ? 來(lái)源:芯片之家 ? 作者:曉宇 ? 2021-11-17 15:25 ? 次閱讀

按鍵在我們生活中無(wú)處不在,買一塊開發(fā)板,按鍵是必備的一個(gè)功能。 肯定有人會(huì)說(shuō):按鍵就一個(gè)檢測(cè)IO狀態(tài),有什么難度? 你單純的檢測(cè)一個(gè)按鍵,確實(shí)難度很低。但如果檢測(cè)單擊、雙擊、三擊,長(zhǎng)按、短按等操作呢?如果再將其嵌入到復(fù)雜的項(xiàng)目中呢? 有些功能看似很簡(jiǎn)單,實(shí)際項(xiàng)目中其實(shí)不簡(jiǎn)單。就好比“LED亮燈,如果能將“LED點(diǎn)燈運(yùn)用在各種不同的項(xiàng)目中,你就能超越很多人了。 今天就來(lái)分享一個(gè)關(guān)于按鍵的開源軟件模塊:MultiButton(事件驅(qū)動(dòng)型按鍵驅(qū)動(dòng)模塊)

簡(jiǎn)介

MultiButton 是一個(gè)小巧簡(jiǎn)單易用的事件驅(qū)動(dòng)型按鍵驅(qū)動(dòng)模塊,可無(wú)限量擴(kuò)展按鍵,按鍵事件的回調(diào)異步處理方式可以簡(jiǎn)化你的程序結(jié)構(gòu),去除冗余的按鍵處理硬編碼,讓你的按鍵業(yè)務(wù)邏輯更清晰。

開源地址:

https://github.com/0x1abin/MultiButton

1.特性

MultiButton 使用C語(yǔ)言實(shí)現(xiàn),基于面向?qū)ο蠓绞皆O(shè)計(jì)思路,每個(gè)按鍵對(duì)象單獨(dú)用一份數(shù)據(jù)結(jié)構(gòu)管理:

struct Button {  uint16_t ticks;  uint8_t  repeat: 4;  uint8_t  event : 4;  uint8_t  state : 3;  uint8_t  debounce_cnt : 3;  uint8_t  active_level : 1;  uint8_t  button_level : 1;  uint8_t  (*hal_button_Level)(void);  BtnCallback  cb[number_of_event];  struct Button* next;};

這樣每個(gè)按鍵使用單向鏈表相連,依次進(jìn)入 button_handler(struct Button* handle) 狀態(tài)機(jī)處理,所以每個(gè)按鍵的狀態(tài)彼此獨(dú)立。

2.按鍵事件

事件 說(shuō)明
PRESS_DOWN 按鍵按下,每次按下都觸發(fā)
PRESS_UP 按鍵彈起,每次松開都觸發(fā)
PRESS_REPEAT 重復(fù)按下觸發(fā),變量repeat計(jì)數(shù)連擊次數(shù)
SINGLE_CLICK 單擊按鍵事件
DOUBLE_CLICK 雙擊按鍵事件
LONG_PRESS_START 達(dá)到長(zhǎng)按時(shí)間閾值時(shí)觸發(fā)一次
LONG_PRESS_HOLD 長(zhǎng)按期間一直觸發(fā)

使用方法

1.先申請(qǐng)一個(gè)按鍵結(jié)構(gòu)
struct Button button1;
2.初始化按鍵對(duì)象,綁定按鍵的GPIO電平讀取接口read_button_pin() ,后一個(gè)參數(shù)設(shè)置有效觸發(fā)電平。
button_init(&button1, read_button_pin, 0);
3.注冊(cè)按鍵事件
button_attach(&button1, SINGLE_CLICK, Callback_SINGLE_CLICK_Handler);button_attach(&button1, DOUBLE_CLICK, Callback_DOUBLE_Click_Handler);...
4.啟動(dòng)按鍵
button_start(&button1);
5.設(shè)置一個(gè)5ms間隔的定時(shí)器循環(huán)調(diào)用后臺(tái)處理函數(shù)
while(1) {    ...    if(timer_ticks == 5) {        timer_ticks = 0;
        button_ticks();    }}

實(shí)例

參考實(shí)例
#include "button.h"
struct Button btn1;
uint8_t read_button1_GPIO(){  return HAL_GPIO_ReadPin(B1_GPIO_Port, B1_Pin);}void BTN1_PRESS_DOWN_Handler(void* btn){  //do something...}
void BTN1_PRESS_UP_Handler(void* btn){  //do something...}
int main(){   button_init(&btn1, read_button1_GPIO, 0);   button_attach(&btn1, PRESS_DOWN, BTN1_PRESS_DOWN_Handler);   button_attach(&btn1, PRESS_UP, BTN1_PRESS_UP_Handler);   button_attach(&btn1, PRESS_REPEAT, BTN1_PRESS_REPEAT_Handler);   button_attach(&btn1, SINGLE_CLICK, BTN1_SINGLE_Click_Handler);   button_attach(&btn1, DOUBLE_CLICK, BTN1_DOUBLE_Click_Handler);   button_attach(&btn1, LONG_PRESS_START, BTN1_LONG_PRESS_START_Handler);   button_attach(&btn2, LONG_PRESS_HOLD, BTN1_LONG_PRESS_HOLD_Handler);   button_start(&btn1);
  //make the timer invoking the button_ticks() interval 5ms.  //This function is implemented by yourself.  __timer_start(button_ticks, 0, 5);
  while(1)  {  }}

責(zé)任編輯:haq
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 模塊
    +關(guān)注

    關(guān)注

    7

    文章

    2628

    瀏覽量

    47216
  • 驅(qū)動(dòng)
    +關(guān)注

    關(guān)注

    12

    文章

    1813

    瀏覽量

    85050

原文標(biāo)題:開源模塊 | 事件驅(qū)動(dòng)型按鍵驅(qū)動(dòng)模塊:MultiButton

文章出處:【微信號(hào):strongerHuang,微信公眾號(hào):strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    迅龍軟件出席2024開放原子開源生態(tài)大會(huì),共謀開源生態(tài)繁榮之路

    產(chǎn)業(yè)發(fā)展脈搏。作為全球領(lǐng)先的開源硬件和開源軟件品牌商,迅龍軟件受邀參加此屆大會(huì),并攜旗下高算力人工智能系列產(chǎn)品OrangePiAIStudio、OrangePiAI
    的頭像 發(fā)表于 09-26 13:51 ?340次閱讀
    迅龍<b class='flag-5'>軟件</b>出席2024開放原子<b class='flag-5'>開源</b>生態(tài)大會(huì),共謀<b class='flag-5'>開源</b>生態(tài)繁榮之路

    開啟開源布道新篇章 — LF開源軟件學(xué)園誠(chéng)邀開源精英加入成為OSPO講師

    OSPO——企業(yè)開源戰(zhàn)略的引擎在當(dāng)今數(shù)字化時(shí)代,開源軟件已成為推動(dòng)全球技術(shù)創(chuàng)新的加速器。它不僅重塑了軟件開發(fā)的模式,更成為企業(yè)構(gòu)建競(jìng)爭(zhēng)優(yōu)勢(shì)的關(guān)鍵。然而,隨著
    的頭像 發(fā)表于 07-04 08:36 ?240次閱讀
    開啟<b class='flag-5'>開源</b>布道新篇章 — LF<b class='flag-5'>開源</b><b class='flag-5'>軟件</b>學(xué)園誠(chéng)邀<b class='flag-5'>開源</b>精英加入成為OSPO講師

    嵌入式學(xué)習(xí)-飛凌嵌入式ElfBoard-項(xiàng)目分享|基于ELF 1S開發(fā)板完成的物聯(lián)網(wǎng)開源項(xiàng)目

    是一款精美小巧的Modbus-RTU從機(jī)調(diào)試軟件,使用它可以虛擬出任何支持Modbus協(xié)議的從機(jī)設(shè)備,具體軟件界面如下圖所示: 關(guān)于無(wú)線網(wǎng)絡(luò)模塊,它支持繼電器開關(guān)、RGB三色燈、
    發(fā)表于 05-16 09:19

    飛凌嵌入式-ElfBoard-項(xiàng)目分享|基于ELF 1S開發(fā)板完成的物聯(lián)網(wǎng)開源項(xiàng)目

    是一款精美小巧的Modbus-RTU從機(jī)調(diào)試軟件,使用它可以虛擬出任何支持Modbus協(xié)議的從機(jī)設(shè)備,具體軟件界面如下圖所示: 關(guān)于無(wú)線網(wǎng)絡(luò)模塊,它支持繼電器開關(guān)、RGB三色燈、
    發(fā)表于 05-16 09:12

    迅龍軟件加入開放原子開源基金會(huì)和OpenHarmony?項(xiàng)目,共建開源新生態(tài)

    近日,迅龍軟件與“開放原子開源基金會(huì)”簽署協(xié)議,加入“開放原子開源基金會(huì)”(以下簡(jiǎn)稱“開源基金會(huì)”),成為開源基金會(huì)白銀捐贈(zèng)人,這標(biāo)志著迅龍
    的頭像 發(fā)表于 04-30 17:50 ?960次閱讀
    迅龍<b class='flag-5'>軟件</b>加入開放原子<b class='flag-5'>開源</b>基金會(huì)和OpenHarmony?項(xiàng)目,共建<b class='flag-5'>開源</b>新生態(tài)

    【外設(shè)移植】雙軸按鍵搖桿模塊Ai-M61開發(fā)板

    雙軸按鍵搖桿模塊采用金屬按鍵搖桿電位器,模塊包含兩路模擬輸出和一路數(shù)字輸出接口。
    的頭像 發(fā)表于 03-12 15:24 ?870次閱讀
    【外設(shè)移植】雙軸<b class='flag-5'>按鍵</b>搖桿<b class='flag-5'>模塊</b>Ai-M61開發(fā)板

    開源軟件生態(tài)發(fā)展座談會(huì)順利舉辦

    1月22日,以開源鴻蒙為主題的開源軟件生態(tài)發(fā)展座談交流會(huì)在拓維信息&開鴻智谷成功舉辦。湖南省工信廳信息化和軟件服務(wù)業(yè)處處長(zhǎng)周平、信息動(dòng)員處處長(zhǎng)劉平、信息化和
    的頭像 發(fā)表于 01-26 08:30 ?971次閱讀
    <b class='flag-5'>開源</b><b class='flag-5'>軟件</b>生態(tài)發(fā)展座談會(huì)順利舉辦

    關(guān)于FPGA的開源項(xiàng)目介紹

    Hello,大家好,之前給大家分享了大約一百多個(gè)關(guān)于FPGA的開源項(xiàng)目,涉及PCIe、網(wǎng)絡(luò)、RISC-V、視頻編碼等等,這次給大家?guī)?lái)的是不枯燥的娛樂(lè)項(xiàng)目,主要偏向老的游戲內(nèi)核使用FPGA進(jìn)行硬解,涉及的內(nèi)核數(shù)不勝數(shù),主要目標(biāo)是高的可實(shí)現(xiàn)性及復(fù)現(xiàn)性。
    的頭像 發(fā)表于 01-10 10:54 ?1273次閱讀
    <b class='flag-5'>關(guān)于</b>FPGA的<b class='flag-5'>開源</b>項(xiàng)目介紹

    開源發(fā)展與開發(fā)者專題 | 潤(rùn)和軟件副總裁劉洋:擁抱開源時(shí)代,潤(rùn)和軟件開源實(shí)踐

    編者按 開源孕育于軟件,發(fā)展于數(shù)字經(jīng)濟(jì),是開放、協(xié)同、共享的新型生產(chǎn)方式,對(duì)于新時(shí)期推動(dòng)經(jīng)濟(jì)發(fā)展、科技創(chuàng)新、文化繁榮、社會(huì)治理、開放合作、共同富裕具有重要意義。長(zhǎng)期以來(lái),中國(guó)始終秉持開放、融通、互利
    的頭像 發(fā)表于 12-28 15:55 ?428次閱讀
    <b class='flag-5'>開源</b>發(fā)展與開發(fā)者專題 | 潤(rùn)和<b class='flag-5'>軟件</b>副總裁劉洋:擁抱<b class='flag-5'>開源</b>時(shí)代,潤(rùn)和<b class='flag-5'>軟件</b><b class='flag-5'>開源</b>實(shí)踐

    軟件定義世界 開源共筑未來(lái) 首屆“開放原子開源大賽”火熱進(jìn)行中

    近日,2023 首屆開放原子開源大賽正在火熱進(jìn)行中。本次大賽以“軟件定義世界,開源共筑未來(lái)”為主題,旨在聯(lián) 合開源組織、企事業(yè)單位、高等院校、科研院所、行業(yè)組織、投融資機(jī)構(gòu)等多方資源,
    的頭像 發(fā)表于 12-21 14:40 ?309次閱讀
    <b class='flag-5'>軟件</b>定義世界 <b class='flag-5'>開源</b>共筑未來(lái) 首屆“開放原子<b class='flag-5'>開源</b>大賽”火熱進(jìn)行中

    軟件定義世界 開源共筑未來(lái)|首屆“開放原子開源大賽”火熱進(jìn)行中

    近日,2023首屆開放原子開源大賽正在火熱進(jìn)行中。大賽由開放原子開源基金會(huì)、央視網(wǎng)、江蘇省工業(yè)和信息化廳、無(wú)錫市人民政府、江蘇軟件產(chǎn)業(yè)人才發(fā)展基金會(huì)、蘇州工業(yè)園區(qū)、無(wú)錫高新區(qū)等承辦。 本次大賽以
    的頭像 發(fā)表于 12-15 16:15 ?365次閱讀

    單片機(jī)按鍵切換模式怎么設(shè)置

    單片機(jī):選擇一款合適的單片機(jī)型號(hào),例如常見(jiàn)的8051、STM32等。 按鍵模塊:用于實(shí)現(xiàn)按鍵輸入,通常由一個(gè)或多個(gè)按鍵組成。 電路板:將單片機(jī)、
    的頭像 發(fā)表于 12-13 11:07 ?3450次閱讀

    解鎖未來(lái)軟件安全的利器——華為云 CodeArts 開源治理服務(wù)

    在當(dāng)今數(shù)字化時(shí)代,軟件安全問(wèn)題愈發(fā)突顯,而開源軟件的廣泛應(yīng)用更是為安全挑戰(zhàn)蒙上了一層陰影。開源軟件漏洞的逐年增多成為
    的頭像 發(fā)表于 12-10 21:01 ?866次閱讀
    解鎖未來(lái)<b class='flag-5'>軟件</b>安全的利器——華為云 CodeArts <b class='flag-5'>開源</b>治理服務(wù)

    華為云 CodeArts?開源治理服務(wù),解鎖軟件安全新標(biāo)準(zhǔn)

    在數(shù)字化時(shí)代,軟件的安全性日益受到關(guān)注,而開源軟件的快速發(fā)展也帶來(lái)了新的挑戰(zhàn)。再次背景下,華為云開源治理服務(wù)華為云開源治理服務(wù) CodeAr
    的頭像 發(fā)表于 12-10 21:00 ?909次閱讀
    華為云 CodeArts?<b class='flag-5'>開源</b>治理服務(wù),解鎖<b class='flag-5'>軟件</b>安全新標(biāo)準(zhǔn)

    開源產(chǎn)業(yè)大會(huì)-汽車軟件開源創(chuàng)新分論壇】邀您一起了解RT-Thread程翧車載融合軟件平臺(tái)

    錯(cuò)過(guò)的一場(chǎng)科技盛宴。 大會(huì)與OpenSDV汽車軟件開源聯(lián)盟、中國(guó)汽車工業(yè)協(xié)會(huì)軟件分會(huì)聯(lián)袂呈現(xiàn)汽車軟件開源創(chuàng)新分論壇,邀請(qǐng)車企管理層、
    的頭像 發(fā)表于 12-07 10:35 ?513次閱讀
    【<b class='flag-5'>開源</b>產(chǎn)業(yè)大會(huì)-汽車<b class='flag-5'>軟件</b><b class='flag-5'>開源</b>創(chuàng)新分論壇】邀您一起了解RT-Thread程翧車載融合<b class='flag-5'>軟件</b>平臺(tái)