哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

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

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

3天內不再提示

【HarmonyOS HiSpark Wi-Fi IoT 套件試用連載】基于鴻蒙操作系統(tǒng)的單個按鍵長按、短按的實現(xiàn)

開發(fā)板試用精選 ? 來源:開發(fā)板試用 ? 作者:電子發(fā)燒友論壇 ? 2022-11-04 16:33 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本文來源電子發(fā)燒友社區(qū),作者:juby, 帖子地址:https://bbs.elecfans.com/jishu_2010914_1_1.html


長按、短按的應用
我們之前在下面網(wǎng)文中介紹過了ESP8266模塊的配網(wǎng):
Windows下AliOS Things環(huán)境搭建及ESP8266 固件下載
固件使用AliOS Things固件的ESP8266模塊進行配網(wǎng)的時候,文中是這么操作的:
使用一個跳線,先把D5(GPIO14)接GND,再接3.3V,出現(xiàn)如下Log即進入配網(wǎng)模式:
這個過程其實就是模擬了一個按鍵長按過程。
長按、短按的原理
我們學習嵌入式要學習其原理,原理學會了,其他平臺下相同功能的實現(xiàn)也就會了。
通過閱讀AliOS Things 3.0的源碼,其中按鍵狀態(tài)判斷的過程如下:
源文件: platform/mcu/esp8266/bsp/key.c

上述過程簡單描述過程如下:
  • 按鍵對應的GPIO中斷函數(shù)中,開啟定時器;
  • 定時器響應函數(shù)中,循環(huán)判斷此GPIO的狀態(tài)。當按鍵仍為按下狀態(tài)時,定時計數(shù)+1;如果按鍵變?yōu)榱酸尫艩顟B(tài),則停止定時器,計算按鍵被按下狀態(tài)總的持續(xù)時間;
  • 根據(jù)時間長短進而判斷出此次按鍵為長按還是短按,進而可以實現(xiàn)一個按鍵對應多個不同功能。
這種驅動方式跟下面按鍵驅動方式有明顯的優(yōu)勢:
基于鴻蒙OS的按鍵驅動
此方法優(yōu)點:天然去抖動,不用延時等待按鍵狀態(tài)改變,程序運行效率大大提高。
鴻蒙系統(tǒng)實現(xiàn)單個按鍵的長按和短按
參考上面原理,我們實現(xiàn)一個鴻蒙系統(tǒng)下的按鍵長按和短按判斷。
初始化GPIO中斷
在入口函數(shù)SYS_RUN(KeyExampleEntry);中,將GPIO_5設置為下降沿觸發(fā)中斷:
hi_u32 ret = 0;
GpioInit();
IoSetFunc(WIFI_IOT_IO_NAME_GPIO_5, WIFI_IOT_IO_FUNC_GPIO_5_GPIO);
GpioSetDir(WIFI_IOT_GPIO_IDX_5, WIFI_IOT_GPIO_DIR_IN);
//IoSetPull(WIFI_IOT_IO_NAME_GPIO_5,WIFI_IOT_IO_PULL_UP);

if (ret != WIFI_IOT_SUCCESS) {
printf("===== ERROR ======gpio -> GpioSetDir ret:%drn", ret);
return;
}

ret = GpioRegisterIsrFunc(WIFI_IOT_GPIO_IDX_5,WIFI_IOT_INT_TYPE_EDGE,WIFI_IOT_GPIO_EDGE_FALL_LEVEL_LOW, gpio5_isr_func, NULL);

if (ret != WIFI_IOT_SUCCESS) {
printf("===== ERROR ======gpio -> hi_gpio_register_isr_function ret:%drn", ret);
}
初始化定時器
在入口函數(shù)SYS_RUN(KeyExampleEntry);中創(chuàng)建定時器:
ret = hi_timer_create(&g_timer_handle);
if (ret != HI_ERR_SUCCESS)
{
printf("timer create failrn");
}

