欢迎光临散文网 会员登陆 & 注册

【ProtoPie Connect 教程】第4课 - Arduino第2节:玩转自编Sketch代码

2022-10-14 16:54 作者:ProtoPie  | 我要投稿


引言

在Arduino第1节课程中,我们展示了通过Blokdots把Arduino连接到Pie上实现互动的过程。这个过程十分简单,实现起来也挺快,但只是这样连接起来使用的话,还是存在一些问题。比如说,按钮按下的判断反馈与实际情况相反了——没按下按钮时Blokdots报回1,而按钮已经按下时Blokdots却报回0。此外,旋转编码器转得太快时,还可以观察到一个被称为“反弹”的现象:编码器按照正向旋转、计数应该增大时,实际却得到了计数减小的结果;反之编码器反向旋转、计数应该减小时,实际却得到了计数增大的结果。

我们可以通过反接编码器的接地(GND)和供电(+)连接线来解决第一个问题,然后通过小心旋转旋钮、避免把旋转编码器转得太快来解决第二个问题。但毕竟这治标不治本,要从根本上解决这两个(以及更多其它的)问题,可以通过自行编写Arduino代码来实现。

但是… 写代码令人望而生畏!

的确,写代码的工作令人望而生畏,尤其对于设计师来说更是如此。幸运的是,网上有琳琅满目的Arduino代码范例可供参考,在Arduino圈子里,我们把用于Arduino的成品代码称为Sketch代码,实际上我写的Sketch代码很大程度上是基于[这篇文章](https://lastminuteengineers.com/rotary-encoder-arduino-tutorial/#:~:text=A rotary encoder is a,the knob is being rotated.)中学到的内容来写(chao)的。

其实不用太担心!在这个教程中你并不需要写任何代码,这个教程的目的也并不是教你怎么写代码,直接用我已经写好的Sketch代码就好了。这个教程的重点在于让你了解如何用Arduino的Sketch代码来与ProtoPie Connect一起工作,共同完成所需的设计。

学习内容

在本教程中,我们会覆盖以下知识点:

  • 与ProtoPie Connect进行协同工作时需要留意的特定代码细节

  • 验证代码正确性并上传到Arduino开发板中

  • 在ProtoPie Connect中配置并启用Arduino插件

本教程约需15-20分钟完成。

所需资源

  • 按照上一课所教的方式,正确连接Arduino和两个编码器

  • 下载并安装Arduino软件

  • 下载并解压以下Arduino Sketch代码:

    使用编码器操作的空调遥控器.zip

  • 启动Arduino软件并将下载的Sketch代码复制粘贴进去:

我们开始吧!

如果以上步骤都完成了,那就跟随以下视频内容进行操作吧!

参考

在视频中,我特意指出在编写与ProtoPie Connect共同工作的Arduino Sketch代码时需要记住的两个要点。现在我把这两点单独列在下面以便参考。

正确设置波特率

在Connect的Arduino插件中选择的波特率(即串行连接上检测数据更新的频率)要与代码中使用的波特率一致。

将消息发送到ProtoPie Connect

ProtoPie Connect不断搜索写入到串行连接上的消息,因此在代码中使用Serial.print()Serial.println()就可以将消息发回到Connect上。对于没有值的消息,只需要按如下所示的方式将消息名称输出到串行连接上:

  • Serial.println(*<消息名>*),如:Serial.println("TEMP_UP");

对于带有值的消息,需要用两个竖线符号(|)分隔消息名称和消息值。

  • 如:Serial.println("SET_TEMP||21");

ProtoPie Connect会以同等模式识别和接收这条名为SET_TEMP的消息,并得到21这个消息值。

如果要在将变量作为消息值,在Arduino代码中就不能将这两者放在同一行里了。比如以下例子就不会起作用:

  • Serial.println("SET_TEMP||" + temp);

这种情况下需要用两行代码来实现,先用Serial.print()实现第一部分,再用Serial.println()实现第二部分。例如:

  • Serial.print("SET_TEMP||");

    Serial.println(temp);

这两个语句的区别在于,Serial.print只将指定内容写入到串行连接上,而Serial.println 除了写入到串行连接上之外还在写入内容的末尾自动添加了一个回车换行符以表示这是一行的结尾,或者说从ProtoPie Connect的视角来看,这才是一条已发送的完整消息。

ProtoPie Connect在对消息执行操作之前会一直等待一个回车换行符输出到串行接口上,基于这一点,在编写代码时就可以将一条消息分为多个部分,分别用Serial.print()语句来发出,发到最后一条消息时再使用Serial.println()语句表示整个消息已经完全发送到PotoPie Connect上。

  • 例如:

    Serial.print(message);

    Serial.print(”||”);

    Serial.println(value);


【ProtoPie Connect 教程】第4课 - Arduino第2节:玩转自编Sketch代码的评论 (共 条)

分享到微博请遵守国家法律