美文网首页
在树莓派上用python程序控制双色LED灯闪烁

在树莓派上用python程序控制双色LED灯闪烁

作者: 快乐冻鱼 | 来源:发表于2019-03-15 15:51 被阅读0次

    序言:

    树莓派作为时下流行的DIY平台,python作为流行的编程语言,玩树莓派是一种态度,写python代码是一种生活情趣。

    周五是个好日子,因为周末来了。

    忙碌了一周,周五休息一下,玩玩树莓派,学习python,让大脑放个假。

    闲话少叙,用双色LED点亮我们的python之旅吧。

    一、原理

    LED为共阴极的红绿双色LED,一共三个引脚,分别是地(GND,接口标号为-)、红色灯控制脚(R,接口标号无,为中间引脚)、绿色LED控制脚(G,引脚标号为S)树莓派GPIO输出高电平点亮LED,GPIO输出低电平熄灭LED。双色LED外观如下图所示。

    双色LED外观

    二、连线

    树莓派与双色LED连线

    三、编程

    旨在实现点亮(闪烁)、呼吸灯(PWM亮度控制)。

    1.用Putty远程到树莓派登录后,输入命令新建一个py。

    nano colorledcontrol.py

    2.编辑代码如下。代码比较简单,不写注释了。

        编辑过程不表,注意使用tab来缩进代码,而不是用空格键(space key)。另外,要经常使用快捷键CTRL+O保存代码。

        注意不要按CTRL+Z来撤销输入,没有这个功能,后果很严重...没有保存的修改会丢的。

    #encoding = utf-8

    import RPi.GPIO as GPIO

    import time

    # LED IO: GPIO5>R, GPIO20>G

    LED_RED = 5

    LED_GREEN = 20

    def ledinit():

            GPIO.setmode(GPIO.BCM)

            GPIO.setwarnings(False)

            GPIO.setup(LED_RED,GPIO.OUT)

            GPIO.setup(LED_GREEN,GPIO.OUT)

            GPIO.output(LED_RED,GPIO.LOW)

            GPIO.output(LED_GREEN,GPIO.LOW)

            #默认关闭LED

    #LED闪烁函数:实现红绿LED交替点亮,闪烁次数可定义

    def ledblink(times):

            for i in range(0,times):

                    GPIO.output(LED_RED,GPIO.HIGH)

                    GPIO.output(LED_GREEN,GPIO.LOW)

                    time.sleep(1)

                    GPIO.output(LED_GREEN,GPIO.HIGH)

                    GPIO.output(LED_RED,GPIO.LOW)

                    time.sleep(1)

            GPIO.output(LED_GREEN,GPIO.LOW)

            GPIO.output(LED_RED,GPIO.LOW)

    #红色LED呼吸灯函数

    def lednotify(times):

            duty_cycle =[0,10,30,50,70,90,100]

            duration = 100 # unit: ms. duration for each duty cycle

            notifyled = GPIO.PWM(LED_RED,2000)

            notifyled.start(0)

            for i in range(0,times):

                    #darkness>lightness

                    for j in range(0,len(duty_cycle)):

                            notifyled.ChangeDutyCycle(duty_cycle[j])

                            time.sleep(0.001*duration)

                    #lightness>darkness

                    for j in range(0,len(duty_cycle)):

                            notifyled.ChangeDutyCycle(duty_cycle[len(duty_cycle)-j-1])

                            time.sleep(0.001*duration)

            notifyled.stop() #停止呼吸灯

    #如果是直接运行本py程序,执行以下代码。如果是被别的py程序调用,则以下代码不执行。

    if(__name__=="__main__"):

            ledinit()

            while True:

                    n = int(input("输入LED闪烁的次数:"))

                    lednotify(n)

                    #ledblink(n)

                    key = input("输入q退出程序,其它按键继续!:")

                    if(key =='q' or key == 'Q'):

                            GPIO.cleanup()

                            break

    四、调试

    由于是使用PuTTY远程到树莓派使用nano编程。为了避免频繁修改代码需要打开/关闭nano编辑器,开了两个Putty客户端,一个用于编辑代码,一个用于命令行运行代码。

    nano编写的py程序默认没有执行权限。使用命令chmod 744  *.py修改即可。

    chmod 744 colorledcontrol.py

    运行程序:

    python3.5 colorledcontrol.py

    双开PuTTY界面如下。程序运行良好,可以控制LED。

    双开PuTTY

    参考资料

    1.fhqlongteng.树莓派 RPI.GPIO 使用手册.   

    2.IT小陈.Arduino学习(四) 双色LED实验.

    相关文章

      网友评论

          本文标题:在树莓派上用python程序控制双色LED灯闪烁

          本文链接:https://www.haomeiwen.com/subject/upqrmqtx.html