我目前正在尝试向我的 Arduino Yun 发送一个字符串,并尝试让它根据我发送的内容进行回复。
我在这里选择了一些代码的框架,并一直在尝试它,但除了串行监视器显示“就绪”之外,我无法让它继续下去。
代码是:
//declace a String to hold what we're inputting
String incomingString;
void setup() {
//initialise Serial communication on 9600 baud
Serial.begin(9600);
while(!Serial);
//delay(4000);
Serial.println("Ready!");
// The incoming String built up one byte at a time.
incomingString = "";
}
void loop () {
// Check if there's incoming serial data.
if (Serial.available() > 0) {
// Read a byte from the serial buffer.
char incomingByte = (char)Serial.read();
incomingString += incomingByte;
// Checks for null termination of the string.
if (incomingByte == '\0') {
// ...do something with String...
if(incomingString == "hello") {
Serial.println("Hello World!");
}
incomingString = "";
}
}
}
有人能指出我正确的方向吗?
谢谢
我怀疑问题在于,当您执行以下操作时,您将空终止符添加到字符串的末尾:
incomingString += incomingByte
。当您使用字符串对象(而不是原始 char *
字符串)时,您不需要这样做。该对象将自行终止。
结果是您的
if
状况实际上正在执行此操作:if ("hello\0" == "hello") ...
。显然它们不相等,所以条件总是失败。
我相信解决方案只是确保如果字节为空,则不会附加该字节。
试试这个:
String IncomingData = "";
String Temp = "";
char = var;
void setup()
{
Serial.begin(9600);
//you dont have to use it but if you want
// if(Serial)
{
Serial.println("Ready");
}
//or
while(!Serial)
{delay(5);}
Serial.println("Ready");
void loop()
{
while(Serial.available())
{
var = Serial.read();
Temp = String(var);
IncomingData+= Temp;
//or
IncomingData.concat(Temp);
// you can try
IncomindData += String(var);
}
Serial.println(IncomingData);
IncomingData = "";
}