ISO C ++禁止在Arduino c串行通信中指针和整数[-fpermissive]错误之间的比较

时间:2017-01-20 01:07:16

标签: c++ c arduino arduino-ide

我正在编写我的BB-8项目,我正在使用蓝牙和我的Arduino,所以我正在使用:

if (Serial.available() > 0) {
    state = Serial.read();

大多数人通过这样的方式发送号码:

if (state == '1') {

但我想通过一个数字来发送一个字符串,以便更容易这样:

if (state == 'stop') {    // or go etc.

但这似乎不会起作用所以我尝试使用字符串:

if (state == "stop") {

但是我收到了这个错误

  

ISO C ++禁止指针和整数[-fpermissive]

之间的比较

哪一个会起作用,如果我不应该做什么呢?

谢谢。

1 个答案:

答案 0 :(得分:0)

首先,撇号适用于字符文字而不是字符串'x'类型为char,而"x"类型为char* 。没有明确定义'xyz'的含义,正如本问题所述:https://stackoverflow.com/a/3961219/607407

Serial.read返回的类型为int。所以在这种情况下:

if (state == "stop")

您正在将intconst char*进行比较。相反,您可能想要读取一个字符串并进行比较。以下是从序列中读取arduino字符串的示例:

const int max_len = 20;
char input_string[max_len+1]; // Allocate some space for the string
size_t index = 0;

while(Serial.available() > 0) // Don't read unless
{
    if(max_len < 19) // One less than the size of the array
    {
        int input_num = Serial.read(); // Read a character
        input_string[index] = (char)input_num; // Store it
        index++; // Increment where to write next
        input_string[index] = '\0'; // Null terminate the string
    }
    else {
        // all data read, time to data processing
        break;
    }
}
// Don't forget that you have to compare
// strings using strcmp
if(strcmp(inData, "stop") == 0) {
    // do something
}
// reset the buffer so that
// you can read another string
index = 0;