2682|4

7047

帖子

11

TA的资源

版主

楼主
 

【创龙TL570x-EVM】按键控制LED灯 [复制链接]

本帖最后由 lugl4313820 于 2022-5-23 07:07 编辑

【前言】例程给了Python控制LED闪烁、检测按键的程序,结合两个案例学习综合一个按键控制例子。

【分析】LED闪灯,是循环检测是否退出的标志来维护的,我这里加入thread线程来开启。按键程序是even来检测的,如果再加入线程就会出现不能退出的现象。

【实现思路】按测键检来判断按键是否按下,然后更新延时秒数来控制LED灯闪烁的快慢。

1、初始化LED:

 def __init__(self):
        self.led_path = "/sys/class/leds/"    # Led path
        self.leds     = []          # Save the led found
        self.enumerate_led()
        self.led_time = 0.1
        self.key_sta = 1

    """ enumerate all led """
    def enumerate_led(self):
        led_name = "user-led"

        """ find led """
        for filename in os.listdir(self.led_path):
            if led_name in filename:
                self.leds.append(os.path.join(self.led_path, filename))

        if len(self.leds) == 0:
            return False

        """ 
        led sort, e.g.
        /sys/class/leds/user-led0
        /sys/class/leds/user-led1
        /sys/class/leds/user-led2
        """
        self.leds.sort()

        print "find leds:"
        for led in self.leds:
            print led

        return True

2、LED闪烁程序:

""" control led flash """
    def flash_led(self):
        led_num = len(self.leds)

        while not KeyDevice.quit_flag:
            """ Turn on leds """
            for i in range(led_num):
                """ Set the led brightness value to 1 to turn on the led """
                ret = os.system("echo 1 > %s/brightness" % (self.leds))
                
                if ret != 0:
                    print "Error: Failed to turn on %s" % self.leds

            """ Keep the leds on for 500 ms """
            time.sleep(self.led_time*self.key_sta)

            for i in range(led_num):
                """ Set the led brightness value to 0 to turn off the LED """
                os.system("echo 0 > %s/brightness" % (self.leds))

            """ Keep the leds off for 500 ms """
            time.sleep(self.led_time*self.key_sta)

3、按键检测程序:


def open_device(self, key_dev):
        try:
            """ open key device, if success, return True"""
            self.key_dev = evdev.InputDevice(key_dev)
            return True
        except Exception as e:
            print e
            return False
            
    def listen_key_pressed(self):
        try:
            print "Please press the key to test.\n"

            """
            Listen for the button to be pressed
            event.value: 1: pressed; 0: released
            """
            for event in self.key_dev.read_loop():
                if event.type == evdev.ecodes.EV_KEY:
                    if event.code == evdev.ecodes.KEY_PROG1 and event.value == 1:
                        print "User key0 pressed!\n"
                        self.key_sta = 1

                    elif event.code == evdev.ecodes.KEY_PROG2 and event.value == 1:
                        print "User key1 pressed!\n"
                        self.key_sta = self.key_sta + 1
                        if self.key_sta >20:
                            self.key_sta = 1
                        

        except Exception as e:
            if not KeyDevice.quit_flag:
                print e

4、CTRL+C退出程序:


 @classmethod
    def stop(cls):
        print "ctrl + c ..."
        cls.quit_flag = True
        sys.exit()

5、CTRL+C信号:


def sig_handle(signum, frame):
    print "ctrl + c ..."
    KeyDevice.stop()
    sys.exit()

6、启动:

if __name__ == '__main__':

    key_dev = "/dev/input/event0"   # key deivce path

    try:

        """ Ctrl+c handler """

        signal.signal(signal.SIGINT, sig_handle)

        key_device = KeyDevice()

       

        """ open key device """

        res = key_device.open_device(key_dev)

        if not res:

            print "open %s failed!" % key_dev

            exit(3)

        t1 = threading.Thread(target=key_device.flash_led)

        t1.start()

        """ Listen for the button to be pressed """

        key_device.listen_key_pressed()

    except Exception, exc:

        print exc

【实验现象】程序启动后,三个灯快速闪烁,按下按键4,灯闪得慢下来,慢到2秒一次时,再按一下又回到原来的闪烁频率。

本次实验主要学习了python 检测GPIO的输入输出控制。

【总结】python编程还是相对容易的,但是遗憾的就是event只在python2.7中支持,现象已经用习惯了python3,突然回到python2还有点不习惯,python中pip也不支持安装包,所以发挥不出来。希望官方出个如何添加包的教程。


 

最新回复

感谢楼主的分享,谢谢................   详情 回复 发表于 2022-6-5 09:42
点赞 关注
 

回复
举报

2

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

学习了

 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

用什么命令可以控制led

点评

好几种命令都可以,.sh操作文件,C也可以、Python也可以,N种  详情 回复 发表于 2022-5-25 15:23
 
 
 

回复

7047

帖子

11

TA的资源

版主

4
 
hahhk 发表于 2022-5-25 10:31 用什么命令可以控制led

好几种命令都可以,.sh操作文件,C也可以、Python也可以,N种

 
 
 

回复

18

帖子

1

TA的资源

一粒金砂(中级)

5
 

感谢楼主的分享,谢谢................

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表