Sono molto nuovo nella programmazione di Arduino. Sto cercando di identificare la stringa di input dal monitor seriale e di stampare loutput sulla console di conseguenza
Il codice è:
void setup() { Serial.begin(9600); } void loop() { while (Serial.available() > 0 ) { String str = Serial.readString(); if (str.equals("send")) { Serial.println("identified"); } else { Serial.println("unknown"); } } }
Ogni volta che metti la stringa di invio che mostra “sconosciuto” come output, il che è sbagliato, e dovrei essere “identificato” come output. Qualcuno può guidarmi qui per ottenere il risultato.
Nota: sto ottenendo loutput come volevo usando la funzione readStringUntil ma le stringhe hanno molto “.” in esso, quindi non utile.
Commenti
Rispondi
Se imposti la riga del tuo monitor seriale che termina con “Both NL & CR”, questo codice troverà la parola “invia”. NON troverà la parola “invia” in questa stringa, “ssend” o in questa stringa, “sendd”.
void setup(){ Serial.begin(9600); } void loop(){ while(Serial.available() > 0 ){ String str = Serial.readString(); if(str.substring(0) == "send\r\n"){ Serial.println("identified");} else{ Serial.println("unknown"); } } }
Se desideri trovare la stringa “send” in “1234send” o “send1234” o “1234send5678” quindi utilizza indexOf ();
void setup(){ Serial.begin(9600); } void loop(){ while(Serial.available() > 0 ){ String str = Serial.readString(); if(str.indexOf("send") > -1){ Serial.println("identified");} else{ Serial.println("unknown"); } } }
Answer
Ci sono qualsiasi numero di motivi per cui il test * .equals è falso. Considera la differenza tra maiuscole e minuscole o caratteri aggiuntivi introdotti dalla fonte delle tue comunicazioni. Anche i caratteri non stampabili possono rappresentare un problema e far fallire il test.
Considera lutilizzo * .substring () . Questo metodo restituirà true se viene trovata la sottostringa. Ad esempio:
String stringOne = "12345 send 1234"; // substring(index) looks for the substring from the index position to the end: if (stringOne.substring(0) == "send") { Serial.println("identified"); } else { Serial.println("unknown"); }
… dovrebbe sempre restituire “identificato” perché i caratteri “s”, “e”, “n” e “d” si trovano nella sequenza corretta allinterno della stringa stringOne.
Commenti
- String str = Serial.readString (); if (str.substring (0) == " send ") Serial.println (" identificato "); else Serial.println (" sconosciuto "); questo non ha funzionato nemmeno.
- Strano. Hai esaminato la pagina Web collegata per assicurarti di utilizzare correttamente la sottostringa? ( Questa pagina web? ). Inoltre, dai commenti ho visto che hai stampato la stringa ricevuta e hai visto " send " nel messaggio ricevuto, corretta? Potresti semplicemente commentare la riga di lettura seriale e provare a utilizzare " String str = " 12345 invia 1234 "; " per verificare se tutto funziona. A giudicare da altri commenti potresti provare rapidamente a inviare (digitando) " spazio " + " invia " + " spazio " (" invia ") per vedere se funziona.
- Questo ' non funzionerà. sottostringa (n) restituisce solo la parte della stringa che inizia alla posizione n. Quindi la sottostringa (0) restituisce solo una copia della stringa. str.substring (0,4) restituirà i primi 4 caratteri della stringa (supponendo che ci siano almeno 4 caratteri da restituire – Io ' non ho abbastanza familiarità con questa implementazione per sapere cosa lo fa per una stringa più breve – C # genererebbe uneccezione).
Risposta
void setup() { Serial.begin(9600); } void loop() { char inChar[5]; if(Serial.available() > 0 ) { for (int i=0; i<5; i++) { inChar[i] = Serial.read(); delay(10); } if (inChar[0] == "s" && inChar[1] == "e" \ && inChar[2] == "n" \ && inChar[3] == "d") { Serial.println("identified"); } else { Serial.println("unknown"); } } }
Commenti
- Lettura della stringa " send " usare il comando Serial.readString () va bene. Ma in qualche modo non funzionerà se utilizzi il risultato per il confronto (ad esempio data == " send " …). Una possibile soluzione è usare un array di caratteri (ad esempio inChar [5]). La dimensione dellarray è 1 in più rispetto al numero massimo di caratteri necessari.
\r\n
non/r/n
…