Arduino Serial.read无法添加到字符串中

时间:2015-11-16 19:24:20

标签: c++ arduino xbee

我有这段代码:

void setup()
{
  analogReference(INTERNAL);
  Serial.begin(9600);
  AtInit();
  SendAt("RE");
  xbeeLow = SendAt("SL");
  xbeeFirmware = SendAt("VR");
  xbeeHardware = SendAt("HV");
  SendAt("WR");
  closeAt();
}

bool AtInit(){
  int loopCount = 0;
  leds.setPixelColor(1, amber);
  leds.show();
  while(1){
    delay(1100);
    Serial.print("+++");
    delay(1100);
    String atInitResult = ReadLine( 1000 );
    if(atInitResult){
      leds.setPixelColor(1, green);
      leds.show();
      return true;
    }
    if(loopCount == 3){
      leds.setPixelColor(1, red);
      leds.show();
      return false;
    }else{
      loopCount += 1;  
    }
  }
}

String ReadLine( unsigned long timeout ){
  char inByte;
  unsigned long readLineStart = millis();
  String response;
  delay(timeout);
  while(1){
    if(Serial.available() > 0){
      inByte = Serial.read();
      Serial.print(inByte);
      if(inByte == '\r'){
        response = dataString;
        dataString = "";
        break;
      }
      dataString += inByte;
    }    
  }
  return response;
}

String SendAt( String command ){
  String atResponse;
  String atClose;
  Serial.println("AT" + command);
  atResponse = ReadLine( 500 );
  Serial.print(F("*********>"));
  Serial.print(atResponse);
  Serial.println(F("<*********"));
  return atResponse;

}

sendAt函数调用Readline以AT命令模式从xbee获取数据。

Serial.print用于贬值目的。 这是我在终端屏幕上得到的内容

+++OK
ATRE
OK
*********>OK<*********
ATSL
40B23B83
*********>40<*********
ATVR
8070
*********><*********
ATHV
2342
*********><*********
ATWR
OK
*********><*********
ATCN
OK

为什么Serial.print Serial.read()之后的chardataString += inByte本身后才能真正打印出好的特征,即使char似乎没有添加results.show(20, False)到实际的字符串?它似乎仅适用于前几个命令,之后它不会添加更多。

0 个答案:

没有答案