printf("timer create successrn");
在GPIO_5的中斷處理函數(shù)中,使用hi_timer_start()函數(shù)開啟定時器。
/* gpio callback func */
void gpio5_isr_func(char *arg)
{
(void)arg;
//臨時取消GPIO_5的中斷響應
GpioUnregisterIsrFunc(WIFI_IOT_GPIO_IDX_5);

printf("----- gpio05 isr success -----rn");

hi_u32 ret = 0;
//啟動定時器
ret = hi_timer_start(g_timer_handle, HI_TIMER_TYPE_PERIOD, 10, app_demo_timer_handle, 0);

if (ret != HI_ERR_SUCCESS)
{
printf("timer start failrn");
}

printf("timer start successrn");
}
定時器開始函數(shù)定義如下:
* timer_handle,定時器句柄。
* type,定時器類型。
* expire,定時器超時時間(單位:ms)。配置為0時,默認為10ms。
* timer_func,定時器回調函數(shù)。
* data,回調函數(shù)傳參。
*
* 返回值0,代表操作成功,
* 其他代表失敗, 具體定義詳見: hi_errno.h。
*
* 依賴:hi_timer.h:文件用于描述定時器相關接口。
* 定時器停止使用 hi_timer_stop() 函數(shù)。
*/
hi_u32 hi_timer_start(hi_u32 timer_handle, hi_timer_type type, hi_u32 expire,
hi_timer_callback_f timer_func, hi_u32 data);
定時器回調函數(shù)
在定時器回調函數(shù)中,循環(huán)判斷GPIO_5的狀態(tài),只要按鍵沒有釋放,就講計數(shù)器自加,每增加1,代表10ms,當按鍵釋放之后,停止計時,最終根據(jù)定時器長度來判斷此次按鍵的長短。
static hi_void app_demo_timer_handle(hi_u32 data)
{
hi_unref_param(data);

hi_u32 ret = 0;
//定時器計數(shù)+1
nCurrentTimerCount++;
//每一秒打印一次日志,方便調試
if((nCurrentTimerCount % 100) == 0)
printf("count = %d rn",nCurrentTimerCount);

WifiIotGpioValue wigv;

//獲取GPIO_5的狀態(tài)
GpioGetInputVal(WIFI_IOT_IO_NAME_GPIO_5,&wigv);

if (wigv == WIFI_IOT_GPIO_VALUE0)
{
//按鍵尚未釋放
}
else
{
//停止定時器
ret = hi_timer_stop(g_timer_handle);

if (ret != HI_ERR_SUCCESS)
{
printf("timer stop failrn");
}
else
{
printf("app demo timer stop , count = %d rn",nCurrentTimerCount);
//根據(jù)按鍵持續(xù)時間判斷此次按鍵操作為長按還是短按
if (nCurrentTimerCount > 600)
{
nCurrentTimerCount = 0;
printf("long long press key rn");
}
else if (nCurrentTimerCount > 200)
{
nCurrentTimerCount = 0;
printf("long press key rn");
}
else if (nCurrentTimerCount > 4)
{
nCurrentTimerCount = 0;
printf("short press key rn");
}
}
//恢復GPIO_5的中斷響應
ret = GpioRegisterIsrFunc(WIFI_IOT_GPIO_IDX_5,WIFI_IOT_INT_TYPE_EDGE,WIFI_IOT_GPIO_EDGE_FALL_LEVEL_LOW, gpio5_isr_func, NULL);
}
}
結果展示



