【问题标题】:Strange initial output using Serial.print使用 Serial.print 的奇怪初始输出
【发布时间】:2012-07-02 04:26:55
【问题描述】:

当我写入串行接口时,当我的草图第一次运行时,我得到了奇怪和意外的输出。输出似乎是应该打印的变体:

例如:

String text1 = "foobar";

void setup() {
  Serial.begin(9600);

  Serial.print("\n");
  Serial.print(text1);
}

void loop() {
}

输出结果:

fo
foobar

(新行出现在“fo”之前,但我不知道如何包含它)。

因此,应该打印的任何变体都会在应该打印的实际文本之前打印。改变输出,改变异常文本(有时是两个字符,有时是三个)。进行不影响输出的更改和重新编译对异常文本没有影响。

我是一个完全的 Arduino 新手(我今天才开始编写自己的代码),但我只能假设这不正常。 我正在使用 Freetronics EtherTen 和 1.0 IDE

提前致谢

【问题讨论】:

    标签: arduino


    【解决方案1】:

    当您在计算机上打开其串行端口时,Arduino 正在重新启动您的草图。 所以它会打印出来,然后再次初始化。

    之后

    Serial.begin(9600);
    

    尝试输入:

    delay(500)
    

    while (!Serial); // while the serial stream is not open, do nothing:
    

    【讨论】:

    • delay() 必须达到 2000 才能解决问题。 while(!Serial) 或将输出包装在 if(Serial) 中都没有任何区别。
    【解决方案2】:

    你可能应该用 0 结束你的字符串。 喜欢: String text1 = "foobar",0;

    【讨论】:

    • 该示例无法编译,但使用 String text1 = "foobar\0"; 转义空终止符并不能解决问题。
    • 字符串自动以null结尾,不需要自己做。
    【解决方案3】:

    这很可能是 Eran W 指出的串行通信重置问题。看我之前的回答here

    当 Arduino 接收到来自 Arduino IDE 以外的大多数设备的串行通信时,它会自动重置。这就是为什么您可以从 IDE 发送但不能从其他任何东西发送的原因。

    我有一个 Uno,并在 Reset 和 Ground 之间放置了一个电容器。这是一个包含有关该主题的一些有用信息的页面。
    祝你好运。 http://arduino.cc/playground/Main/DisablingAutoResetOnSerialConnection

    【讨论】:

    • 监控串行输出并按下硬件重置按钮会导致它重新启动,而不会在开始时出现意外输出。谢谢
    猜你喜欢
    • 2014-08-26
    • 1970-01-01
    • 2021-03-09
    • 1970-01-01
    • 2011-02-22
    • 1970-01-01
    • 2012-10-05
    • 1970-01-01
    相关资源
    最近更新 更多