非常簡單的一個庫, 也非常好玩 安裝: 一. 用法 首先引入頭文件 #include 'OneButton.h' 實例化一個OneButton對象 OneButton button(PIN_INPUT, true); 里面可以傳三個參數(shù): pin : 按鈕的pin角 activeLow : true:按下為低電平 false : 按下為高電平 pullupActive : 如果有上拉電阻就激活上拉電阻 愉快的使用 為對象綁定單擊/雙擊/長按事件的回調(diào), 單擊/雙擊/長按等操作會觸發(fā)這些回調(diào) 二. 相關(guān)API 1. 關(guān)聯(lián)單擊事件 button.attachClick void OneButton::attachClick(callbackFunction newFunction) 2. 關(guān)聯(lián)雙擊事件 button.attachDoubleClick void OneButton::attachDoubleClick(callbackFunction newFunction) 3. 關(guān)聯(lián)長按開始事件 button.attachLongPressStart void OneButton::attachLongPressStart(callbackFunction newFunction) 4. 關(guān)聯(lián)長按結(jié)束事件 button.attachLongPressStop void OneButton::attachLongPressStop(callbackFunction newFunction) 5. 關(guān)聯(lián)長按期間事件 button.attachDuringLongPress void OneButton::attachDuringLongPress(callbackFunction newFunction) 6. 注意按鍵就觸發(fā),不管單擊雙擊還上長按 button.attachPressStart 而且是按下持續(xù)觸發(fā) void OneButton::attachPressStart(callbackFunction newFunction) 7. 獲取按鍵時長 button.getPressedTicks int OneButton::getPressedTicks() 8. 獲取按鍵現(xiàn)在是否被長按 button.isLongPressed bool OneButton::isLongPressed() 9. 清空按鈕狀態(tài)機 button.reset void OneButton::reset() 10. 設(shè)置單擊時長 button.setClickTicks 單位毫秒 void OneButton::setClickTicks(int ticks) 11. 設(shè)置消抖時長 button.setDebounceTicks 單位毫秒 void OneButton::setDebounceTicks(int ticks) 12. 設(shè)置長按最短時長 button.setPressTicks 如果不夠時長,會被認(rèn)為是單擊 void OneButton::setPressTicks(int ticks) 13. 按鍵掃描 void OneButton::tick() 三. 測試觸發(fā)程序 由于我的板子按鍵接了0腳, 當(dāng)下載程序時, 會把0腳拉低, 所以每次下完程序, 這個測試程序一直在觸發(fā)長按, 其實是硬件0腳下程序時拉低引起的. 接別的腳沒這個問題, 如果遇到這個問題, 下載完程序后把單片機斷電再通電就可以了 #include Serial.println('doubleclick');}void click(){ Serial.println('click');}void longPressStart(){ Serial.println('longPressStart');}void duringLongPress(){ if (button.isLongPressed()) { Serial.print('duringLongPress:'); Serial.println(button.getPressedTicks()); delay(50); }}void longPressStop(){ Serial.println('longPressStop');}void attachPressStart(){ Serial.println('attachPressStart'); Serial.println(digitalRead(PIN_INPUT));}void setup(){ Serial.begin(115200); button.reset();//清除一下按鈕狀態(tài)機的狀態(tài) button.attachClick(click); button.attachDoubleClick(doubleclick); button.attachLongPressStart(longPressStart); button.attachDuringLongPress(duringLongPress); button.attachLongPressStop(longPressStop); button.attachPressStart(attachPressStart);//按下鍵就會持續(xù)觸發(fā)}void loop(){ button.tick(); delay(10);} 四. 案例 單擊快閃一下 雙擊慢閃兩下 長按開關(guān)燈 #include for (size_t i = 0; i < 4; i++) { digitalWrite(PIN_LED, !digitalRead(PIN_LED)); delay(300); }}void click(){ Serial.println('click'); for (size_t i = 0; i < 2; i++) { digitalWrite(PIN_LED, !digitalRead(PIN_LED)); delay(100); }}void longclick(){ Serial.println('longclick'); digitalWrite(PIN_LED, !digitalRead(PIN_LED)); if (digitalRead(PIN_LED)) Serial.println('start'); else Serial.println('end');}void setup(){ Serial.begin(115200); pinMode(PIN_LED, OUTPUT); button.attachClick(click); button.attachDoubleClick(doubleclick); button.attachLongPressStart(longclick);}void loop(){ button.tick(); delay(10);}
上一篇:玩轉(zhuǎn) ESP32 + Arduino(二十七) ESP對象
下一篇:玩轉(zhuǎn) ESP32 + Arduino (二十五) SSD1306庫驅(qū)動OLED
推薦閱讀最新更新時間:2025-07-01 21:14


