2017-01-20 2 views
-3

Я кодирование моего проекта BB-8 и я использую Bluetooth с моим Arduino так я использую:ISO C++ запрещает сравнение между указателем и целым [-fpermissive] ошибкой в ​​Arduino гр последовательной связи

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

Большинство людей посылают номера через как это, который работает:

if (state == '1') { 

Но я хотел бы послать строку через вместо ряда, чтобы сделать его проще, как это:

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

Но это не похоже, что это будет работать, так что я пытался использовать строку:

if (state == "stop") { 

Но я получаю эту ошибку

ISO C++ запрещает сравнение между указателем и целое [-fpermissive]

Какой из них будет работать, и если не то, что я должен делать вместо этого?

спасибо.

+0

Вы уверены, что это ссылка на C? – Stargateur

+0

@Stargateur Я решил удалить тег, но на этот вопрос, в частности, можно легко ответить как программистами C, так и C++. –

ответ

0

Во-первых, апострофа предназначены для символьных литералов не строк, что 'x' имеет тип char, тогда как "x" имеет тип char*. Это четко не определено, какие 'xyz' средства, как описано в этом вопросе: https://stackoverflow.com/a/3961219/607407

Значение Serial.read возвращается к типу int. Так что в этом случае:

if (state == "stop") 

Вы сравниваете int с const 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; 
+0

Цифры могут быть составлены из нескольких символов. –

+0

Интересно знать. Но, по-видимому, нет стандартного определения того, что они делают или что означают. –

+2

@KerrekSB, но я считаю, что использование не переносится, вам нужно посмотреть, как его обрабатывает ваш компилятор. И вы, конечно, не хотели бы сравнивать его с результатом одного «чтения». –

Смежные вопросы