У меня есть этот код:
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
получить данные от xbee в режиме команд AT.
Serial.print
с целью отладки.
Вот что я получил на экране моего терминала
+++OK
ATRE
OK
*********>OK<*********
ATSL
40B23B83
*********>40<*********
ATVR
8070
*********><*********
ATHV
2342
*********><*********
ATWR
OK
*********><*********
ATCN
OK
Почему Serial.print
сразу после Serial.read()
из char
сам по себе печатать хороший символ, хотя dataString += inByte
кажется, не добавляет char
к фактической строке? Кажется, он работает только для первых нескольких команд, после этого он не добавляет больше.
Задача ещё не решена.
Других решений пока нет …