通过COM端口的Arduino通信不起作用

发布于 2025-01-24 04:16:51 字数 603 浏览 2 评论 0原文

我希望我的Arduino在串行端口中读到“ On”,可以点亮LED。 在serial.print(serialdata);它打印出他阅读的内容,但在if(serialdata ==“ on”)它将无法使用。

int led1 = 9;
int led2 = 6;
String serialData;
void setup() {      
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  Serial.begin(9600);
  Serial.setTimeout(10);
}

void loop() {
  if (Serial.available() > 0){
    serialData = Serial.readString();
    Serial.print(serialData);
    if (serialData == "on"){
      analogWrite(led1, 255);
    }
    if (serialData == "off"){
      analogWrite(led1, 0);
    }
  }
}

有人知道,我在做什么错?

I want my Arduino to light up the LED if he reads "on" in the Serial Port.
At Serial.print(serialData); it prints out what he reads but at if (serialData == "on") it wont work.

int led1 = 9;
int led2 = 6;
String serialData;
void setup() {      
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  Serial.begin(9600);
  Serial.setTimeout(10);
}

void loop() {
  if (Serial.available() > 0){
    serialData = Serial.readString();
    Serial.print(serialData);
    if (serialData == "on"){
      analogWrite(led1, 255);
    }
    if (serialData == "off"){
      analogWrite(led1, 0);
    }
  }
}

Anybody know, what I'm doing wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

抚笙 2025-01-31 04:16:51

您的代码中有两个问题:

  • 超时设置为10ms。在10ms中,您最多可以输入一个字符。 ReadString()将在单个字符后返回,并且读取字符串可能为“ O”,“ N”,“ F”。
  • 当您击中返回键时,也会发出托架返回和线供稿字符(“ \ r \ n”)。

解决方案是大大增加超时,并使用readStringuntil()读取直到发现新线字符。这表明已经输入了一个完整的单词(或命令)。

此外,需要修剪托架返回和线馈电。

#include <Arduino.h>

int led1 = 9;
int led2 = 6;
String serialData;

void setup() {      
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  Serial.begin(9600);
  Serial.setTimeout(2000);
}

void loop() {
  if (Serial.available() > 0){
    serialData = Serial.readStringUntil('\n');
    serialData.trim();
    Serial.println(serialData);
    if (serialData == "on"){
      analogWrite(led1, 255);
    }
    if (serialData == "off"){
      analogWrite(led1, 0);
    }
  }
}

There are two issues in your code:

  • The timeout is set to 10ms. In 10ms, you can at best enter a single character. readString() will return after a single character and the read string will likely be "o", "n", "f".
  • When you hit the RETURN key, a carriage return and a line feed character are also transmitted ("\r\n").

The solution is to increase the timeout considerably and to use readStringUntil() to read until the newline character is discovered. This is the indication that a full word (or command) has been entered.

Additionally, the carriage return and line feed need to be trimmed off.

#include <Arduino.h>

int led1 = 9;
int led2 = 6;
String serialData;

void setup() {      
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  Serial.begin(9600);
  Serial.setTimeout(2000);
}

void loop() {
  if (Serial.available() > 0){
    serialData = Serial.readStringUntil('\n');
    serialData.trim();
    Serial.println(serialData);
    if (serialData == "on"){
      analogWrite(led1, 255);
    }
    if (serialData == "off"){
      analogWrite(led1, 0);
    }
  }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文