我想将我的串行通信配置为没有奇偶校验,1个开始和2个停止位。 Serial.begin(speed, config)
状态的documentation:
(...)可选的第二个参数配置数据,奇偶校验和停止位。默认值为8个数据位,无奇偶校验,一个停止位。
文档还列出了可能的配置值。根据我(有限)的理解,我需要SERIAL_7N2或SERIAL_8N2来满足我的要求。 (我不确定数据位如何与我需要的1-start-bit相关。)
但是,我甚至无法编译,因为我不知道如何将该配置值提供给begin方法。 (我没有太多的Arduino / C ++经验。)
在我的代码中,我尝试了以下两种变体:
Serial.begin(9600, SERIAL_8N2);
Serial.begin(9600, "SERIAL_8N2");
我错过了什么吗?
其他信息:
Serial.begin(speed, config)
引入了最新的Arduino 1.0.2 IDE版本。
可以找到定义/实现begin方法的代码:
编辑:
根据PeterJ和borges的回复,以下变体是正确的。
Serial.begin(9600, SERIAL_8N2);
然而,它仍然无效。
我发现如果我将配置的电路板从我的Arduino Leonardo更改为Arduino Uno,则不会发生编译错误。
因此,它可能是只有一部分电路板发生的错误......或者它可能不受支持?!
编辑2:
现在已经解决了:)博尔赫斯的答案向我指出了正确的解决方案!
答案 0 :(得分:5)
你在评论中提到:(编辑:现在在标题中)
如果我将电路板从“Arduino Leonardo”改为“Arduino Uno”,我不会收到编译错误。
Arduino Leonardo在串行通信方面有一些特点:
Leonardo有一个微控制器(ATmega32U4),具有本机USB通信功能。为了保持整个生态系统的兼容性,Leonardo通过USB虚拟化串行通信。您可以使用代码中的Serial
访问此通信。从物理上讲,您可以通过USB插头访问该通信。
要使用“实际”串行通信(AKA串行TTL),需要使用引脚0(RX)和1(TX)。在代码中,您将使用Serial1
(注意数字1!)。
一个例子:
void setup() {
Serial1.begin(9600, SERIAL_8N2);
Serial1.println("Hello?");
}
void loop() {
}
有关详细信息(推荐):
答案 1 :(得分:1)
第一种方法应该没问题,因此您有编译器配置或包含问题。确保文件顶部包含以下内容:
#include <HardwareSerial.h>
同时SERIAL_8N2有效时,这是一个很少使用的奇怪设置。你很可能想要SERIAL_8N1。