Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arduino Serial.begin(速度、配置)不为Leonardo板编译_Arduino - Fatal编程技术网

Arduino Serial.begin(速度、配置)不为Leonardo板编译

Arduino Serial.begin(速度、配置)不为Leonardo板编译,arduino,Arduino,我想将我的串行通信配置为没有奇偶校验、1个启动位和2个停止位。用于Serial.begin(速度、配置)的状态为: (…)可选的第二个参数配置数据、奇偶校验和停止位。默认值为8个数据位,无奇偶校验,一个停止位 文档还列出了可能的配置值。根据我(有限)的理解,我需要串行_7N2或串行_8N2来满足我的要求。(我不确定数据位与我需要的1-起始位之间的关系。) 但是,我甚至不能编译,因为我不知道如何向begin方法提供配置值。(我没有太多的Arduino/C++经验) 在我的代码中,我尝试了以下两种变

我想将我的串行通信配置为没有奇偶校验、1个启动位和2个停止位。用于
Serial.begin(速度、配置)
的状态为:

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

文档还列出了可能的配置值。根据我(有限)的理解,我需要串行_7N2或串行_8N2来满足我的要求。(我不确定数据位与我需要的1-起始位之间的关系。)

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

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

Serial.begin(9600, SERIAL_8N2);
Serial.begin(9600, "SERIAL_8N2");
我错过什么了吗

其他信息:

Serial.begin(速度,配置)
已与最新版本一起引入

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


编辑:

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

Serial.begin(9600, SERIAL_8N2); 
然而,它仍然不起作用

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

因此,这可能是一个错误,只发生在一个子集的董事会。。。或者它不被支持


编辑2:


现在问题解决了:)博尔赫斯的回答给了我正确的答案

第一个方法应该是正常的,因此您有一个编译器配置或包含问题。确保文件顶部包含以下内容:

#include <HardwareSerial.h>
#包括

此外,虽然串行_8N2是有效的,但这是一个很少使用的奇怪设置。您很可能需要序列号_8N1。

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

如果我将电路板从“Arduino Leonardo”更改为“Arduino Uno”,则不会出现编译错误

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

  • 莱昂纳多有一个微控制器(),具有本机USB通信。为了保持整个生态系统已经建立的兼容性,莱昂纳多虚拟化了USB上的串行通信。您可以使用代码中的
    串行
    访问此通信。实际上,您可以通过USB插头访问该通信

  • 要使用“真实”串行通信(也称为串行TTL),您需要使用引脚0(RX)和1(TX)。在代码中,您将使用
    Serial1
    (注意数字1!)

  • 例如:

    void setup() {
        Serial1.begin(9600, SERIAL_8N2);
        Serial1.println("Hello?");
    }
    
    void loop() {
    }
    
    有关更多信息(推荐):


    串行。开始(9600,串行)
    应该足够了。您使用的是IDE版本
    1.0.2
    ?谢谢,但我肯定使用的是1.0.2。谢谢,但是包含没有帮助。然而。。。我刚刚发现,如果我把黑板从“Arduino Leonardo”改为“Arduino Uno”,我就不会出现编译错误。。。。我想与之通信的电机控制器需要根据其规格“9600 bps的串行模式,1个启动位,2个停止位,无奇偶校验”。。。那不是序列号吗?很好,已经搞定了。是的,SERIAL_8N2对于该配置是正确的,但它仍然是一个相当不寻常的配置,因此在将来,如果您与任何未知的接口,SERIAL_8N1是最好的开始。好的,谢谢,我会记住:)但是为什么我不能在我的Arduino Leonardo板上使用该方法?是虫子吗?我应该提出问题吗?或者它只是不受支持?我从来没有使用过那个特定的板,但使用的AVR确实有一个硬件UART,所以我想这是他们还没有实现的东西,所以值得提出一个问题。同时,您可以尝试SoftwareSerial,看看是否支持该功能。