C# Ardunio串行监视器在打印字符0、1、2等之前打印字符0、1

C# Ardunio串行监视器在打印字符0、1、2等之前打印字符0、1,c#,printing,arduino,C#,Printing,Arduino,我使用非常简单的ardunio代码打印“hello world”,只打印一次。但是当它打印到串行监视器上时,字符“hehello world.”就会出现。有人知道为什么“他”会被印两次吗 void setup(){ Serial.begin(9600); } void loop(){ Serial.print("hello"); delay(1000); Serial.print(" "); Serial.print("world."); delay(1000); Serial.print

我使用非常简单的ardunio代码打印“hello world”,只打印一次。但是当它打印到串行监视器上时,字符“hehello world.”就会出现。有人知道为什么“他”会被印两次吗

void setup(){
Serial.begin(9600);
}
void loop(){
Serial.print("hello");
 delay(1000);
Serial.print(" ");
Serial.print("world.");
  delay(1000);
Serial.print("  ");  
  delay(1000);
while(1) {}
}

我不是100%确定,但有几种可能性:

  • 首先,该代码将在Arduino通电后立即开始运行,但在您告诉它之前,它不会输出到串行监视器。所以当你打开它的时候,“你好”很可能已经写好了。您可以通过为“hello”命令或在
    Serial.begin()之后设置长时间延迟来解决此问题

  • 另一个想法是:
    delay()
    可能会干扰串行写入。写入序列需要一定的时间,当代码达到<代码>延迟()/代码>调用时,它可能仍然处于写入“hello”的中间。您可以通过使用非
    delay()
    的函数来解决此问题。例如,有一个名为
    startTime
    的变量,它在
    setup()
    期间被初始化为
    millis()
    。然后说(例如):

然后摆脱
while
循环

这两个都不能真正解释“你好”(如果有的话,我希望你能看到“llo”之类的东西)。但它们是思想

愚蠢的显而易见的事情:确保串行监视器上的波特率实际上匹配到9600

if (millis()>startTime+1000 && !helloSent){
  Serial.print("hello");
  helloSent=true;
}