利用树莓派,学习python快乐之旅(2):求救信号灯

2020-02-275901
AI 快速预览详细 收起
本文介绍了如何使用树莓派和Python编程实现摩尔斯码SOS求救信号灯。首先,通过控制LED的亮灭时间和间隔,实现了基本的SOS信号。然后,通过for循环和while循环优化了代码,使其更加简洁和高效。最后,通过定义函数进一步简化了代码。整个过程适合初学者动手实践,提升编程技能。
         对于摩尔斯码,大家都不陌生,尤其是对于海上航行的"SOS"求救信号,更为人们所熟知,根据摩尔斯码的规划,26个英文字母均有对应的信号指示,如"S"为三短“滴”,"O"为三长“哒”,根据信息的长短规律,人们就可知道捕获的信号是什么内容,并由此做出相应的反应,如是求救,及时施救。利用树莓派,学习python快乐之旅(2):求救信号灯图1
       在树莓派的模块化、积木式的语句中,这一功能很好实现,如果利用树莓派自带的thonny  python 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)
这里需要注意的是:第一循环指令后面一定要冒号,第二循环体内指令一定要缩进。
      在学习求教信号灯的过程中,我尝试了字母的大小写,体验到调入模块的指令名称一定要大写,并且指定端口时包括端口号的指令就是调入的指令,也要大写;循环体内指令一定要缩进!
     讲课的郎老师细心地截屏,标注要点发给我们

利用树莓派,学习python快乐之旅(2):求救信号灯图5
    此程序还可以优化。
利用树莓派,学习python快乐之旅(2):求救信号灯图4
但是,程序还是有些长,可不可以再改进呢?,这时我们用到了"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)

到此,优化程序并没有结束,我们还可以定义函数和调用函数的形式改进程序。

利用树莓派,学习python快乐之旅(2):求救信号灯图3
这样,在调用时,三次blink的指令,我们就可以用 di或da这样的函数名称来代表了,大家看,一段冗长的程序就被我们精简的很短一段了。
from gpiozero import LED
from 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)
利用树莓派,学习python快乐之旅(2):求救信号灯图2
程序运行结果如下:




创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(2)
DFrJ5KYVQaH
DFrJ5KYVQaH
贴子,有个错误。sleep(3t)是个错误语句
DFrJ5KYVQaH
DFrJ5KYVQaH
马老师的贴子,真是好,向你学习
- 没有更多了 -