本文來源電子發燒友社區,作者:hehung, 帖子地址:https://bbs.elecfans.com/jishu_2013902_1_1.html
玩玩OLED板子上面的兩個模擬開關S1與S2。
首先查看原理圖:
這兩個按鍵是連接在GPIO5上面的,我在上一個帖子上面使用的User按鍵也是連接在這個端口的,GPIO是一個模擬端口使用了ADC2,通過這個模擬端口我們可以一次性讀取三個按鈕的值了。
從原理圖可以看出,S1按鈕的值就為參考電壓*(1/(4.7+1)),S2按鈕的值就為參考電壓*((1+1)/(4.7+1+1)),具體數值可以寫一個程序用串口讀取讀出的ADC數字來查看。
?
?
我最開始寫了一個程序用來讀取按下按鍵之后的ADC的電壓。
按下User按鍵之后電壓值為160,而且按下User+S2+S2都是這個值,因為User按鈕沒有接電阻,按下之后相當于電流沒有從S1和S2流過。
單獨按下S1的值大概為320。同時按下S1和S2的話,值也是S1的值320.因為電流也只會從S1流過,感覺這個模擬開關設計不是很好,應該多加兩個電阻,讓S1和S2同時按下的時候有不同的值,這樣相當于多了一種按鍵情況。
單獨按下S2的值為548.
我在寫程序的時候發現ADC并不需要初始化,可以直接讀取就行了。
所以設計程序如下:
創建任務
復制代碼
模擬開關值讀取:
復制代碼
測試效果如下:
玩玩OLED板子上面的兩個模擬開關S1與S2。
首先查看原理圖:
這兩個按鍵是連接在GPIO5上面的,我在上一個帖子上面使用的User按鍵也是連接在這個端口的,GPIO是一個模擬端口使用了ADC2,通過這個模擬端口我們可以一次性讀取三個按鈕的值了。
從原理圖可以看出,S1按鈕的值就為參考電壓*(1/(4.7+1)),S2按鈕的值就為參考電壓*((1+1)/(4.7+1+1)),具體數值可以寫一個程序用串口讀取讀出的ADC數字來查看。