設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦
- Microchip 升級數(shù)字信號控制器(DSC)產(chǎn)品線 推出PWM 分辨率和 ADC 速度業(yè)界領(lǐng)先的新器件
- 意法半導(dǎo)體STM32MP23x:突破成本限制的工業(yè)AI應(yīng)用核心
- 意法半導(dǎo)體推出用于匹配遠距離無線微控制器STM32WL33的集成的匹配濾波芯片
- ESP32開發(fā)板連接TFT顯示屏ST7789跳坑記
- 如何讓ESP32支持analogWrite函數(shù)
- LGVL配合FreeType為可變字體設(shè)置字重-ESP32篇
- 使用樹莓派進行 ESP32 Jtag 調(diào)試
- ESP32怎么在SPIFFS里面存儲html,css,js文件,以及網(wǎng)頁和arduino的通訊
- ESP32 freeRTOS使用測試
- MAXREFDES128#:無光耦隔離,PoE,48V至5V,12.5W反激電源
- NCP10970AGEVB:用于高壓輸入評估板的雙輸出 PSU
- L78L05AC可調(diào)輸出穩(wěn)壓器的典型應(yīng)用
- LT1074,抽頭電感降壓轉(zhuǎn)換器
- XRP6670、3A、2.5MHz同步降壓穩(wěn)壓器典型應(yīng)用電路
- 帶物體檢測功能的自動門鈴
- LTC1539CGW 高效低噪聲 5V/20mA 待機、5V/3A、3.3V/3.5A 和 12V/200mA 降壓轉(zhuǎn)換器的典型應(yīng)用電路
- LT1634ACS8-1.25 超準(zhǔn)確 ±4.096V 輸出電壓基準(zhǔn)的典型應(yīng)用
- LTM8049IY 并聯(lián) 8V 輸出 SEPIC 或用于增加電流的反相轉(zhuǎn)換器的典型應(yīng)用電路
- 采用 LTC1929-PG 大電流兩相降壓轉(zhuǎn)換器的典型應(yīng)用電路
- s3c2440學(xué)習(xí)之路-008 uart實現(xiàn)printf函數(shù)
- TI推出全新3D霍爾效應(yīng)位置傳感器,實現(xiàn)更快的實時控制
- 榮耀Magic V碾壓所有折疊屏手機
- 廣和通與其全資子公司又獲6項專利證書
- 一“芯”難求或?qū)⒀永m(xù)至2022年
- STM32嵌入式FLASH擦除與寫入
- 手把手教學(xué)51單片機 | 第五課 獨立鍵盤 矩陣鍵盤
- 汽車發(fā)動機冷卻風(fēng)扇信號汽修示波器測量
- 負離子測試儀的應(yīng)用/原理/特點/參數(shù)
- 英飛凌主導(dǎo)并協(xié)調(diào)大型研究項目,為高度自動化聯(lián)網(wǎng)汽車開發(fā)超級計算機
- "智能汽車芯片大戰(zhàn)升級:高通最新方案為何獲中國車企追捧?
- 電壓精度0.5% @25°C!思瑞浦發(fā)布全新車規(guī)并聯(lián)基準(zhǔn)芯片TPR43xQ系列產(chǎn)品
- AI技術(shù)在方便面生產(chǎn)質(zhì)量監(jiān)控中的應(yīng)用
- 潤石科技推出RS3215-Q1系列低壓差線性穩(wěn)壓器
- CANape 23開啟智能測試新時代(下)
- 軟件定義汽車電源管理設(shè)計:NXP的PMIC選型攻略解析
- 深度測評時空壺X1同聲傳譯器:全球最先進AI同傳設(shè)備的非凡實力
- 作為領(lǐng)先的垂直整合制造商(IDM),英飛凌在 300mm氮化鎵生產(chǎn)路線圖方面取得突破
- 鐵威馬F6-424 Max:六盤位擴容+國產(chǎn)系統(tǒng)兼容,小白也能玩轉(zhuǎn)NAS
- 開關(guān)電源給鉛酸電池恒流恒壓充電的電流跳動問題解析
- 國際Tier1“獨占市場”背后,本土毫米波雷達廠商的危與機
- 華為“5G+C-V2X”車聯(lián)網(wǎng)解決方案應(yīng)運而生,NB-IoT發(fā)展也已駛?cè)肟燔嚨?/a>
- 電動汽車V2G模式 | 路漫漫
- 自動駕駛專利申請量企業(yè)排名TOP50
- STM8 16位通用定時器(TIM2,TIM3,TIM5)
- 三星Fold 2最新渲染圖解密:神似iPhone 7 Plus
- 雙蹤示波器的使用方法及步驟分析(基本結(jié)構(gòu),工作原理及優(yōu)
- 豪威發(fā)布了1/1.3英寸手機CMOS:4800萬像素,芯片級HDR
- 示波器電平旋鈕的作用介紹
- 蘋果攜HomeKit重返CES 不談硬件背后暗藏著野心