2017-01-20 1 views
-3

Je codage mon projet BB-8 et je suis en utilisant Bluetooth avec mon Arduino alors j'utilise:ISO C++ interdit comparaison entre pointeur et entier [-fpermissive] erreur dans Arduino c communication série

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

la plupart des gens envoient des numéros à travers comme ce qui fonctionne:

if (state == '1') { 

Mais je voudrais envoyer une chaîne à travers la place, d'un certain nombre pour le rendre plus facile comme ceci:

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

Mais cela ne semble pas que cela fonctionnerait si j'ai essayé d'utiliser une chaîne:

if (state == "stop") { 

Mais je reçois cette erreur

ISO C++ comparaison entre pointeur interdit et entier [-fpermissive]

Lequel fonctionnerait et si ni ce que je devrais faire à la place?

Merci.

+0

Etes-vous sûr que c'est un lien vers C? – Stargateur

+0

@Stargateur J'ai envisagé de supprimer la balise, mais cette question en particulier peut être facilement résolue par les programmeurs C et C++. –

Répondre

0

Tout d'abord, pour sont apostrophes ombles littéraux et non des chaînes, qui est 'x' est de type char alors "x" est de type char*. Il est pas clairement défini ce que 'xyz' moyens, tel que discuté dans cette question: https://stackoverflow.com/a/3961219/607407

La valeur Serial.read rendement est de type int. Donc dans ce cas:

if (state == "stop") 

Vous comparez avec intconst char*. Au lieu de cela, vous voulez probablement lire une chaîne et comparer cela. Voici un exemple de chaîne de lecture sur arduino à partir de la série:

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

Les littéraux char peuvent être composés de plusieurs caractères. –

+0

Intéressant à savoir. Mais apparemment, il n'y a pas de définition standard de ce qu'ils font ou veulent dire. –

+2

@KerrekSB mais je crois que l'utilisation est non-portable, vous devez voir comment votre compilateur gère. Et vous ne voudriez certainement pas le comparer au résultat d'un seul 'read'. –