首页 文章 精选 留言 我的

精选列表

搜索[AI驱动],共10000篇文章
优秀的个人博客,低调大师

基于鸿蒙OS的按键驱动

按键作为常用的输入系统,如何准确并高效的获取按键值,是一个经常要面对的问题,今天我们看看在鸿蒙系统中,如何得到独立按键的按键值。 实现目标 我们这次以Hi3861核心板左下角的USER按键S2为例,当按键按下时,通过USB Type-c对应的串口输出信息。 按键S2在实物中的对应关系如下图黄线所示: 按键原理图 核心板左下角的按键S2的原理图如下: 当S2被按下之后,GPIO05与GND相连,此时GPIO05输入为低电平。 代码实现 实现方式一:读取输入IO的状态 #include <stdio.h> #include <unistd.h> #include "ohos_init.h" #include "cmsis_os2.h" #include "wifiiot_gpio.h" #include "wifiiot_gpio_ex.h" #include "wifiiot_errno.h" static void Key_Task(const char* arg) { (void)arg; printf("Enter the Key_Task ... \n"); while (1) { WifiIotGpioValue wigv; GpioGetInputVal(WIFI_IOT_IO_NAME_GPIO_5,&wigv); if (wigv == WIFI_IOT_GPIO_VALUE0) { usleep(10*1000); //10ms while(1) { GpioGetInputVal(WIFI_IOT_IO_NAME_GPIO_5,&wigv); if (wigv == WIFI_IOT_GPIO_VALUE1){ printf("[DEMO] GPIO05 Low level.\n"); break; } } } } return; } static void KeyExampleEntry(void) { unsigned int 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); if (ret != WIFI_IOT_SUCCESS) { printf("===== ERROR ======gpio -> GpioSetDir ret:%d\r\n", ret); return; } osThreadAttr_t attr = {0}; attr.name = "Key_Task"; attr.attr_bits = 0U; attr.cb_mem = NULL; attr.cb_size = 0U; attr.stack_mem = NULL; attr.stack_size = 1024; attr.priority = osPriorityNormal; if(osThreadNew((osThreadFunc_t)Key_Task,NULL,&attr) == NULL) { printf("Failed to create Key_Task !\n"); } } SYS_RUN(KeyExampleEntry); 编译代码: pythonbuild.pywifiiot 更新固件之后重启最小系统板,打开串口助手,点击核心板上的USER按键S2,串口助手输出信息如下: 注意:此实例新建了一个任务用于循环读取按键的状态,KeyExampleEntry作为应用程序的入口函数,不能随意使用while(1)这种耗时的操作,必须快速返回,否则会妨碍鸿蒙OS中其他应用程序的运行,因此,在这个入口函数中创建一个按键状态监测的专属任务(线程)用于判断按键的状态。 GPIO中断 通过上面的原理图我们可知,当按键S2没有被按下的时候,GPIO05为默认状态高电平,当按键S2被按下时,GPIO05与GND相连,GPIO05被拉低,当松开按键S2的时候,GPIO05又恢复高电平。 在此过程中,当按键S2被按下时,GPIO05会收到一个由高到低的电平变化,我们称这个过程为下降沿;当按键S2被松开时,GPIO05会收到一个由低到高的电平变化,我们称这个过程为上升沿。 综上所述,在不考虑抖动影响的前提下,每次按键被按下,GPIO05将会收到一个下降沿;按键被释放,GPIO05会收到一个上升沿。 我们在GPIO05这个引脚上注册一个边沿触发函数(上升沿或者下降沿触发都可以),那么这个注册的边沿触发回调函数被调用一次,理论上就是有一次按键的动作发生。 #include<stdio.h> #include<unistd.h> #include"ohos_init.h" #include"cmsis_os2.h" #include"wifiiot_gpio.h" #include"wifiiot_gpio_ex.h" #include"wifiiot_errno.h" /*gpiocallbackfunc*/ voidgpio5_isr_func(char*arg) { (void)arg; printf("-----gpio05isrsuccess-----\r\n"); } staticvoidKeyExampleEntry(void) { unsignedintret=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_GPIO_IDX_5,WIFI_IOT_IO_PULL_UP); if(ret!=WIFI_IOT_SUCCESS) { printf("=====ERROR======gpio->GpioSetDirret:%d\r\n",ret); return; } ret=GpioRegisterIsrFunc(WIFI_IOT_GPIO_IDX_5,WIFI_IOT_INT_TYPE_EDGE,WIFI_IOT_GPIO_EDGE_RISE_LEVEL_HIGH,gpio5_isr_func,NULL); if(ret!=WIFI_IOT_SUCCESS) { printf("=====ERROR======gpio->hi_gpio_register_isr_functionret:%d\r\n",ret); } } SYS_RUN(KeyExampleEntry); 代码说明: WIFI_IOT_IO_NAME_GPIO_5是与按键S2相连的GPIO,要实现按键中断捕获,需要先使用IoSetFunc() 函数进行端口功能重定义; 调用GpioSetDir()函数,设置GPIO05为输入,并通过IoSetPull() 函数将端口设置为上拉输入(Pull Up); 调用GpioRegisterIsrFunc()函数,完成GPIO05和回调函数gpio5_isr_func()的注册绑定,设置触发模式为上升沿触发:WIFI_IOT_GPIO_EDGE_RISE_LEVEL_HIGH,当按键S2被抬起的时候,产生上升沿,触发回调函数gpio5_isr_func()工作。 通过上面两种方式,我们学会了独立按键状态的获取、鸿蒙系统中如何创建任务和外部中断的使用,利用此代码,我们还可以用于识别热释红外传感器的响应信号。 资料获取 公众号留言区置顶留言获取本文相关代码。 ps: 文章首发于电子发烧友。 小哈有话说 最近在鸿蒙交流群中看到下面一大批开发板要移植鸿蒙操作系统了,等到这些厂商将板卡移植好了,那么鸿蒙就真的成气候了,作为一个嵌入式开发者,学习一个实时操作系统是必不可少的,学什么都是学,为什么不学一个有前途的呢? 欢迎关注 程序员小哈带你玩转嵌入式,微信搜索:嵌入式从0到1,更多干货等着你。

