与 arduino 的串行通信速度慢?延迟将近 1 秒?

Slow serial communication with arduino? Latency of almost 1 sec?

只是尝试一些东西,因为我想使用我的 Arduino Nano 作为我的计算机的接口,带有几个 LED 和按钮。所以我需要从我的电脑向 Arduino 发送一些命令和数据。但是我发现 Arduino 的串行通信速度很慢。事实上,从我按下 Enter 发送的那一刻起,我在串行监视器中的命令几乎需要一秒钟的时间来执行(在本例中是为了控制 LED)。

这是一个限制还是可以以某种方式加快速度?

这是我的简单代码:

String cmd;
int loopNum;
int ledPin = 13;

void setup() {
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
}

void loop() {

if(loopNum == 0) {
Serial.println("Waiting for commands"); // Only display this when sketch is initiated. 
}

cmd = Serial.readString();

if(cmd == "LEDON") {
digitalWrite(ledPin, HIGH);
Serial.println("LED ON");
}
if(cmd == "LEDOFF") {
digitalWrite(ledPin, LOW);
Serial.println("LED OFF");
}
if(cmd == "HELP") {
Serial.println("Available commands:\nLEDON\nLEDOFF\nHelp");
}

loopNum++; // Counts the loop...
delay(50);
}

更改串口的波特率似乎没有任何改变。

一些帮助将不胜感激! :)

当你从串行监视器发送一个字符串时,它会一个接一个地发送所有的字符串。因此,如果您发送 'LEDON' 它将连续传输 5 个字符。这就是执行需要一些时间的原因。

在我看来,要改进您的程序,您必须将代码修改为:

String cmd;
int ledPin = 13;

void setup() {
    Serial.begin(9600);
    pinMode(ledPin, OUTPUT);
    Serial.println("Waiting for commands"); // Only display this when sketch is initiated. 
}

void loop() {
    if (Serial.available()) {
        cmd = Serial.readString(); //Assign cmd just if someone send string in serial monitor

        if(cmd == "LEDON") {
            digitalWrite(ledPin, HIGH);
            Serial.println("LED ON");
        }
        if(cmd == "LEDOFF") {
            digitalWrite(ledPin, LOW);
            Serial.println("LED OFF");
        }
        if(cmd == "HELP") {
            Serial.println("Available commands:\nLEDON\nLEDOFF\nHelp");
        } 
    } //Serial.available()
}

我想你不需要计算循环(没有理由你必须这样做,提高延迟)。 使用 Serial.available() 函数可以帮助您检查是否有人在串行监视器中发送字符串时的语句(减少您的延迟)。 最后,要在程序中只打印一次,可以将其放入 Setup() 函数中。

解决方案是设置:

Serial.setTimeout(50);

谢谢大家!