Serial.begin(speed,config)没有为Leonardo Board编译

for*_*emo 2 arduino

我想配置我的串行通信没有奇偶校验,1个开始和2个停止位.该文档的Serial.begin(speed, config)状态:

(...)可选的第二个参数配置数据,奇偶校验和停止位.默认值为8个数据位,无奇偶校验,一个停止位.

该文档还列出了可能的配置值.根据我(有限)的理解,我需要SERIAL_7N2或SERIAL_8N2来满足我的要求.(我不确定数据位如何与我需要的1-start-bit相关.)

但是,我甚至无法编译,因为我不知道如何将该配置值提供给begin方法.(我没有太多的Arduino/C++经验).

在我的代码中,我尝试了以下两种变体:

Serial.begin(9600, SERIAL_8N2);
Serial.begin(9600, "SERIAL_8N2");
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?

附加信息:

Serial.begin(speed, config)已经推出了最新的Arduino 1.0.2 IDE版本.

可以找到定义/实现begin方法的代码:


编辑:

根据PeterJ和borges的回复,以下变体是正确的.

Serial.begin(9600, SERIAL_8N2); 
Run Code Online (Sandbox Code Playgroud)

但是,它仍然无法正常工作.

我发现如果我将配置的电路板从我的Arduino Leonardo更改为Arduino Uno,则不会发生编译错误.

因此,它可能是只有一部分电路板发生的错误......或者它可能不受支持?!


编辑2:

它现在已经解决了:) borges的答案向我指出了正确的解决方案!

bor*_*ges 5

你在评论中提到:(编辑:现在在标题中)

如果我将电路板从我的"Arduino Leonardo"更改为"Arduino Uno",我不会收到编译错误.

Arduino Leonardo在串行通信方面有一些特点:

  1. Leonardo有一个微控制器(ATmega32U4),具有本机USB通信功能.为了保持整个生态系统的兼容性,Leonardo通过USB虚拟化串行通信.您可以Serial在代码中使用此通信.从物理上讲,您可以通过USB插头访问该通信.

  2. 要使用"实际"串行通信(AKA串行TTL),需要使用引脚0(RX)和1(TX).在你要使用的代码中Serial1(注意数字1!).

一个例子:

void setup() {
    Serial1.begin(9600, SERIAL_8N2);
    Serial1.println("Hello?");
}

void loop() {
}
Run Code Online (Sandbox Code Playgroud)

有关更多信息(推荐):