在线时间234 小时
UID3301905
注册时间2017-1-8
NXP金币117
TA的每日心情 | 开心 2018-4-20 15:04 |
---|
签到天数: 8 天 [LV.3]偶尔看看II
金牌会员
- 积分
- 2958
- 最后登录
- 2023-7-24
|
本帖最后由 donatello1996 于 2018-7-18 23:28 编辑
在米尔IOT开发板中,有一个名为User的按键,官方已经给这个按键构建好了设备树,检测这个按键输入的外设是/dev/input目录下的event2文件:
Linux中对按键的状态检测也就两个对立状态:按下和松开,这个按键的按下和松开检测,是由input_event结构体的value值返回的,当按键按下时,value的值为0,松开则value的值为1。因此,我们可以写一段按键检测的代码,与之前的操作GPIO_9翻转引脚电平的实验相结合,以实现按键控制GPIO_9电平。如果在GPIO_9上连接一个TTL电平的继电器,继电器再驱动一个LED照明灯的话,就可以实现用按键来控制LED照明灯了。
程序:- int keys_fd;
- struct input_event t;
- keys_fd = open(argv[1], O_RDONLY);
- if (keys_fd <= 0)
- {
- printf ("open %s device error!\n",argv[1]);
- return 0;
- }
- system("echo 9 > /sys/class/gpio/export");
- system("echo "out" > /sys/class/gpio/gpio9/direction");
- while(1)
- {
- if (read(keys_fd, &t, sizeof(t)) == sizeof(t))
- {
- if(t.type==EV_KEY)
- if(t.value==0)
- system("echo 0 > /sys/class/gpio/gpio9/value");
- else if(t.value==1)
- system("echo 1 > /sys/class/gpio/gpio9/value");
- }
- }
复制代码
其中argv[1]的字符串填入/dev/input/event2即
程序直接读取event2所映射的内存空间,把按键的状态读取到input_event类型的结构体t里面,通过判断t.type锁定按键触发事件,再通过读取t.value来获取按键按下的状态。
看看效果:
|
|