Sunt foarte nou în programarea Arduino. Încerc să identific șirul de intrare de pe monitorul serial și tipăresc ieșirea pe consolă în consecință
Codul este:
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"); } } }
Ori de câte ori i puneți șirul de trimitere arată „necunoscut” ca ieșire, ceea ce este greșit și ar trebui să fiu „identificat” ca ieșire. Poate cineva să mă ghideze aici pentru a obține rezultatul.
Notă: obțin rezultate după cum am dorit folosind funcția readStringUntil, dar șirurile au o mulțime de „.” în ea, prin urmare, nu este util.
Comentarii
Răspundeți
Dacă setați linia Serial Monitor „care se termină cu” Both NL & CR „, atunci acest cod va găsi cuvântul” send „. NU va găsi cuvântul” send „în acest șir, „ssend” sau în acest șir, „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"); } } }
Dacă doriți să găsiți șirul „send” în „1234send” sau „send1234” sau „1234send5678” apoi utilizați 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"); } } }
Răspuns
Există orice număr de motive pentru care testul * .equals este fals. Luați în considerare diferența de majuscule sau caracterele suplimentare introduse din sursa comunicațiilor dvs. Chiar și caracterele care nu se pot tipări pot pune o problemă și pot cauza eșecul testului. * .substring () în schimb. Această metodă va reveni adevărată dacă se găsește șirul. De exemplu:
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"); }
… ar trebui întotdeauna returnează „identificat” deoarece caracterele „s”, „e”, „n” și „d” se găsesc în secvența corectă din șirul stringOne.
Comentarii
- String str = Serial.readString (); if (str.substring (0) == " trimite ") Serial.println (" identificat "); else Serial.println (" necunoscut "); acest lucru nu a funcționat nici măcar.
- Impar. Te-ai uitat la pagina legată de web pentru a te asigura că folosești corect șirul de caractere? ( Această pagină web? ). De asemenea, văd din comentarii că l-ați tipărit șirul primit și ați văzut " trimitând " în mesajul primit, corect? Poate doriți doar să comentați linia de citire în serie și să încercați să utilizați " String str = " 12345 trimite 1234 "; " pentru a testa dacă totul funcționează. Judecând pentru alte comentarii, ați putea încerca rapid să trimiteți (tastând) " spațiu " + " trimite " + " spațiu " (" trimite ") pentru a vedea dacă funcționează.
- Acest lucru a câștigat '. substring (n) returnează doar porțiunea șirului începând de la poziția n. Deci, șirul (0) returnează doar o copie a șirului. str.substring (0,4) va returna primele 4 caractere ale șirului (presupunând că cel puțin 4 caractere vor fi returnate – nu ' nu sunt suficient de familiarizat cu această implementare pentru a ști face pentru un șir mai scurt – C # ar arunca o excepție).
Răspuns
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"); } } }
Comentarii
- Citirea șirului " trimite " utilizarea comenzii Serial.readString () este în regulă. Dar cumva nu va funcționa dacă utilizați rezultatul pentru comparare (de exemplu, date == " trimiteți " …). O posibilă soluție este utilizarea matricei de caractere (de exemplu, inChar [5]). Dimensiunea matricei este cu 1 mai mult decât numărul maxim de caractere necesare.
\r\n
nu/r/n
…