打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
MicroBlocks下say/graph对blink闪烁的奇怪影响

blink之于单片机,好比Hello World之于新编程语言。

绝大部分人的单片机学习是从blink开始的,当然也是从blink结束的。

blink的另一个作用,可以作为logger使用,随时把调试信息反馈回来,也就是程度执行到哪里了,可以用快闪、慢闪和长亮来跟踪,非常方便。

但是我在MicroBlocks下面blink的时候,被整迷糊了。一般来说,blink就两种思考方式:

1.循环执行“亮-等待-暗-等待”,实现blink;

2.循环执行“当前状态取反-等待”,实现blink;

在MicroBlocks下,ESP32的pin2对应板载LED,调试发现从数字引脚2读回来的值,永远都是false(因为确实没输入电压,就该是false,对应Arduino下LOW);我们不断设置它为true,读回来仍然是false。另外,当pin 2的LED当前状态是true(即HIGH),say、graph或给某个变量赋readdigital pin 2或not read digital pin 2,均可实现pin 2的LED状态反转;而如果pin2的LED当前状态是false,无论是否执行过read digital pin 2,都不能实现pin 2状态的反转。

这说明了什么呢?说明MicroBlocks的say很奇怪?

以下测试都没有在IO2上接3.3V电压。

实验一:LED常亮,不闪烁。无论set digital pin 2 to not read digitalpin 2或set digital pin 2 to not read digital pin 2,均不闪烁。

实验二:闪烁。亮10ms、暗500ms。说明readdigital pin 2一直返回false。这很正常。

以上的两个实验都好理解。下面奇怪的say开始了。

实验三(1):闪烁。亮10ms、暗500ms。say在取反?还是say独占时钟?

实验三(2):不亮,不闪烁。say独占时钟么?

实验三(3):不亮,不闪烁。say就是独占时钟?对比三(5),并非独占。

实验三(4):不亮,不闪烁。说明pin 2初态为true,只要say一次,就被取反;初态为false,say后不取反。

实验三(5):闪烁。第1个say没有读pin 2操作。且能说明say没有独占时钟。

实验四(1):闪烁。无论graph read digital pin 2或graph not read digital pin 2,效果相同。说明graph与say类似。

实验四(2):闪烁。

实验五:LED根本就没点亮!说明true后被立即false了。

晕不晕?如果理解成没接实际电压的不确定干扰,那么四(2)的true却被始终如一地反转了。

问题是,在不接真实导线时,要怎样才能判断出来当前LED是亮还是暗呢?

当然,不接真实导线给IO2电压,万无一失的闪烁,是直接自己设一个bool量,LED肯定会闪烁起来,不过现在迷惑的不是这个,而是不让说和画😜😜😜

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
MicroPython 玩转硬件系列2:点灯实验
#lastpost
手把手教你组装LED条屏
arduino 中断例程
过零双向可控硅光耦工作原理及实际应用MOC3063,MOC3041,TLP363J
开发Filter的一般过程以及Filter Graph的构建
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服