更多的巨蟒与闪闪发光的Lumidrive!金沙线上娱乐场

上周,我们看了一下在新的LumiDrive LED驱动器上使用数字管脚。本周,我们将使用模拟管脚,看看我们能不能用这两种方法把东西组合起来!

受欢迎的 最喜欢的

上周,我们开始搜索Sparkfun的新LumiD金沙线上娱乐场rive LED驱动程序,并在板上弹出可用的数字插脚后播放一点。本周,我们来看看模拟管脚,把它们作为输入,看看我们能不能用数字和模拟插脚把一些东西放在一起。

如果你没有抓住它的释放,我来给你介绍一下金沙线上娱乐场发光二极管驱动器.该板采用SAMD21G-AU单片机,为了运行python,小巨兽电路Python,等。

卢米德

发光二极金沙线上娱乐场管驱动器。如此强大。如此优雅。那么红。

让我们深入研究LumiDrive上的模拟输入。我们需要做的第一件事是导入合适的库。就像我们进口数码数码相机用于读取和控制连接到数字管脚的事物的库,这次我们需要导入类比图书馆。

导入类比,然后我们用这个lineanalog in=analogio.analogin(board.a3)来表示它。

还有另一种方法可以做到这一点,上周我没有讨论过。与Arduino的编程不同,用巨蟒(或微丝,或者circuitpython)您不需要导入整个库。如果只使用该库中的单个元素,也可以这样做:

从类比中导入类比,现在我们的草图知道了类比的来源,所以我们不需要指导它去哪里寻找。我们可以使用Analog_-in=Analogin(board.a3)

高值电位器

如果你来自阿尔杜诺(或C)世界,你会期望从你的电位计来的模拟值在0-1023范围内-你会是正确的。然而,这里的情况有点不同。您的模拟读数将在0-65535范围内(假设为16位)。所以有一个更高的分辨率。

比如说,我们只是想看看我们的装饰锅会有什么价值。嗯,首先,当然,我们需要连接我们的电位计。连接到LumiDrive很简单,正如你所期望的。你的电位计的外脚转到3.3V,接地,用你的中腿去模拟管脚。在这种情况下,我使用的是A3。

面包板设置

将数字输入添加到D8和D9,和A3的模拟输入

这个品值调用将返回电位计的原始数据,所以简单的素描,我们可以看到我们的电位计告诉我们什么。

import time import board import analogialogue_in=analogio.analogian(board.a3)只需读取pin valuedef get_pin_value(pin):返回pin.valuewhile true:print(get_pin_value(analogular_in))time.sleep(0.05)

将草图保存到lumidrive(作为main.py或code.py)后,你可以打开一个串行终端,你应该看到类似的东西。

模拟读出

从我们的电位计返回模拟值

注意!尽管MU有自己的串行窗口,LumiDrive还没有被它识别出来,会告诉你:

找不到连接的设备。

确保设备已插入此计算机。

废话废话其他重要的事情。

暂时,我只是在用Teraterm。你应该对Teraterm没有问题,Coolterm或者你最喜欢的终端程序。

现在您可能注意到这个值永远不会降到零。旋转时的分辨率为65535,还有一点点浮漂,这是意料之中的。有办法消除这种情况,但对于一个完全不同的职位来说,这是个问题。

变化

电位计是达到目的的一种手段。也就是说,从电位计返回的值通常不如我们对这些值所做的那样令人兴奋。让我们考虑一些想法。

假设我们想知道通过电位计的电压。因为我们是3.3V的设置,我们要从我们的罐子里取回来的价值,乘以3.3,然后除以我们的电位计的全范围。所以这不仅仅是一个数字流,让我们告诉临时观察者我们给他们看的是什么。试试这个。

import timeimport board import analogio analogin=analogio.analogin(board.a3)读取pin值,计算3.3V电路上的电压def get_voltage(pin):return(pin.value*3.3)/65535,而true:print(“电压为”,(获取电压(模拟输入)))时间。睡眠(0.05)

请注意,要将字符串和变量一起打印,你只需要在两者之间加一个逗号。如果不是电压,要更改RGB值吗?就像电压指示器一样,您只需将管脚值乘以所需范围的数字(在本例中为256),然后除以电位计的分辨率,65535。

import timeimport board import analogialogue_in=analogio.analogian(board.a3)将pin值映射到0-255def get_color(pin):return(pin.value*256)/65535,而true:print(“color value is”,(获取颜色(模拟输入)))时间。睡眠(0.05)

浮动

返回0-255范围内的值。但是来吧,您的LED对(0,255,87.6239)。

当然,这给了我们一个浮球,当我们真正想要一个整数时。有几种不同的方法可以做到这一点,如果你有最爱,或者你认为我的方式很糟糕,请告诉我!对于这个例子,我将使用数学库中的truncate命令。记得,我们可以导入整个数学库,我们需要的部分。

