利用树莓派,学习python快乐之旅(2):求救信号灯
对于摩尔斯码,大家都不陌生,尤其是对于海上航行的"SOS"求救信号,更为人们所熟知,根据摩尔斯码的规划,26个英文字母均有对应的信号指示,如"S"为三短“滴”,"O"为三长“哒”,根据信息的长短规律,人们就可知道捕获的信号是什么内容,并由此做出相应的反应,如是求救,及时施救。在树莓派的模块化、积木式的语句中,这一功能很好实现,如果利用树莓派自带的thonnypython Ide软件应该如何实现呢,程序如下:
按顺序执行:from gpiozero import LED
from time import sleep
# SOS滴=1t,嗒=3t,滴嗒间=1t,字符间=3t,单词间=7t
t = 0.2
led = LED(5)#
led.on()#第一个短“滴"S
sleep(t)
led.off
sleep(t)
led.on()
sleep(t)
led.off
sleep(t)
led.on()
sleep(t)
led.off
sleep(t)
sleep(t*3)#暂停3个单位时间t
led.on()#长”哒“o
sleep(t*3)
led.off
sleep(t*3)
led.on()
sleep(t*3)
led.off
sleep(t*3)led.on()
sleep(t*3)
led.off
sleep(t*3)
sleep(t*3))#暂停3个单位时间t
led.on()##第二个短“滴"S
sleep(t)
led.off
sleep(t)
led.on()
sleep(t)
led.off
sleep(t)
led.on()
sleep(t)
led.off
sleep(t)
sleep(t*3))#暂停3个单位时间t按循环结构执行
大家注意到,无论是”S"还是“O",都是有三次相同信号组成,可不可以简化呢?这里我们用到for循环”for i in range (3):"即循环变量为i ,次数为3
这样我们就可以把S或O的相同语句放在循环里:
from gpiozero import LED
from time import sleep
# SOS滴=1t,嗒=3t,滴嗒间=1t,字符间=3t,单词间=7t
t = 0.2
led = LED(5)#
for i in range (3):
led.on()
sleep(t)
led.off
sleep(t)
sleep(t*3)
for i in range (3):
led.on()
sleep(t*3)
led.off
sleep(t*3)
sleep(t*3)
for i in range (3):
led.on()
sleep(t)
led.off
sleep(t)
sleep(t*3)
sleep(t*3)
这里需要注意的是:第一循环指令后面一定要冒号,第二循环体内指令一定要缩进。
在学习求教信号灯的过程中,我尝试了字母的大小写,体验到调入模块的指令名称一定要大写,并且指定端口时包括端口号的指令就是调入的指令,也要大写;循环体内指令一定要缩进! 讲课的郎老师细心地截屏,标注要点发给我们
此程序还可以优化。但是,程序还是有些长,可不可以再改进呢?,这时我们用到了"while "循环语句:
from gpiozero import LED
from time import sleep
# SOS滴=1t,嗒=3t,滴嗒间=1t,字符间=3t,单词间=7t
t = 0.2
led = LED(5)# .
while True:
led.blink(on_time=t, off_time=t, n=3, background=False)
# 亮的时间,灭的时间,闪烁的次数,是否后台运行
sleep(t*3)
led.blink(on_time=t*3, off_time=t, n=3, background=False)
sleep(t*3)
led.blink(on_time=t, off_time=t, n=3, background=False)
sleep(t*3)
sleep(t*7)
到此,优化程序并没有结束,我们还可以定义函数和调用函数的形式改进程序。
这样,在调用时,三次blink的指令,我们就可以用 di或da这样的函数名称来代表了,大家看,一段冗长的程序就被我们精简的很短一段了。from gpiozero import LEDfrom time import sleep
# SOS滴=1t,嗒=3t,滴嗒间=1t,字符间=3t,单词间=7t
t = 0.2
led = LED(5)# def di(led): global t led.blink(on_time=t, off_time=t, n=3, background=False)# 亮的时间,灭的时间,闪烁的次数,是否后台运行def da(led): global t led.blink(on_time=3t, off_time=3t, n=3, background=False)while True:
di(led)
sleep(t*3)
da(led)
sleep(t*3)
di(led)
sleep(t*3)
sleep(t*7)程序运行结果如下:https://v.youku.com/v_show/id_XNDU2MzgxODM2OA==.html,
马老师的贴子,真是好,向你学习 贴子,有个错误。sleep(3t)是个错误语句
页:
[1]