首页 文章

与arduino进行慢速串行通信?延迟差不多1秒?

提问于
浏览
6

只是尝试一些东西,因为我想用我的Arduino Nano作为我的电脑的接口,带有几个LED和按钮 . 所以我需要从我的PC向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);
}

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

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

3 回答

  • 18

    解决方案是设置:

    Serial.setTimeout(50)
    

    谢谢大家!

  • 1

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

    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()函数中 .

  • -1

    从串行监视器发送字符串时,它会逐个发送所有字符串 . 因此,如果您发送'LEDON',它将逐个传输5个字符 . 这就是为什么执行需要一些时间 .

相关问题