我最開始寫了一個程序用來讀取按下按鍵之后的ADC的電壓。
按下User按鍵之后電壓值為160,而且按下User+S2+S2都是這個值,因為User按鈕沒有接電阻,按下之后相當于電流沒有從S1和S2流過。
單獨按下S1的值大概為320。同時按下S1和S2的話,值也是S1的值320.因為電流也只會從S1流過,感覺這個模擬開關設計不是很好,應該多加兩個電阻,讓S1和S2同時按下的時候有不同的值,這樣相當于多了一種按鍵情況。
單獨按下S2的值為548.
我在寫程序的時候發現ADC并不需要初始化,可以直接讀取就行了。
所以設計程序如下:
創建任務
- static void KeyEntry(void)
- {
- osThreadAttr_t attr;
- // GpioInit();
- // IoSetFunc(WIFI_IOT_IO_NAME_GPIO_5, WIFI_IOT_IO_FUNC_GPIO_5_GPIO);
- // GpioSetDir(WIFI_IOT_IO_NAME_GPIO_5, WIFI_IOT_GPIO_DIR_IN);
- // AdcRead();
- attr.name = "KeyTask";
- attr.attr_bits = 0U;
- attr.cb_mem = NULL;
- attr.cb_size = 0U;
- attr.stack_mem = NULL;
- attr.stack_size = KEY_TASK_STACK_SIZE;
- attr.priority = KEY_TASK_PRIO;
- if (osThreadNew((osThreadFunc_t)KeyTask, NULL, &attr) == NULL) {
- printf("[KeyTask] Falied to create KeyTask!n");
- }
- }
- SYS_RUN(KeyEntry);
模擬開關值讀取:
-
static void *KeyTask(const char *arg){(void)arg;
hi_u16 Key_adc_value = 0u;
hi_u32 ret = 0;
-
while (1) {ret = hi_adc_read((hi_adc_channel_index)HI_ADC_CHANNEL_2, &Key_adc_value,HI_ADC_EQU_MODEL_1, HI_ADC_CUR_BAIS_DEFAULT, 0);if (ret != HI_ERR_SUCCESS) {printf("ADC Read Failn");}else{// printf("ADC value = %d", Key_adc_value);}
-
/*User 按鍵ADC值讀出來大概為116*//*S1 按鍵ADC讀出來大概為320*//*S2 按鍵ADC讀出來大概為548*/if(Key_adc_value <= 200){printf("User key pressedn");}else if(Key_adc_value <= 400){printf("User S1 pressedn");}else if(Key_adc_value <= 600){printf("User S2 pressedn");}else{}usleep(KEY_INTERVAL_TIME_US);}
-
return NULL;}
測試效果如下:

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
wi-fi
+關注
關注
14文章
2259瀏覽量
126977 -
HarmonyOS
+關注
關注
80文章
2126瀏覽量
33021 -
HiSpark
+關注
關注
1文章
156瀏覽量
7410
發布評論請先 登錄
相關推薦
熱點推薦
Wi-Fi 8要來了!未來Wi-Fi技術演進方向揭秘
產品銷售中,雖然Wi-Fi 7產品的銷量份額快速從年初的個位數百分比增長至14%,但Wi-Fi 6產品的銷量份額依然穩定在60%左右。如果從存量設備來看,那么Wi-Fi 7路由器的占比將遠遠小于這個數。 ? 智能手機等終端設備已

如何選擇合適的芯科科技Wi-Fi開發板
您正在尋找適用于超低功耗物聯網應用項目的Wi-Fi 開發板嗎?本文將介紹Silicon Labs(芯科科技)推出的所有SiWx917 Wi-Fi 6和低功耗藍牙5.4解決方案的Wi-Fi
Wi-Fi 8:開啟極高可靠性 (UHR) 連接的新紀元——1
、5GHz與6GHz。關于標準正式發布的年份,業界目前預估為2028年,但真正的標準制定完成日期仍需以IEEE 與Wi-Fi Alliance 工作小組的進度為準。
圖2展示了IEEE正在進行
發表于 06-13 11:09
貿澤電子開售Qorvo Wi-Fi 7前端模塊
入多輸出(MIMO)功能,全頻段Wi-Fi 5、6和6E。Wi-Fi 7可確保更高吞吐量、更低延遲和更高數據速率。多鏈路操作有助于建立多個有源鏈路,通過選擇最可用的傳輸鏈路來提高峰值數
Wi-Fi HaLow如何突破傳統Wi-Fi性能瓶頸?
!傳統Wi-Fi的痛點高頻段衰減快:5GHz信號穿墻后衰減超80%,地下室、倉庫成盲區;大帶寬高耗電:設備需持續處理高速數據流,智能門鎖電池1個月耗盡;信道擁堵:

基于 Wi-Fi 的定位服務
以下捕獲使用 location_wifi_get 函數請求 Wi-Fi 定位服務。該事件的總功耗為 125.85mC,日志顯示精確度為 30.0m。
Got location:
method
發表于 04-17 15:16
nRF Cloud Wi-Fi 定位服務
、Predictive-GPS、Single-Cell、Multi-Cell 和 Wi-Fi 定位。通過利用 nRF Cloud 的優化定位算法,基于 Nordic SoC 和 模組的產品可在定位用例
發表于 04-17 15:07
Wi-Fi 定位服務
Wi-Fi 是一種著名的無線網絡技術,用于設備的局域網和互聯網接入。Wi-Fi 通過 Wi-Fi 網絡為家庭、辦公室和學校等環境提供便捷的無線互聯網接入服務。
Wi-Fi 定位是一種
發表于 04-17 15:01
2.4GHz+5GHz雙頻低功耗 Wi-Fi 6協同IC -nRF7002
開發人員能夠充分發揮Wi-Fi 6的潛力,包括更高的數據傳輸速率、更大的容量和更高的能效,以及Nordic一流的LTE-M/NB-IoT和BluetoothLE解決方案,從而簡化開發過程并加快產品上市
發表于 02-26 14:54
華為海思正式進入Wi-Fi FEM賽道?
產品和技術交流。
2017年是國產Wi-Fi FEM元年,銳迪科(RDA)是中國大陸第一家推出和量產Wi-Fi5 FEM的公司,也是第一家導入H公司的Wi-Fi FEM廠商。
也是在這一年,我頻繁地跟H
發表于 12-11 17:42
摩爾斯微電子發布Wi-Fi HaLow評估套件,加速物聯網開發
。 MM6108-EKH05評估套件充分發揮了Wi-Fi HaLow技術的強大功能,支持從智能家居到工業自動化的廣泛應用。其數據傳輸速率高達32.5 Mbps,并能在1 GHz以下頻率范圍內進行可編程操作,是物聯網
Wi-Fi 7與Wi-Fi 6E有什么區別
也許很多人還在考慮是否要將使用的Wi-Fi設備升級到Wi-Fi 6或Wi-Fi 6E,而這些標準的繼任者卻已經開始“登堂入室”了。Wi-Fi 7是新一代
評論