自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

鴻蒙Hi3861 ADC驅(qū)動(dòng)如何使用開發(fā)板上的3個(gè)按鍵

系統(tǒng)
本節(jié)主要介紹Hi3861 的 ADC功能,順便實(shí)現(xiàn)ADC按鍵檢測(cè)。這里先看效果吧。

[[352888]]

 想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com/#zz

本節(jié)主要介紹Hi3861 的 ADC功能,順便實(shí)現(xiàn)ADC按鍵檢測(cè)。這里先看效果吧。

查看開發(fā)板,可以看到除了復(fù)位按鍵之外,還有3個(gè)按鍵。而查看原理,我們可以看到這個(gè)3個(gè)按鍵其實(shí)都是接的GPIO5 引腳,而GPIO5引腳又可復(fù)用為ADC2引腳。


故而,我們可以猜測(cè)出來(lái)我們可以使用ADC檢測(cè)電壓,判斷出來(lái)是哪個(gè)引腳被按下了。

看下效果:

當(dāng)我按下 按鍵1的時(shí)候,串口會(huì)打?。?/p>

當(dāng)我按下按鍵2的時(shí)候串口會(huì)打印:

當(dāng)我按下 USER按鍵的時(shí)候串口會(huì)打印

其中 vlt_min 表示讀取到ADC值的最小值,

vlt_max 表示讀取到ADC值的最大值。

由此我們可以看到,按鍵1被按下的時(shí)候,ADC值得范圍在 0.563 ~ 0.577

按鍵2按下后,ADC值在 0.963 ~ 0.970

USER按鍵按下后 ADC值 在 0.197 ~ 0.204

如果沒有按鍵按下,則ADC值在 3.227 ~ 3.241

vlt_min:3.227, vlt_max:3.241

代碼實(shí)現(xiàn)其實(shí)很簡(jiǎn)單。

(1)引腳初始化

這里由于GPIO5默認(rèn)被復(fù)用為串口引腳,這里我們重新修改為普通GPIO引腳。初始化代碼如下:

  1. (hi_void)hi_gpio_init(); 
  2.    
  3.   hi_io_set_func(HI_IO_NAME_GPIO_5, HI_IO_FUNC_GPIO_5_GPIO); /* uart1 rx */ 
  4.  
  5.   ret = hi_gpio_set_dir(HI_GPIO_IDX_5, HI_GPIO_DIR_IN); 
  6.   if (ret != HI_ERR_SUCCESS) { 
  7.       printf("===== ERROR ======gpio -> hi_gpio_set_dir1 ret:%d\r\n", ret); 
  8.       return
  9.   } 

 (2)讀取ADC值

讀取ADC值的代碼頁(yè)相對(duì)簡(jiǎn)單,這里,我是重復(fù)讀取64次,減少誤判。

  1. memset_s(g_adc_buf, sizeof(g_adc_buf), 0x0, sizeof(g_adc_buf)); 
  2.  
  3.   for (i = 0; i < ADC_TEST_LENGTH; i++) { 
  4.       ret = hi_adc_read((hi_adc_channel_index)HI_ADC_CHANNEL_2, &data, HI_ADC_EQU_MODEL_1, HI_ADC_CUR_BAIS_DEFAULT, 0); 
  5.       if (ret != HI_ERR_SUCCESS) { 
  6.           printf("ADC Read Fail\n"); 
  7.           return
  8.       } 
  9.       g_adc_buf[i] = data; 
  10.   } 

 (3)對(duì)讀出來(lái)的ADC值進(jìn)行判斷處理

