Ciao a tutti,
Mi è sorto un problema nello scrivere un codice tramite il quale l'ARDUINO dovrà ricevere comandi tramite porta seriale da Unity per eseguire delle operazioni predefinite a seconda di ciò che riceve.
Sono poco esperto con questi codici, quindi perdonate qualsiasi tipo di strafalcione.
Questo è un esempio:
char READ[20] = "abcd";
void setup() {
Serial.begin(9600);
}
void loop() {
// Serial.println(READ[0]); --> stampa a
// Serial.println(READ[1]); --> stampa b
// Serial.println(READ[2]); --> stampa c
// Serial.println(READ[3]); --> stampa d
if (strcmp(READ[3], 'a') == 0) {
Serial.print("A \n");
}
else if (strcmp(READ[2], 'b') == 0) {
Serial.print("B \n");
}
else {
Serial.print("C \n");
}
}
Da Unity io leggo dei caratteri che inserisco in READ, ora io vorrei leggere un carattere e nel caso corrisponda a quello inserito in strcmp allora esegua un'azione (in questo caso è un semplice Serial.print).
Se provo a stampare direttamente con:
// Serial.println(READ[1]); --> stampa b
// Serial.println(READ[2]); --> stampa c
Tuttavia usando strcmp ottengo un risultato positivo sia con:
(strcmp(READ[1], 'b')
che con
(strcmp(READ[2], 'b')
come se b occupasse sia la casella 1 che la 2.
Oltre a questo ottengo un errore che non compromette il funzionamento del codice:
warning: invalid conversion from 'char' to 'const char*' [-fpermissive]
if (strcmp(READ[3], 'a') == 0) {
...
note: initializing argument 1 of 'int strcmp(const char*, const char*)'extern int strcmp(const char *, const char *) ATTR_PURE;
Quindi credo di star facendo casino con char, str e int. Ma non ne vengo a capo.
Qualcuno può aiutarmi?
Grazie!
RISOLTO
Grazie dell'aiuto, bastava semplicemente utilizzare il comando per il caratteri invece di quello per le stringhe. Quindi niente strcomp ma READ[0]=='a'