資料獲取
公眾號留言區(qū)置頂留言獲取本文對應示例源碼。
ps: 文章首發(fā)于電子發(fā)燒友。
歡迎關注
程序員小哈帶你玩轉嵌入式,微信搜索:嵌入式從0到1,更多干貨等著你。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • wi-fi
    +關注

    關注

    15

    文章

    2464

    瀏覽量

    130037
  • HarmonyOS
    +關注

    關注

    80

    文章

    2157

    瀏覽量

    36294
  • HiSpark
    +關注

    關注

    1

    文章

    156

    瀏覽量

    7799
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    技術資訊 I Wi-Fi 模塊設計

    本文要點Wi-Fi模塊設計旨在打造一套緊湊且高效的硬件和軟件解決方案,使設備能夠通過Wi-Fi網(wǎng)絡實現(xiàn)通信。Wi-Fi模塊設計是一個復雜的過程,要求研發(fā)人員兼具硬件與軟件工程方面的專業(yè)
    的頭像 發(fā)表于 02-27 17:12 ?878次閱讀
    技術資訊 I <b class='flag-5'>Wi-Fi</b> 模塊設計

    ESP32 Wi-Fi 控制 LED 燈的原理

    在智能家居、物聯(lián)網(wǎng)設備中,用手機通過Wi-Fi控制燈光、風扇或插座,已經(jīng)非常普遍。而在嵌入式開發(fā)中,ESP32是最常用的Wi-Fi模塊之一。本文將帶你系統(tǒng)理解:ESP32是如何通過Wi-Fi
    的頭像 發(fā)表于 01-09 19:04 ?584次閱讀
    ESP32 <b class='flag-5'>Wi-Fi</b> 控制 LED 燈的原理

    Wi-Fi:無線連接的全球通用語

    一、什么是Wi-Fi?Wi-FiWi-Fi聯(lián)盟制造商的商標認證,是基于IEEE 802.11標準的無線局域網(wǎng)技術。它允許電子設備在特定范圍內無線接入網(wǎng)絡,實現(xiàn)高速數(shù)據(jù)交換與互聯(lián)網(wǎng)訪問
    發(fā)表于 01-07 09:49

    Nordic發(fā)布nRF7002 EBII 開發(fā)板, 支持Wi-Fi 6, 解鎖nRF54L新玩法

    和 5 GHz)以及高級 Wi-Fi 6 功能,例如目標喚醒時間 (TWT)、OFDMA 和 BSS 著色,從而實現(xiàn)高效、無干擾的電池供電運行。它采用雙頻芯片天線,確保在各個 Wi-Fi 頻段上都能提供
    發(fā)表于 12-10 11:58

    Wi-Fi模塊選型指南 | 低功耗藍牙/Wi-Fi 6模塊推薦 | 物聯(lián)網(wǎng)設備集成攻略

    物聯(lián)網(wǎng)的快速發(fā)展,Wi-Fi技術的成熟的情況下,越來越多的場景需要用到Wi-Fi來無線傳輸數(shù)據(jù),尤其是移動設備中,怎么再設備中選擇合適的Wi-Fi模塊呢?下面我們來介紹下Wi-Fi模塊
    的頭像 發(fā)表于 12-09 11:27 ?1332次閱讀
    <b class='flag-5'>Wi-Fi</b>模塊選型指南 | 低功耗藍牙/<b class='flag-5'>Wi-Fi</b> 6模塊推薦 | 物聯(lián)網(wǎng)設備集成攻略

    淺談Wi-Fi 6E與Wi-Fi 7的關鍵器件——BAW濾波器新技術

    作者: Qorvo 亞太區(qū)無線連接事業(yè)部高級行銷經(jīng)理林健富 ? 2020年1月,Wi-Fi聯(lián)盟正式宣布開放6GHz頻段(5925MHz-7125MHz),并將其命名為Wi-Fi 6E。2020年4月
    發(fā)表于 09-19 18:29 ?2474次閱讀
    淺談<b class='flag-5'>Wi-Fi</b> 6E與<b class='flag-5'>Wi-Fi</b> 7的關鍵器件——BAW濾波器新技術

    解讀Nordic基于SSID的Wi-Fi定位解決方案

    ,與 nRF91 系列蜂窩物聯(lián)網(wǎng)模組配合使用,可實現(xiàn)基于 SSID 的 Wi-Fi 定位。Nordic基于SSID的Wi-Fi定位可以在室內和室外、城市和郊區(qū)以極其省電的方式獲取精確的位置信息。這是對全球導航衛(wèi)星
    的頭像 發(fā)表于 09-09 17:11 ?4017次閱讀
    解讀Nordic基于SSID的<b class='flag-5'>Wi-Fi</b>定位解決方案

    如何更新 NuMaker IoT 板上的 Wi-Fi 模塊固件?

    更新 NuMaker IoT 板上的 Wi-Fi 模塊固件
    發(fā)表于 09-04 08:28

    基于 SSID 的 Wi-Fi 定位:與其他定位服務的性能比較

    ,與 nRF91 系列蜂窩物聯(lián)網(wǎng)模組配合使用,可實現(xiàn)基于 SSID 的 Wi-Fi 定位。Nordic基于SSID的Wi-Fi定位可以在室內和室外、城市和郊區(qū)以極其省電的方式獲取精確的位置信息。這是對全球
    發(fā)表于 08-31 21:01

    LitePoint Wi-Fi測試軟件減輕客戶設計負擔

    Wi-Fi 7于一年多前獲得Wi-Fi聯(lián)盟認證以來,作為最新一代通信技術,Wi-Fi正逐步成為用戶實現(xiàn)無所不在無線連接的新選擇。隨著每一代Wi-F
    的頭像 發(fā)表于 08-06 15:34 ?1396次閱讀
    LitePoint <b class='flag-5'>Wi-Fi</b>測試軟件減輕客戶設計負擔

    有沒有什么修復方法可以確保 AP 模式下的 Wi-Fi 和 BLE 連接同時正常工作?

    我正在使用 CYBSYSKIT DEV 01 套件。我嘗試在 AP 模式下打開 Wi-Fi 并宣傳 BLE。我可以宣傳 SoftAP 和 BLE。但是,我無法從中央設備連接到 BLE。它可以立即連接并斷開連接。有沒有什么修復方法可以確保 AP 模式下的
    發(fā)表于 07-17 06:13

    HarmonyOS 5】金融應用開發(fā)鴻蒙組件實踐

    原生鴻蒙操作系統(tǒng)星河版,面向開發(fā)者開放申請,余承東宣布鴻蒙生態(tài)設備數(shù)達 8 億臺;建設銀行、郵儲銀行等完成鴻蒙原生應用 Beta 版本開發(fā)。 2024 年 10 月 22 日:
    的頭像 發(fā)表于 07-11 18:20 ?1136次閱讀
    【<b class='flag-5'>HarmonyOS</b> 5】金融應用開發(fā)<b class='flag-5'>鴻蒙</b>組件實踐

    科普|公司的Wi-Fi,為什么這么慢?

    大家在公司上班,經(jīng)常會使用到Wi-Fi。最近這幾年,隨著時代的發(fā)展,高清視頻會議等大帶寬網(wǎng)絡應用越來越普遍。而公司的網(wǎng)絡,卻非常不給力,頻繁卡頓,嚴重影響使用體驗。哪怕IT的同事已經(jīng)把網(wǎng)絡優(yōu)化得很
    的頭像 發(fā)表于 06-20 06:06 ?1803次閱讀
    科普|公司的<b class='flag-5'>Wi-Fi</b>,為什么這么慢?

    Wi-Fi 8:開啟極高可靠性 (UHR) 連接的新紀元——2

    Aggregation)。由于所有操作均可跨頻段與頻道進行,因此顯著提升了整個網(wǎng)絡系統(tǒng)的數(shù)據(jù)傳輸速度,并有效降低了多用戶同時在線傳輸時所產(chǎn)生的延遲問題。圖3展示了Wi-Fi 7中 MLO技術如何通過不同頻段
    發(fā)表于 06-13 11:15

    Wi-Fi 8:開啟極高可靠性 (UHR) 連接的新紀元——1

    就開始啟動Wi-Fi 8的項目研究?原因在于,Wi-Fi 7的技術已經(jīng)正式落地,芯片與解決方案的提供商以及電信服務的運營商也已開始布局并逐漸完善Wi-Fi 7的生態(tài)系統(tǒng)。廠商們希望借此
    發(fā)表于 06-13 11:09
    益阳市| 乌拉特后旗| 黑山县| 嘉兴市| 德惠市| 铜川市| 安陆市| 乌拉特中旗| 南投市| 津市市| 苏尼特右旗| 林芝县| 磐安县| 永善县| 莱西市| 柯坪县| 安阳县| 兴海县| 修水县| 永靖县| 闸北区| 凭祥市| 肃北| 沈丘县| 临夏市| 虎林市| 双桥区| 娱乐| 含山县| 剑河县| 道真| 巴林左旗| 西林县| 三原县| 双江| 枣强县| 临泉县| 滨州市| 普格县| 千阳县| 乌兰县|