1

我的 Arduino 遇到了问题。我希望能够在 Arduino IDE 上打开我的串行监视器,并能够输入类似 hello 的内容,并让 Arduino 对该所谓的命令进行设置响应,这样我就可以创建一个聊天机器人。

这是我的代码,有人可以帮助我吗?

  byte byteRead;

  void setup() 
  {
       Serial.begin(9600);


  }

  void loop() 
  {
       if (Serial.available()) {

        byteRead = Serial.read();

        if(byteRead =="hello") {
        Serial.println("hello freind");
        }
  }
4

2 回答 2

0

您需要将串行输入视为字符串而不是字节。

尝试将您的输入变量声明为 type String

String stringRead;

使用以下命令从串行端口读取字符串readString()

stringRead = Serial.readString();

并将您的比较从:

if(byteRead == "hello") {

至:

if (stringRead == "hello") {

除了 Serial.readString(),您还可以使用 Serial.readStringUntil()。

此外,Arduino 网站提供了有关其串行功能的很好参考,您可能会觉得很有帮助。

于 2015-12-21T07:16:10.113 回答
0

byteRead =="hello"成真的机会太小了。尝试读取一个字符串(不仅仅是一个字符!)并逐个比较字符串中的字符。

// read one line
void read_line(char *buf, int max)
{
  int i = 0;
  while(i < len - 1) {
    int c = Serial.read();
    if (c >= 0) {
      if (c == '\r' || c == '\n') break;
      buf[i++] = c;
    }
  }
  buf[i] = '\0';
}

// compare two strings and return whether they are same
int is_same(const char *a, const char *b)
{
  while (*a != '\0' || *b != '\0') {
    if (*a++ != *b++) return 0;
  }
  return 1;
}

void setup() 
{
  Serial.begin(9600);
}

void loop() 
{
  if (Serial.available()) {
    char stringRead[128];
    read_line(stringRead, 128);
    if(is_same(stringRead, "hello")) {
        Serial.println("hello freind");
    }
  }
}
于 2015-12-21T07:20:29.140 回答