当前位置: 首页 > 科技观察

鸿蒙Hi3861ADC驱动开发板上3个按键的使用方法

时间:2023-03-22 15:27:36 科技观察

更多内容请访问:与华为官方共建的鸿蒙技术社区https://harmonyos.51cto.com/#zz本节主要介绍一下Hi3861的ADC功能,顺便实现ADC按键检测。先来看看效果吧。查看开发板,可以看到除了reset键之外还有3个按键。从原理上看,三个按键其实都连接到了GPIO5引脚,GPIO5引脚可以复用为ADC2引脚。因此,我们可以猜测,我们可以使用ADC来检测电压并确定哪个引脚被按下。看效果:当我按下按钮1时,串口会打印:当我按下按钮2时,串口会打印:当我按下USER按钮时,串口会打印其中vlt_min表示最小ADC值读取值,vlt_max表示读取的ADC值的最大值。由此可见,按下按钮1时,ADC值范围为0.563~0.577。按下按钮2后,ADC值范围为0.963至0.970。按下USER键后,ADC值范围为0.197至0.204。如果没有按键按下,那么ADC值为3.227~3.241vlt_min:3.227,vlt_max:3.241代码实现其实很简单。(1)引脚初始化这里,由于GPIO5默认复用为串口引脚,这里我们重新修改为普通GPIO引脚。初始化代码如下:(hi_void)hi_gpio_init();hi_io_set_func(HI_IO_NAME_GPIO_5,HI_IO_FUNC_GPIO_5_GPIO);/*uart1rx*/ret=hi_gpio_set_dir(HI_GPIO_IDX_5,HI_GPIO_DIR_IN);if(ret!=HI_ERR_SUCCESS)==ERR("======gpio->hi_gpio_set_dir1ret:%d\r\n",ret);return;}(2)读取ADC值读取ADC值的代码页比较简单。在这里,我反复看了64遍,减少误判。memset_s(g_adc_buf,sizeof(g_adc_buf),0x0,sizeof(g_adc_buf));for(i=0;ivlt_max)?voltage:vlt_max;vlt_min=(voltage0.4)&&(vlt_val<0.6)){if(key_flg==0){key_flg=1;key_status=KEY_EVENT_S1;}}if((vlt_val>0.8)&&(vlt_val<1.1)){if(key_flg==0){key_flg=1;key_status=KEY_EVENT_S2;}}if((vlt_val>0.01)&&(vlt_val<0.3)){if(key_flg==0){key_flg=1;key_status=KEY_EVENT_S3;}}if(vlt_val>3.0){key_flg=0;key_status=KEY_EVENT_NONE;}(4)上面代码写完后,可以直接在while循环中判断key值:while(1){//读取ADC值app_demo_adc_test();开关(get_key_event()){caseKEY_EVENT_NONE:{}中断;caseKEY_EVENT_S1:{printf(“KEY_EVENT_S1\r\n”);}中断;caseKEY_EVENT_S2:{printf(“KEY_EVENT_S2\r\n”);}中断;caseKEY_EVENT_S3:{printf("KEY_EVENT_S3\r\n");}break;}usleep(30000);}更多内容请访问:Harmonyos技术社区https://harmonyos.51cto.com与华为官方共建/#zz