来C站这么久了,最近在初学树莓派Raspberry Pi PIco .所以想在C站记录一下自己的学习过程,到时候能回头看看自己的学习之路。今天学习了如何新建全局变量与按键输入模式,和IO的输出模式配置,还有顺便学习了如何新建子程序。
今天的目标就是点亮一个LED灯,然后用按键来控制灯闪烁的频率。废话不多说了,上程序。
#LED灯闪烁(从新上电会直接运行)
#定义输入IO函数
from machine import Pin
# from multiprocessing import Process
#调用延时函数
import time
import utime
key1=Pin(15,Pin.IN,Pin.PULL_UP)
# key=Pin(15,Pin.IN,Pin.PULL_UP)
led = Pin(25, Pin.OUT)
#外部中断
#“def 子程序名(变量or“self”)” self代表C中的void <----定义子程序
#调用的时候如果没有返回值可以直接“子程序名()”调用
def external_interrupt(key1):
#定义全局变量(没有global则为局部变量)
#必须放到对应子程序里面
global keydel
# 消除抖动
utime.sleep_ms(100)
# 再次判断按键是否被按下
if key1.value() == 0:
keydel += 100;
if keydel >500:
keydel=100
print('The button is pressed')
print("{:3.1d}".format(keydel))
while key1.value() == 0:
utime.sleep_ms(1)
if __name__ == '__main__':
#外部中断
# KEY.irq(handler,trigger)
# handler:中断执行的回调函数
# trigger:触发中断的方式,分别为Pin.IRQ_FALLING(下降沿触发)、
# Pin.IRQ_RISING(上升沿触发)、Pin.IRQ_LOW_LEVEL(低电平触发)和
# Pin.IRQ_HIGH_LEVEL(高电平触发)四种
# 定义中断,下降沿触发
key1.irq(external_interrupt, Pin.IRQ_RISING)
keydel=100
while(1):
# led点亮
led.value(1)
utime.sleep_ms(keydel)
# led熄灭
led.value(0)
utime.sleep_ms(keydel)
# #普通按键
# if(key1.value() == 0):
# utime.sleep_ms(100)
# if(key1.value() == 0):
# while(key1.value() == 0):
# led.value(1)
# keydel+=100
# print("{:3.1d}".format(keydel))
# if(keydel>=1000):
# keydel=0
# else :
# led.value(0)
控制灯闪烁的时间使用了一个全局变量。然后如果使用普通按键的话会由于延时函数的影响按键会失灵。所以我使用了外部中断来做按键的识别程序,其实按照我平时的编程习惯,我不会使用延时函数的,一般都是使用定时器中断来使标志位加一来做延时函数,这样做的话不会由于延时函数在运行的时候其他程序会受影响。但是由于初学Python,而且使从C中转换过来,所以需要来点基础的学习一下。下一步学习一下使用其他功能,一步一个脚印学下去。
图片和程序有一部分是在网上学习后编写下来的,如有侵权,请私信联系删除,感谢。