2015年5月17日 星期日

Arduino接收字串

方法一:
void setup(){
    Serial.begin(9600);
    Serial.println("Hello");
}

void loop(){

    String s = "";
    while (Serial.available()) {
        char c = Serial.read();
        if(c!='\n'){
            s += c;
        }
        delay(5);    // 沒有延遲的話 UART 串口速度會跟不上Arduino的速度,會導致資料不完整
    }

    if(s!=""){
        Serial.println(s);
    }
}
使用Serial Monitor測試即可

方法二:
或使用Serial.readString()
 void setup(){
    Serial.begin(9600);
    Serial.setTimeout(50);
    //Serial.setTimeout() sets the maximum milliseconds to wait for serial data 
    Serial.println("Hello");
}
void loop(){
    while (Serial.available()) {
      Serial.println(Serial.readString());
    }
}
疑惑?:為何網路上大家都使用前者?人云亦云?

3 則留言:

  1. 感謝大大,正巧需要用到,就也用了兩種方式寫了一次
    兩者的差距應該是速度,方法二的讀取時間非常久,而方法一讀取完就立刻離開就沒這問題

    回覆刪除
  2. 感謝大大, 方法二的寫法方便多了
    http://rocksaying.tw/archives/2017/Arduino_Serial_and_String_exp1-readString.html
    這邊也有人使用Serial.readString()的相關經驗

    回覆刪除
  3. 感謝。用readString()的確是直覺很多。

    回覆刪除