如何比较Serial.read()中的字符串?

Yak*_*idi 6 serial-port arduino

下面我有我来自哪里得到这个代码这个论坛,我跟着通过.它不适合我,但他们声称代码很好.我已经尝试了几种字符串比较方法,例如string.equals(string)和标准==运算符,但仍然没有运气.

int ledPin = 13;
String readString;

void setup() {
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT); 
  Serial.println("serial on/off test 0021"); // so I can keep track
}

void loop() {
  while (Serial.available()) {
    delay(3);  
    char c = Serial.read();
    readString += c; 
  }
  if (readString.length() >0) {
    if (readString == "on") {
      Serial.println("switching on");
      digitalWrite(ledPin, HIGH);
    }
    if (readString == "off") {
      digitalWrite(ledPin, LOW);
    }
    readString="";
  } 
}
Run Code Online (Sandbox Code Playgroud)

Yak*_*idi 13

我可以通过简单地readString.trim();在字符串比较之前添加来解决昨晚的问题.这是因为会有一个换行符,其中id没有在arduino控制台中打印任何内容.

我将函数放在下面的代码中:

int ledPin = 13;
String readString;

void setup() {
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT); 
  Serial.println("serial on/off test 0021"); // so I can keep track
}

void loop() {

  while (Serial.available()) {
    delay(3);  
    char c = Serial.read();
    readString += c; 
  }
  readString.trim();
  if (readString.length() >0) {
    if (readString == "on"){
      Serial.println("switching on");
      digitalWrite(ledPin, HIGH);
    }
    if (readString == "off")
    {
      Serial.println("switching off");
      digitalWrite(ledPin, LOW);
    }

    readString="";
  } 
}
Run Code Online (Sandbox Code Playgroud)


小智 5

我只用' '(单)而不是" "(双)

char c = Serial.read();

if (c == '1'){ //do something}  
Run Code Online (Sandbox Code Playgroud)


小智 5

为什么不使用Serial.readString();?

尝试这个..

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

    void loop(){
      if(Serial.available()){
        String ch;
        ch = Serial.readString();
        ch.trim();
        if(ch=="on"||ch=="ON"){
          digitalWrite(13, HIGH);  
        }
        else if(ch=="off"||ch=="OFF"){
          digitalWrite(13, LOW);
        }
      }
    }
Run Code Online (Sandbox Code Playgroud)