S1對(duì)應(yīng)的是按鍵1 、 S2對(duì)應(yīng)的是按鍵2 、 S3對(duì)應(yīng)的是 USER按鍵

  1. for (i = 0; i < data_len; i++) { 
  2.      vlt = g_adc_buf[i]; 
  3.      float voltage = (float)vlt * 1.8 * 4 / 4096.0;  /* vlt * 1.8 * 4 / 4096.0: Convert code into voltage */ 
  4.      vlt_max = (voltage > vlt_max) ? voltage : vlt_max; 
  5.      vlt_min = (voltage < vlt_min) ? voltage : vlt_min; 
  6.  } 
  7.  //printf("vlt_min:%.3f, vlt_max:%.3f \n", vlt_min, vlt_max); 
  8.  
  9.  vlt_val = (vlt_min + vlt_max)/2.0; 
  10.  
  11.  if((vlt_val > 0.4) && (vlt_val < 0.6)) 
  12.  { 
  13.      if(key_flg == 0) 
  14.      { 
  15.          key_flg = 1; 
  16.          key_status = KEY_EVENT_S1; 
  17.      } 
  18.  } 
  19.  if((vlt_val > 0.8) && (vlt_val < 1.1)) 
  20.  { 
  21.      if(key_flg == 0) 
  22.      { 
  23.          key_flg = 1; 
  24.          key_status = KEY_EVENT_S2; 
  25.      } 
  26.  } 
  27.  
  28.  if((vlt_val > 0.01) && (vlt_val < 0.3)) 
  29.  { 
  30.      if(key_flg == 0) 
  31.      { 
  32.          key_flg = 1; 
  33.          key_status = KEY_EVENT_S3; 
  34.      } 
  35.  } 
  36.  
  37.  if(vlt_val > 3.0) 
  38.  { 
  39.      key_flg = 0; 
  40.      key_status = KEY_EVENT_NONE; 
  41.  } 

 (4)使用

編寫好上面代碼后,就可以直接在while循環(huán)中判斷按鍵值了:

  1. while(1) 
  2.  { 
  3.      //讀取ADC值 
  4.      app_demo_adc_test(); 
  5.  
  6.      switch(get_key_event()) 
  7.      { 
  8.          case KEY_EVENT_NONE: 
  9.          { 
  10.               
  11.          } 
  12.          break; 
  13.  
  14.          case KEY_EVENT_S1: 
  15.          { 
  16.              printf("KEY_EVENT_S1 \r\n"); 
  17.          } 
  18.          break; 
  19.  
  20.          case KEY_EVENT_S2: 
  21.          { 
  22.              printf("KEY_EVENT_S2 \r\n"); 
  23.          } 
  24.          break; 
  25.  
  26.          case KEY_EVENT_S3: 
  27.          { 
  28.              printf("KEY_EVENT_S3 \r\n"); 
  29.          } 
  30.          break; 
  31.  
  32.      } 
  33.  
  34.      usleep(30000); 
  35.  } 
  36.   

 想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):

51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

https://harmonyos.51cto.com/#zz

 

責(zé)任編輯:jianghua 來(lái)源: 鴻蒙社區(qū)
相關(guān)推薦

2020-10-27 10:08:19

Hi3861ADC驅(qū)動(dòng)

2020-12-08 12:36:41

Hi3861 ADC驅(qū)動(dòng)開發(fā)

2020-10-30 17:12:05

Hi3861

2020-11-06 10:15:16

HiBurn

2020-10-30 09:48:03

Hi3861開發(fā)板get請(qǐng)求

2020-11-06 11:32:11

NV操作

2020-10-14 09:37:03

HiBurn鴻蒙.bin文件

2020-12-09 09:44:29

Hi3861硬件介紹鴻蒙開發(fā)板

2020-12-17 10:02:16

鴻蒙Hi3861開發(fā)板

2021-09-16 10:03:39

鴻蒙HarmonyOS應(yīng)用

2020-10-30 17:42:36

鴻蒙 OS Hi386

2021-06-25 15:32:13

鴻蒙HarmonyOS應(yīng)用

2020-12-11 12:45:04

鴻蒙Hi3861游戲

2020-12-15 11:57:49

Hi3861 HarmonyOS開發(fā)板

2022-01-05 20:27:45

鴻蒙HarmonyOS應(yīng)用

2020-10-29 09:53:06

Hi3861硬件開發(fā)板

2021-12-15 15:28:18

鴻蒙HarmonyOS應(yīng)用

2022-08-19 10:54:47

操作系統(tǒng)鴻蒙

2020-11-03 12:26:55

Hi3861

2021-12-20 21:01:52

鴻蒙HarmonyOS應(yīng)用
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)