python玩转树莓派(五) 用更好的方式写python程序

python玩转树莓派(五) 用更好的方式写python程序,第1张

那上篇文章的 呼吸灯 举例

这个写法下, 如果我们使用ctrl+c打断了脚本的运行, 该如何清理GPIO释放资源呢?

我们如何能把它当做一个模块供其他模块调用呢?

我们不防按如下的方式修改这个程序

是不是很像arduino的写法?

#include<reg51.h>

#define uint unsigned int

#define uchar unsigned char

sbit LED0=P1^0// 设置1^0为led灯端口

void init()

void delay(uint t)

{

while(--t)

}

void huxi() //呼吸灯程序

{

uint CYCLE=700,PWM=0//定义周期并赋值

while(1) //主循环

{

LED0=1

delay(60000) // 可以看到熄灭的过程

for(PWM=1PWM<CYCLEPWM++) //PWM_LOW表示低电平时间,这个循环中低电平时长从1累加到CYCLE(周期)的值,即600次

{

LED0=0 //点亮LED

delay(PWM)//延时长度,600次循环中从1加至599

LED0=1 //熄灭LED

delay(CYCLE-PWM)//延时长度,600次循环中从599减至1

}

LED0=0

for(PWM=CYCLE-1PWM>0PWM--) //与逐渐变亮相反的过程

{

LED0=0

delay(PWM)

LED0=1

delay(CYCLE-PWM)

}

}

}

void ctrl (uchar dat) //处理函数

{

switch(dat)

{

case '0':LED0=1break

case '1':LED0=0break

case '2':huxi()break

default: break

}

}

void main()

{

init()

while(1)

{

uchar Tmp //定义临时变量

if(RI)//判断是接收中断产生

{ RI=0 //标志位清零

Tmp=SBUF

ctrl(Tmp)//读入缓冲区的值

}

LED0=0

delay(10000)

LED0=1

delay(10000)

}

}

void init()

{

SCON = 0x50 /* SCON: 模式 1, 8-bit UART, 使能接收 */

TMOD = 0x20 /* TMOD: timer 1, mode 2, 8-bit reload*/

TH1=TL1= 0xFD /* TH1: 9600波特率 @ 11.0592MHz */

TR1 = 1 /* TR1: timer 1 run */

EA= 1 /*打开总中断*/

// ES= 1

// TI=0

// RI=0/*打开串口中断*/

while (1)

{ LED0=0

delay(10000)

LED0=1

delay(10000)

}

}

机器人是什么?

机器人是具备一些与人或生物相似的智能能力的自动化机器,简而言之,就是“能自动工作的机器”。 类似人类的身体,机器人也是由几大“器官”组成:机器人的大脑——主控制器,机器人的眼睛、耳朵和触角——传感器,机器人的手、足——驱动器和执行器。 机器人种类有很多,按照用途可以分为工业机器人、农业机器人、教育机器人、军用机器人、医疗机器人、服务机器人等。

本文介绍的探索者D1机器人就是一款教育机器人。下面就跟着我一起来学习怎么使用它吧!

主控板

机器人的大脑——主控制器,是机器人的核心部件。不同的机器人所采用的主控制器可以是不同的,本文将介绍一种简单的主控制器——Arduino控制板。Arduino控制板(简称Arduino)是单片机中的一种,相当于一台微型计算机。Arduino是一种开源软、硬件,世界各地的人们根据不同的需要,开发出了以Arduino技术为标准的各种类型的控制板产品,上图所示是Arduino控制板中的一种,名字叫做Romeo。

编程环境: Mind+图形化编程软件

Mind+是一款基于Scratch 3.0开发的图形化编程软件,不仅适合中小学生的学习,而且还能为想提高自身技能的“创客”提供Arduino、 python/c/c++等高级编程语言的学习。支持 Arduino、micro:bit 等各种开源硬件,只需要拖动图形化程序块即可完成编程,让大家轻松体验创造的乐趣。

软件安装

从官网下载好安装包之后,双击安装包文件进行安装;

