|
本帖最后由 点点&木木 于 2019-4-12 09:36 编辑 如何使用几行代码中的线程在类似Arduino的板上以不同的速率闪烁多个LED...... Zerynth的魔力!
这个项目中使用的东西 硬件组件 电阻1k欧姆 × 3 低功率LED × 3 面包板(通用) × 1 跳线(通用) × 1 粒子光子 × 1 介绍
在本教程中,我将向您展示如何使用Zerynth在类似Arduino的板上以不同的速率闪烁多个LED 。 闪烁一个LED被称为“嵌入式设备的Hello World”...但是使用Zerynth我们可以让它变得更有趣。我们可以使用许多分离的线程在几行代码中以不同频率闪烁许多LED ...... 是的,你已经读过了:我们可以在类似Arduino的板上使用线程!没有更令人毛骨悚然的单循环逻辑代码,典型的命令式编程。Zerynth 允许纯线程驱动实现! 第1步:为什么使用Zerynth
浏览网页,您可以看到如何使用 loop()函数中的 delay()来闪烁多个LED 。如果你想一次闪烁它们或者你想一个接一个地闪烁或者做其他简单的效果,这个逻辑就没问题了。 但是如果你想以不同的速率闪烁LED怎么办?这个问题几乎每天都出现在Arduino论坛上,这就是delay()函数没有真正帮助的地方。实际上,在Arduino中使用delay()有副作用--Arduino没有做任何事情。要使两个或多个“动作”彼此独立运行,您不能使用delay()。 要解决这个问题,有许多解决方案,或多或少难度: 使用millis()[ link] 使用表驱动方法[ link] 使用有限状态机逻辑[ link] 然而,设计人员和非程序员用户对在微控制器中实现这些功能的困难感到沮丧。他们只是希望他们的原型和产品能够运作。 为了解决这些问题,Zerynth支持Python的所有最常用的高级功能,如模块,类,多线程,回调,定时器和异常,以及一些与中断,PWM,数字I / O等自定义硬件相关的功能。。 Zerynth是一个易于使用的开发套件,用于为物联网准备的交互式对象的高级设计。Zerynth 由跨平台IDE,移动应用程序和在各种平台上运行的虚拟机组成。借助Zerynth的 创意,设计师和专业人士可以使用Python开发Arduino DUE,ST Nucleo和大多数Particle产品,以及使用PC和移动编程典型范例和功能的类似主板。 第2步:安装
你需要: 3 x1kΩ电阻 3个低功率LED 1个面包板 一些跳线 Zerynth工作室。无论你使用哪种操作系统,Zerynth都会运行!只需下载包并安装它。 Arduino DUE或ST NucleoF401RE或Particle(以前称为Spark)Core。无论您使用哪种主板,Zerynth都是多板兼容的! 要构建LED电路,请将电阻器的一端连接到数字引脚。将LED的长腿(正极,称为阳极)连接到电阻的另一端。将LED的短腿(负极,称为阴极)连接到GND。 第3步:克隆Zerynth示例
使用Zerynth 非常简单!这是一个很好的入门教程。 安装Zerynth之后,您可以打开示例浏览器(图像中的第1步),从中可以“克隆” Zerynth 官方示例。选择名为“Multi Blink”的示例(步骤2)并克隆它(步骤3)。 此示例显示如何使用Zerynth 线程驱动具有不对称和不同闪烁速率的三个LED。它的代码非常简单,有很多评论。只是几个笔记。 运行脚本后,将创建三个线程(加上主线程,始终可用),每个线程运行一个特定的blink函数实例,具有不同的参数。 Zerynth中的每个线程都是一种独立且并行的进程,可以在您的主板上自主运行。线程需要将函数作为定义的输入来执行。相同的函数可以通过各种线程实例化,使您可以编写非常简洁和可读的代码。使用线程,您可以设计算法架构,假设并行性是典型的高级别。有关ZerynthVirtual Machine的更多信息,请参阅 此外,由于Python参数传递,可以为函数输入定义默认值。通过这种方式,您可以在不指定函数所需的所有输入的情况下启动线程,默认值将填充漏洞。在这种情况下,'blink'后面的所有参数都作为参数传递给函数。 第4步:让我们变硬!
让我们继续下一步:克隆示例“ 传感器驱动的多次闪烁” 此示例显示如何驱动各种行为,将通过ADC获取的模拟信号作为输入。特别地,所实现的脚本驱动基于所获取的模拟信号计算的三个不同频率的三个LED。 如果您仍然不满意,请看一下这个项目:您将制作一个简化的类似于仪器的仪器,当您在红外接近传感器上挥手时,它会改变播放的音高。此外,您可以轻松改变“节拍”的长度并同时驱动各种闪烁的LED(看似)......这是多线程的神奇之处! 当然你也可以用Arduino(C / C ++)来做...) --- 原理图 带Zerynth的多个闪烁LED
代码 # Initialize the digital pins where theLEDs are connected as output pinMode(D2,OUTPUT) pinMode(D3,OUTPUT) pinMode(D4,OUTPUT) # Define the 'blink' function to be used bythe threads # timeON and timeOFF are optionalparameters, used as default if not specified when you call the function def blink(pin,timeON=100,timeOFF=100): while True: digitalWrite(pin,HIGH) # turn the LED ON by making the voltage HIGH sleep(timeON) # wait for timeON digitalWrite(pin,LOW) # turn the LED OFF by making the voltage LOW sleep(timeOFF) # wait for timeOFF # Create three threads that executeinstances of the 'blink' function. thread(blink,D2) # D2 is ON for 100 ms and OFF for 100 ms, the default values of timeON antimeOFF thread(blink,D3,200) # D3 is ON for 200 ms and OFF for 100 ms, the default value of timeOFF thread(blink,D4,500,200) # D4 is ON for 500 ms and OFF for 200 ms |
| 点赞 |
微信公众号
手机版