Arduino (C-Sprache) Parsing String mit Delimiter (Eingabe über die serielle Schnittstelle)
Ich habe die Antwort hier nicht gefunden: /
Ich möchte an meine Arduino über eine serielle Schnittstelle (Serial.read ()) eine einfache Zeichenfolge aus drei Zahlen mit Komma getrennt senden. Diese drei Zahlen könnten von 0-255 reichen.
z.
%Code%
%Code%
%Code%
255,255,255
Was ich tun muss, ist diese Zeichenfolge, die an Arduino gesendet wird, auf drei ganze Zahlen zu analysieren (sagen wir r, g und b).
Also wenn ich sende 100,50,30 Arduino wird es in
übersetzen %Vor%Ich habe viele Codes ausprobiert, aber keiner von ihnen hat funktioniert. Das Hauptproblem besteht darin, eine Zeichenkette (Zeichenkette) in eine ganze Zahl zu übersetzen. Ich habe herausgefunden, dass es wahrscheinlich strtok_r für den Zweck des Begrenzers gibt, aber darum geht es.
Danke für Anregungen:)
Um die Frage zu beantworten, die Sie tatsächlich gestellt haben, sind String-Objekte sehr mächtig und können genau das tun, was Sie fragen. Wenn Sie Ihre Parsing-Regeln direkt von der Eingabe einschränken, wird Ihr Code weniger flexibel, weniger wiederverwendbar und leicht gewunden.
Strings haben eine Methode mit dem Namen indexOf (), mit der Sie nach dem Index im Zeichenfeld eines bestimmten Zeichens suchen können. Wenn das Zeichen nicht gefunden wird, sollte die Methode -1 zurückgeben. Ein zweiter Parameter kann dem Funktionsaufruf hinzugefügt werden, um einen Startpunkt für die Suche anzugeben. Da in Ihrem Fall die Trennzeichen Kommas sind, würden Sie Folgendes aufrufen:
%Vor%Dann könnten Sie diesen Index verwenden, um eine Teilzeichenfolge mit der substring () -Methode der String-Klasse zu erstellen. Dies gibt einen neuen String zurück, der bei einem bestimmten Startindex beginnt und unmittelbar vor einem zweiten Index endet (oder dem Ende einer Datei, wenn keines angegeben ist). Du würdest also etwas schreiben wie:
%Vor%Schließlich können die Integer-Werte mit der undokumentierten Methode toInt () der String-Klasse abgerufen werden:
%Vor%Weitere Informationen zum String-Objekt und seinen verschiedenen Methoden finden Sie in der Arduino-Dokumentation .
Verwenden Sie sscanf
;
Verwenden Sie meinen Code hier, wenn Sie einen Stream von String ex analysieren möchten: 255,255,255 0,0,0 1,20,100 90,200,3
Parsing-Funktion für durch Kommas getrennte Zeichenfolge
Das ist großartig!
Der letzte Kommentar zu "threevalue = 0" ist wahr aus dem Code, der in der am häufigsten getippten Antwort von @dsnetleton angegeben wurde. Anstelle von "lastIndexOf (',');" , der Code sollte einfach eine "+1" zu "secondCommaIndex" wie @dsnetleton richtig für KommaIndex + 1 hinzufügen (fehlende +1 ist wahrscheinlich nur ein Tippfehler von dem Typ).
Hier ist das aktualisierte Stück Code
%Vor%Beispiel)
Für einen myString="1,2,3"
Hinweis: Verwechseln Sie INDEX nicht mit der Länge der Zeichenfolge. Die Länge des Strings ist 5. Da der String indexOf ab 0 zählt, ist der letzte Index 4.
Der Grund warum nur
%Vor%gibt 0 zurück, wenn .toInt () verwendet wird, weil thirdValue=", 3" und nicht "3" ist, was zu Int () führt.
ps. Es tut mir leid, alle Anweisungen zu schreiben, aber als Mech-eng, auch wenn ich manchmal möchte, dass jemand für mich Code für mich dumme Code vor allem in der Beratung seit den letzten 7 Jahren. Mach weiter so! Hilft den Leuten, mich zu mögen!
@cstrutton - Excellenter Vorschlag zur Verwendung von 'indexOf'. Das hat mir eine Menge Zeit für mein Projekt gespart. Ein kleiner Zeiger,
Ich bemerkte, dass der dritte Wert nicht angezeigt wurde (kam als ZERO zurück). Nachdem ich mit ihm ein wenig gespielt und das Dokument in Ссылка durchgegangen bin Ich erkannte, ich kann lastIndexOf für den letzten Wert verwenden.
Hier sind zwei Zeilen mit Modifikationen, die den richtigen dritten Wert liefern.
%Vor%