回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

【PinPong Board】mixpy图形化项目一:会学习的智能灯(输入输出模块深入探究) 简单

头像 xujh 2021.05.08 363 0

材料清单

  • pinpong board X1
  • led灯 X1
  • 杜邦线 X3

在上一期,我们学习了使用pinpong board的mixpy图形化模块的简单方法,今天,让我们一起用mixpy图形化模块和pingpong board做一个简单的案例,用到的输入输出图形化模块在上一期有,大家可以找到上一期文末的链接下载哦(记得电脑端才能看到下载)

先上视频

可以看到,当智能灯处于学习模式,它能自动记录灯的状态,切换回普通模式后,led灯就会循环呈现刚才学习(记录)到的状态。这个案例可以说很简单,也可以说略复杂,但事实上它不算是一个很新的案例。原理很简单,我们一起往下看。

project-image

第一个语句是导入库的自定义模块,这里面需要删掉多余的库,接下来需要定义三个引脚:led的模拟输出引脚(因为要控制亮度),按钮的数字输入以及旋钮的模拟输入。

project-image

接下来的操作大家应该很熟悉了,就是简单地判断按钮是否被按下,若按钮按下,我们让变量n增加一,之所以设定变量n,目的是后面要写一个按钮的通用算法,这样才能实现按钮按一次,灯的状态改变一次。

project-image

这里是程序最关键的部分了。刚才说过,我们定义了一个变量n,按钮每按下一次,变量n都会增加一次,当我们求n/2的余数,就会发现结果只有两个:0和1,当余数分别为0和1的时候,我们分别定义两种状态,这就实现了按钮每按一次,led灯状态改变一次,而不需要一直按着按钮,这也是非自锁按钮的通用算法之一。

接下来我们来具体看看两种模式。模式一是学习模式,我们用一个列表,不断把旋钮的值记录下来,形成“记忆”,当按钮再次按下,切换到常规模式,led灯反过来从列表中读取列表所记录的值,并以该值显示亮度。就这样,我们实现了led灯的“学习”功能。

代码
import time
import math
from pinpong.board import Board,Pin,Tone,ADC
(Board("uno")).begin()
n = 1
i = 0
mylist = []
led = Pin(Pin.D6, Pin.PWM)
btn = Pin(Pin.D8, Pin.IN)
adc1 = ADC(Pin(Pin.A3))
while True:
    if btn.read_digital():
        n += 1
        i = 0
        print(n)
        time.sleep(0.3)
    if n % 2 == 0:
        v = int((adc1.read() / 4))
        led.write_analog(v)
        mylist.append(v)
        i += 1
    if n % 2 == 1:
        for i in range(0, len(mylist), 1):
            led.write_analog(mylist[i])
            i += 1
            if btn.read_digital():
                break

上个完整代码,图形化模块文末附。

怎么样?学习完这个案例,对图形化模块是不是有了进一步的了解?对于输入输出是不是有了全新的认识。其实这是一个旧案例了,但是想通过这个案例告诉大家的是,简单的输入输出,简单的模块,简单的传感器,可以做出很多意想不到的功能。怎么样,你想到了其他优秀的输入输出类的案例吗?欢迎在评论区分享。

评论

user-avatar