import time import board import analogiofrom math import truncanalog_in=analogio.analogin(board.a3)将pin值映射为0-255def get_color(pin):仅返回整数这次返回trunc((pin.value*256)/65535)如果使用“import math”,这需要返回math.trunc(),而true:print(“颜色值为”,(获取颜色(模拟输入)))时间。睡眠(0.05)

整数

啊,现在差不多了。眼睛能看到的整数。

从银幕进入野外

我们只在串行终端窗口中看到了返回给我们的值。让我们尝试做一些不需要计算机屏幕来显示结果的事情。

我们上周的三个数字输入,以及本周的模拟输入,让我们试试这个。因为我刚刚在上周的试验板上添加了组件,我在D8上还有一个黄色的瞬时按钮,还有D9上的绿色瞬时按钮,我只是在A3上加了一个电位计。我们也将使用d6,因为它在那里。我想创建一个执行以下操作的电路:

如果我按下绿色按钮,Lumini 2英寸环亮起绿色;按下黄色按钮,戒指变黄了;按下车载按钮,戒指会变红。我很确定这和我们上周做的差不多。但我也希望它闪烁,我想用我的电位计控制眨眼的速度。让我们试试这个:

import adafruit_dotstar LED库import mathimport timeimport board import digitalio import analogio设置板的蓝色状态led to blinkled=digitalio.digitalinout(board.d13)led.direction=digitalio.direction.outputanalog_in=analogio.analogin(board.a3)设置板的板载按钮6=digitalio.digitalinout(board.a3.d6)按钮6.direction=digital io.direction.input button6.pull=digital io.pull.up将数字IO引脚设置为输入按钮button8=digital io.digitalinout(board.d8)按钮8.direction=digital io.direction.input button8.pull=digital io.pull.up button9=digital io.digitalinout(board.d9)按钮9.direction=digital io.direction.input button9.pull=digitalio.pull.up这两个变量应调整以反映您拥有的LED数量和您想要的亮度。num u像素=40 3”环有60个,2“环有40个,1“环的亮度在0.0和1.0之间设置为20亮度=0.25,但建议不要在全亮度下运行一些标准颜色。黑色=(0,0,0)红色=(255)0,0)黄色=(255,150,0)橙色=(255,40岁,0)Green =(0)255,0)TEAL=(0);255,120)青色=(0,255,255)蓝色=(0)0,255)紫色=(180,0,255)洋红=(255,0,20)白色=(255,255,255)这将创建dotstar库的实例。像素=adafruit_dotstar.dotstar(board.sck,莫西数字像素,亮度=亮度,auto_write=false)此函数接受颜色和延迟,并用该颜色填充整个链。如果使用多个颜色填充一行,则给出延迟。def color_fill(颜色,wait):像素。填充(颜色)像素。show()时间。sleep(等待)这里是操作发生的位置while true:if not button8.value:led.value=true color_fill(黄色,0)elif not button9.value:led.value=true color_fill(绿色,0)elif not button6.value:led.value=false color_fill(红色,0)否则:led.value=假颜色_填充(黑色,0)时间。休眠((模拟_输入值*2)/65535)延迟由电位计读数颜色_填充(黑色,0)时间。休眠((模拟输入值*2)/65535)延迟由电位计读数决定。

在上一个例子中,您会注意到一些事情。第一个问题是,虽然我们定义了函数来获取前面所有示例中的模拟值,我们不是在这一个。阅读我们的睡眠时间变量,我们读了模拟输入值在我们的虽然真实循环。我这样做是因为python不能将函数转换为float,以及睡眠时间调用需要一个float作为其参数。第二个,为我们的睡眠时间,我把我们的类比素值除以2,然后除以65535。这将我们的最大睡眠时间设置为两秒,就像前面例子中乘以3.3得到的电压范围一样。

等待,还有更多!

但这周不行。再一次,这主要是针对我们(包括我自己)中那些在物理世界中没有做过很多Python编程的人。我相信有更好或更有效的方法来做我刚刚做的事情,只要我还在呼吸,我还在学习,线上金沙指定注册网址我很想在评论中看到你的建议和改进。

我还记得上周说过,如果一切顺利,我会尝试在一些实际应用或项目中使用所有这些。金沙线上娱乐场好,一切顺利,但不是很好。我对如何在建筑中使用所有这些有着丰富的想法,但这周时间不够,所以这将是下一天的帖子。


评论2评论

  • 这个看起来很酷

  • 罗布写得又好又有见地,谢谢!像这样解释一些基础知识,一定会让我有很多时间的安全;-)还有……为使用Micropython代码库(http://micropython.org)而不是其他一些衍生的python风格欢呼三声…

相关帖子

指环灯之王

ESP32上的Micropython入门

探索PCDUINO

近期职位

春季清仓大甩卖!

标签


所有标记