优秀的个人博客,低调大师

ubuntu下设置Android手机驱动

如果下面的文章不好使,建议读一这个文章:http://forum.xda-developers.com/xperia-u/general/howto-usb-connection-to-ubuntu-t1574551 以下内容有时候会导致,有的时候手机无法识别,请读上面的文章。 默认情况下 Ubuntu系统无法识别android手机。 运行 adb devices 将会出现一堆 ???号 在这种情况下你可以按照如下方法解决 1.首先查看你手机的ID号 在terminal下运行lsusb命令 再将手机连接上电脑 再次运行lsusb就会多出一个usb信息。该信息即为你手机的usb信息 Bus 002 Device 007: ID18d1:4e21 PS:红色字体为手机的ID号,同一款手机的ID号是一样的。本人手机为(NS) 2 .创建配置文件 sudo vim /etc/udev/rules.d/XXX.rules XXX为你自定义的文件名 输入以下 内容 SUBSYSTEM=="usb", SYSFS{"idVendor"}=="18d1", MODE="0666" 在红色字体的部分 添加上 你 自己手机的id sudo chmod a+rx /etc/udev/rules.d/XXX.rules sudo /etc/init.d/udev restart 3.重启adb服务(必须为sudo 已配置android环境变量) sudo ./adb kill-server sudo ./adb devices --------------------------------------------------------------------- you want MTP support on Ubuntu, try this: Connect Xperia S to an USB2 port. Use the "lsusb" command to list your devices in a terminal One of the lines should look like this: Code: Bus 002 Device 012: ID 0fce:5169 Sony Ericsson Mobile Communications AB Note your vendor- and product id. Usually this is "0fce" for the vendor and "5169" for the product id. If you have USB debugging disabled, product id will be "0169". unplug your phone read this thread:humans-enabled.com Install the newest Version of "libmtp" and copy the 69-libmtp.rules file to /etc/udev/rules.d as described Edit: This step may not be necessary for you! Xperia S support is implementet in the libmtp-1.1.3. release. If you use the newest version fromsourceforge.netskip this and go to step 7.type following to edit the copied file as root: Code: sudo gedit /etc/udev/rules.d/69-libmtp.rules Add the following text somewhere around the sony ericsson devices that are in this file. You can find them by searching for "0fce". Remember to set the correct vendor and product id: Code: # Sony Xperia S ATTR{idVendor}=="0fce", ATTR{idProduct}=="5169", SYMLINK+="libmtp-%k", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" ATTR{idVendor}=="0fce", ATTR{idProduct}=="0169", SYMLINK+="libmtp-%k", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" reboot, or use Code: sudo udevadm control --reload-rules to actualise. Plug in your device to a USB2 port, it will mount automatically. Use nautlius to copy files around. 本文转自demoblog博客园博客,原文链接http://www.cnblogs.com/0616--ataozhijia/p/3658649.html如需转载请自行联系原作者 demoblog

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册