如果是新电脑,需要安装软件与硬件通讯的驱动程序,以管理员身份运行软件,在“连接设备”中一 键安装串口驱动。

官网下载地址:http://mindplus.cc

使用教程地址:https://mindplus.dfrobot.com.cn/

注意:本文所有项目都是在Mind+环境中的上传模式下开发。

打开Mind+软件,菜单栏右方选择上传模式。

探索者D1采用Romeo作为主控板,在Mind+扩展中选择Romeo套件。

添加完成后,Mind+指令区就会出现Romeo相关指令。

添加完成,首先来跑一个简单的小程序,点击菜单栏中的教程→示例程序,可以看到有许多示例代码,点击第一个“闪烁”代码,

回到Mind+主界面,在脚本区自动产生了一段代码。

连接主控板,上传程序,我们就会看到Romeo板上的led灯开始闪烁。(安装驱动,连接设备,上传程序等 *** 作请点击https://mindplus.dfrobot.com.cn/)

板子自带LED灯连接的针脚为13号数字针脚。

实现过程

准备好器材后,将LED模块连接到Romeo的PWM针脚上,注意接线颜色一一对应。如下图所示,LED连接了Romeo的PWM针脚13。

示例代码中的“闪烁”代码上传之后,就会看到LED模块开始闪烁。

交通灯

模拟交通灯实验,学习LED灯模块的使用方法。

学习目标:

学习LED灯的使用方法;

学习数字输出与数字信号;

熟悉Mind+编程环境;掌握编程环境基础 *** 作;

器材清单:

Romeo、USB数据线、红色LED、绿色LED

实现现象:

红灯与绿灯交替亮灭,实现对交通灯的模拟

知识点:数字输出与数字信号

所谓输出和输入是相对设备类型而言的,例如LED是输出电信号的设备,那么它就属于输出设备,点亮LED即为输出;而震动传感器是用来接收外界震动信号的,属于输入设备,那么接收震动信号即为输入。如果通讯讯号只有0(低电平)或1(高电平)两种状态,则称之为数字输出或数字输入,否则就是模拟输出和模拟输入(模拟输入输出本文后面会介绍)。当然,有些设备,如LED和电机既可以当作数字输出设备使用,也可以当作模拟输出设备使用。

高电平时点亮LED,低电平时熄灭LED,这种要么点亮要么熄灭,或者要么开要么关的信号在电子学中称为数字信号。数字信号通常用1或者0表示。1和0在主控器中的表现形式就是高电平(+5V)或低电平(GND)。需要注意的是,并不是所有高电平都可以点亮LED灯,或者所有高电平都可以开启开关,这与LED或者开关的具体结构有关,有的LED或者开关是需要通过低电平来开启的。在本课中,向LED输出1(高电平)表示点亮LED,向LED输出0(低电平)表示熄灭LED。

LED灯的连接方式

如上图所示是一个LED模块,它有黑、红、绿三根线。使用时,需要将LED连接在Arduino控制板的数字针脚。在Romeo控制板上,数字针脚共有14组,编号从0到13,每组数字针脚均由黑、红、绿三个针脚组成,正好与LED的三根线一一对应,如下图所示。因此,只要把LED的线按照对应的颜色与Romeo连接起来就可以了。

编写程序

将红色LED连接数字针脚2,绿色LED连接数字针脚3,根据设计中模拟交通灯的运行流程,可以编写出模拟交通灯的程序

交通灯运行流程:红灯亮;红灯灭,同时绿灯亮;绿灯灭,同时红灯亮……

本程序采用顺序结构进行编写,顺序结构即按照问题解决的顺序组织程序语句,顺序执行即按照自上而下的顺序依次执行程序语句。在本例中,需要先点亮红色LED,延迟1秒后熄灭,同时点亮绿色LED,延时1秒后熄灭。

模拟交通灯参考程序如下:

测试效果

单击Mind+界面上的“上传到设备”,当编程界面上方出现“烧录成功”提示后,表示程序已经成功上传到控制板。观察LED的闪烁效果是否符合预期,如有问题,逐一排查解决。

拓展提升

做一做:同学们每天过马路时看到的交通灯很可能与本课所做的不太一样,把实际见到的交通灯特点记录下来,并尝试编程实现。

会“呼吸”的灯

使用PWM功能控制LED灯模块,制作一个简单的呼吸灯实验

学习目标:

了解PWM的功能,能够识别控制板上支持PWM的针脚编号;

器材清单:

Romeo、USB数据线、LED

实验现象:

LED由灭逐渐变亮再由亮逐渐变灭,并一直循环

知识点:

PWM

Arduino端口的输入电压只有0V或5V,如果需要3V的输出电压该怎么办呢?在电路中加入串联电阻也许是个可行的方法,但是如果需要电压在1V、3V、5V之间不断转换呢?显然,用手工更换电阻或可变电阻的方式很不方便,此时就需要PWM来帮助实现这种功能了。

PWM(Pulse Width Modulation,脉冲宽度调制,或脉宽调制)是利用微处理器的数字输出对模拟电路进行控制以实现模拟输出的技术。Romeo有6个支持PWM的数字针脚,这些针脚标有“*”或“~”标记,分别是3、5、6、9、10和11号数字针脚。

PWM的输出值范围在0~255之间,而普通数字针脚的输出值只有0(低电平)与1(高电平)两个值。通过改变PWM针脚的输出值来控制LED,从而改变其发光强度。

模拟输出和模拟变量

在时间或数值上是连续的物理量称为“模拟量”,输出的量为模拟量即“模拟输出”。

在程序中使用PWM时,需要在Mind+中调用模块,如下图:

通过改变该模块中的针脚编号(第一个下拉框中可以设置)与输出信号模拟值(白色圆形区域可以填写数值)可以实现对PWM针脚的赋值。

在程序设计中,如果要实现针脚模拟值的依次递增,需要定义一个模拟变量,例如“k”,此处的模拟变量如同数学函数中的变量一样,并不是某一特定的数值,而是一个可变值。可以在Mind+指令区“变量”模块中进行创建,步骤如下:

在Mind+指令区中的“变量”模块中,单击“新建数字类型变量...”,出现悬浮窗口,变量名称命名为“k”,确定,指令区“变量”模块中就会出现“变量k”。同时,也可以使用“变量”模块中对变量k值 *** 作的其他指令。

我们需要LED灯一开始是灭的,所以这里将变量设置为0。

本实验LED连接在Romeo的PWM针脚3,将针脚3的模拟值设定为模拟变量k。

直到型循环结构

直到型循环结构是循环结构的一种,它由循环体、循环变量、循环终止条件三部分组成。直到型循环结构是先在执行了一次循环体之后,再对控制条件进行判断,当条件不满足时执行循环体,满足时则停止。 在制作呼吸灯的程序中,针脚模拟值需从0递增到255,再从255递减到0,因此可以使用循环结构来控制针脚模拟值的变化,以使程序简单高效。

在Mind+中,直到型循环结构位于指令区中的“控制”模块,通过添加循环终止条件与循环体来实现相应的循环功能。循环终止条件位于“运算符”模块中。

先执行循环体语句,每执行一次循环体就将模拟变量k的值赋给针脚3,然后将k值加1,之后再进行条件语句的判断,条件不满足时继续执行循环体,条件满足时跳出循环。

连接LED与Romeo

准备好器材后,将LED模块连接到Romeo的PWM针脚上,注意接线颜色一一对应。如下图所示,LED连接了Romeo的PWM针脚3。

编写程序

呼吸灯由灭变亮和由亮变灭是两个相反的过程,其中由灭变亮的程序参考如下:

完善程序,实现LED由灭逐渐变亮,再由亮逐渐变灭的发光效果。

将程序上传后,观察LED的发光效果是否符合预期。

拓展提升:

请尝试用一个控制板同时控制多个LED呼吸灯,以呈现出魔幻的呼吸效果


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12060560.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存