查看: 1515|回复: 0

[i.MX6ULL竞赛专区] 【我的项目666--智能楼宇门禁】按键输入事件检测&控制LED...

[复制链接]
  • TA的每日心情
    开心
    2018-4-20 15:04
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    49

    主题

    188

    帖子

    1

    金牌会员

    Rank: 6Rank: 6

    积分
    2958
    最后登录
    2023-7-24
    发表于 2018-7-14 23:01:17 | 显示全部楼层 |阅读模式
    本帖最后由 donatello1996 于 2018-7-18 23:28 编辑

        在米尔IOT开发板中,有一个名为User的按键,官方已经给这个按键构建好了设备树,检测这个按键输入的外设是/dev/input目录下的event2文件:
    32.jpg
        Linux中对按键的状态检测也就两个对立状态:按下和松开,这个按键的按下和松开检测,是由input_event结构体的value值返回的,当按键按下时,value的值为0,松开则value的值为1。因此,我们可以写一段按键检测的代码,与之前的操作GPIO_9翻转引脚电平的实验相结合,以实现按键控制GPIO_9电平。如果在GPIO_9上连接一个TTL电平的继电器,继电器再驱动一个LED照明灯的话,就可以实现用按键来控制LED照明灯了。
        程序:
    1. int keys_fd;
    2.         struct input_event t;
    3.         keys_fd = open(argv[1], O_RDONLY);
    4.         if (keys_fd <= 0)
    5.         {
    6.             printf ("open %s device error!\n",argv[1]);
    7.             return 0;
    8.         }

    9.     system("echo 9 > /sys/class/gpio/export");
    10.     system("echo "out" > /sys/class/gpio/gpio9/direction");
    11.     while(1)
    12.     {
    13.         if (read(keys_fd, &t, sizeof(t)) == sizeof(t))
    14.         {
    15.             if(t.type==EV_KEY)
    16.                 if(t.value==0)
    17.                     system("echo 0 > /sys/class/gpio/gpio9/value");
    18.                 else if(t.value==1)
    19.                     system("echo 1 > /sys/class/gpio/gpio9/value");
    20.         }
    21.     }
    复制代码


    其中argv[1]的字符串填入/dev/input/event2即
    1. ./main /dev/input/event2
    复制代码
    程序直接读取event2所映射的内存空间,把按键的状态读取到input_event类型的结构体t里面,通过判断t.type锁定按键触发事件,再通过读取t.value来获取按键按下的状态。
    看看效果:
    5.gif


    今天心情不错
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-27 17:20 , Processed in 0.197475 second(s), 20 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表