switch case...da serial bluetooth

Ciao a tutti,

ho bisogno di un piccolo aiuto

ho la necessità di scrivere un codice che serve alla seguente

un dispositivo collegato via bluetooth invia un comando per esempio: version
l'arduino risponde con un determinato messaggio

ho scritto il codice allegato...che però non funziona
il codice gira solo se nel case inserisco una singola lettera ma se metto una parola appunto come version, esso non va...

potrebbe essere che con variabile char la parola version equivale ad un array ?

in questo caso come posso risolvere ?

Grazie in anticopo

#include <SoftwareSerial.h>
 
int rxPin = 3;
int txPin = 2;
SoftwareSerial bluetooth(rxPin, txPin);

char messagea;
 
void setup()
{

//  Serial.begin(9600);
  bluetooth.begin(9600);
  Serial.println("BT Test\n");

  

}
void loop()
{
  if (bluetooth.available())
  {      
    //Serial.write(bluetooth.read());
    messagea=char(bluetooth.read());
    BTCommands(messagea);
  }

}

void BTCommands(char BTmsg)
{
  switch(BTmsg)
  {
    case 'hello':
     {
      bluetooth.println("Hello!");
      break;
     }
     case 'prova':
     {
      bluetooth.println("Prova OK!");
      break;
     }
     case 'version':
     {
      bluetooth.println("Versione 1.0");
      break;
     }
  }
}

Ci sono 2 problemi:

  1. La tua variabile messagea è di tipo char, quindi atta a contenere un singolo carattere. Per contenere una stringa serve un array di char, oppure un'istanza della classe String (sconsigliata su Arduino).

  2. In ogni caso non si può fare switch sulle stringhe. Se usi array di char puoi confrontarle con la funzione strcmp(), mentre se usi String puoi usare il classico ==. In entrambi i casi devi comunque trasformare lo switch in una catena di if...else if.

quindi come pensavo...

nel mio caso l'unica soluzione è if..else

confermi ?

Grazie per la risposta velocissima!

Scusa, ma hai letto quel che ho scritto sopra? :frowning:

onestamente avevo letto mentre ero al telefono :slight_smile:

avevo inizialmente provato con if...else e funziona regolarmente

mi resta da capire solo come fare per fargli accettare il comando dopo dopo aver premuto il tasto invio

Grazie

Oppure usi delle semplici lettere: case A...B...C e via dicendo