Nagyon új vagyok az Arduino Programmingban. Megpróbálom azonosítani a soros monitor bemeneti karakterláncát, és ennek megfelelően kinyomtatom a kimenetet a konzolra.
A kód:
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"); } } }
Amikor i tedd a send karakterláncot, amely kimenetként “ismeretlen” -t mutat, ami hibás, és kimenetként “azonosítani” kell. Tudna valaki ide vezetni az eredmény elérése érdekében.
Megjegyzés: A readStringUntil függvény használatával a kívánt eredményt kapom, de a húrok sok “” karaktert tartalmaznak. benne, ezért nem hasznos.
Megjegyzések
Válasz
Ha beállította a Serial Monitor sora “Mindkét NL & CR” -re végződik, akkor ez a kód megtalálja a “send” szót. NEM fogja megtalálni a “send” szót ebben a karakterláncban, “ssend” vagy ebben a karakterláncban a “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"); } } }
Ha a “send” karakterláncot az “1234send” vagy a “send1234” mezőben szeretné megtalálni, vagy “1234send5678”, majd használja az 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"); } } }
Válasz
tetszőleges számú ok, ami miatt a * .equals teszt hamis. Vegye figyelembe az esetkülönbséget vagy a kommunikáció forrásából bevezetett extra karaktereket. Még a nem nyomtatható karakterek is problémát okozhatnak, és a teszt kudarcát okozhatják.
Fontolja meg * .substring () helyett. Ez a módszer igaz lesz, ha megtalálható az allánc. Például:
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"); }
… mindig adja vissza az “azonosított” szót, mert az “s”, “e”, “n” és “d” karakterek a megfelelő sorrendben találhatók a stringOne karakterláncban.
Megjegyzések
- String str = Serial.readString (); if (str.substring (0) == " send ") Soros.println (" azonosított "); else Serial.println (" ismeretlen "); ez még nem működött.
- Páratlan. Megtekintette a weboldalra mutató linket, hogy megbizonyosodjon arról, hogy helyesen használja-e az alszöveget? ( Ez a weboldal? ). A megjegyzésekből azt is látom, hogy kinyomtatta a beérkezett karakterláncot, és látta a " send " üzenetet a fogadott üzenetben, helyes? Érdemes csak megjegyzést fűznie a soros olvasási sorhoz, és megpróbálja használni a " karakterláncot str = " 12345 1234 küldése “>
; " annak ellenőrzésére, hogy minden működik-e. Más megjegyzéseket elbírálva gyorsan megpróbálhatja elküldeni (beírni) " space " + " küldés " + " szóköz " (" send "), hogy lássa, működik-e.
Válasz
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"); } } }
Megjegyzések
- A karakterlánc olvasása " send " a Serial.readString () parancs használata rendben van. De valahogy nem fog működni, ha az eredményt összehasonlításra használja (pl. Adatok == " send " …). Lehetséges megoldás a karaktertömb használata (pl. InChar [5]). A tömb mérete 1-gyel nagyobb, mint a maximálisan szükséges karakterek száma.
\r\n
nem/r/n
…