在需要同时监听多个按键按下状态的情况下,可以通过监听/dev/input/event事件的方法来判断按键的状态。比如对于通过键盘控制小车时,有可能多个方向键同时按下,需要同时监测到,通过前面文章的方法可以有效监控单个按键的消息,但是不能同时监控多个按键同时按下的信息。需要通过记录键盘的按下和释放事件来确定当前键盘的状态,以方向键盘组合按键为例,示例程序如下:
#include <stdio.h>
#include <unistd.h>
#include <linux/input.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main()
{
int keys_fd;
input_event t;
char device[] = "/dev/input/event6";
keys_fd = open(device, O_RDONLY);
if(keys_fd <= 0)
{
printf("Open %s device error!\n", device);
return -1;
}
bool up = 0, down = 0, left = 0, right = 0; //true for pressed, flase for released
double vel = 0, yaw = 0;
while(1)
{
if(read(keys_fd, &t, sizeof(t)) != sizeof(t)) continue;
if(t.type != EV_KEY) continue;
if (t.code == KEY_ESC) break;
if (t.code == KEY_LEFT) left = t.value;
if (t.code == KEY_RIGHT) right = t.value;
if (t.code == KEY_UP) up = t.value;
if (t.code == KEY_DOWN) down = t.value;
yaw = left ? -1 : right ? 1 : 0;
vel = up ? 1 : down ? -1 : 0;
printf("Control vel %.1lf, yaw %.1lf\n", vel, yaw);
}
close(keys_fd);
return 0;
}
如上,监听键盘输入对应的事件(本机为/dev/input/event6),记录方向键的按下和释放事件,从而确定各个方向键的按下状态,从而确定相应的遥控指令(vel, yaw)。
不同的机器键盘对应的事件名称不一定一样,可以通过
$ cat /proc/bus/input/devices
来查看键盘对应的事件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)