Go Down

Topic: Vergleichen eines empfangene Strings mit dem gesendeten HC12 433mhz. (Read 1 time) previous topic - next topic

parabello

Komme einfach nicht weiter und brauche Hilfe. Mein Problem ich sende z.B . einen String "motor:22"
zum überprüfen wird der gleiche String zurückgesendet und mit dem String der gesendet wurde verglichen, ich krieg keine Übereinstimmung????  Habe jetzt festgestellt das der String "motor:22" eine Länge von 8 hat, kommt an mit Länge 10,also wird beim jeden Sendevorgang um 2erhöht,warum??? vergleich mache ich mit (gesendete_string.equals(empfangen))  angezeigt  durch Serial.println(gesendete_string); und Serial.println(empfangen);  das gleiche "motor:22" aber wie gesagt die Länge ändert sich, wie kann ich das umgehen??? :smiley-confuse:  Ich hoffe ich wurde verstanden.

Code: [Select]


 int buflen;
 buflen=empfangen.length(); //zeigt bei mir 10 an
 int buflen;
 buflen=gesendete_string.length();//der string der gesendet wurde hatte eine länge von 8

 if (gesendete_string.equals(empfangen)) {
        modus=0;
        display.clearDisplay();
        display.setTextSize(2);
        display.setCursor(0, 14);
        display.print("*OKAY*");
        display.display();
        delay(3000);
      }






Tommy56

Das Codefraqgment hat keinen Nutzen zur Problemklärung. Dazu braucht es schon die beiden Sletche (Sende- und Empfangsseite)

Nur von der Längeninfo her vermutet: Du sendest CR + LF zurück?

Also zeige beide Sketche.

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

parabello

Das Codefraqgment hat keinen Nutzen zur Problemklärung. Dazu braucht es schon die beiden Sletche (Sende- und Empfangsseite)

Nur von der Längeninfo her vermutet: Du sendest CR + LF zurück?

Also zeige beide Sketche.

Gruß Tommy
da blickt ein Fremde nicht durch............nicht das ich das nicht möchte...hmm " Du sendest CR + LF zurück?"
das habe ich auch vermutet...  mySerial.println("motor:22"); so wird gesendet....  wie kann ich das umgehen????was passiert dabei den???


SkobyMobil

Hallo,
lasse Dir das doch mal in einem Terminal-Programm ausgeben.
Dann kannst Du "sehen" was tatsächlich passiert.
Gruß und Spaß
Andreas
die zweite Maus bekommt den Speck...

Serenifly

mySerial.println("motor:22"); so wird gesendet....
Und wieso wundert es dich dann dass da zwei Zeichen mehr ankommen als du willst?

SkobyMobil

die zweite Maus bekommt den Speck...

parabello

Und wieso wundert es dich dann dass da zwei Zeichen mehr ankommen als du willst?
kann ich die wieder abziehen???? wen ja wie???

Serenifly

Neben println() gibt es auch noch print()

Wobei es generell praktisch ist ein LF oder CR als Endzeichen zu senden. Und dann die Einlese-Routine per Hand zu schreiben, so dass sie alles bis da hin einliest. Bei den fertigen Methoden musst du aber aufpassen wie viel da tatsächlich gelesen wird.

hajos118

Vlt. hat das was mit der Definition des String zu tun.
string Meinstring = "abc";
ist ganz was anderes als
char Meinstring[] = "abc";
Orthographie und Interpunktion folgen keiner gültigen Norm. Wer Fehler findet darf sie behalten!

Serenifly


hajos118

#10
Aug 25, 2017, 12:51 pm Last Edit: Aug 25, 2017, 01:02 pm by hajos118 Reason: Beispiel angefügt.
Glaub' ich nicht!
Bei der String darstellung dürften noch Informationen zur Länge des String mit abgelegt sein oder ein Ende Zeichen für das Ende des String....
Gucktst Du:
Code: [Select]
// char Meinstring[] = "abc";
String Meinstring[] = "abc";


void setup() {
  // put your setup code here, to run once:

}

void loop() {
  // put your main code here, to run repeatedly:

}


Mal der eine Code, mal der andere Code kompiliert ergibt:
Orthographie und Interpunktion folgen keiner gültigen Norm. Wer Fehler findet darf sie behalten!

Serenifly

Quote
Informationen zur Länge des String
Na und? Das hat mit dem Inhalt des Strings an sich nichts zu tun

Quote
ein Ende Zeichen für das Ende des String.
Die String Klasse verwaltet intern auch nur ein Null-terminiertes Array. Was auch sonst?

hajos118

... na dann gib' doch mal einen char[] ohne abschliessendes /0 per printf aus... Gibt die tollsten Ergebnisse!
und die Länge des sketches und der Speicherverbrauch ist ebenfalls unterschiedlich!
Dass die "Nutzinformation" die gleiche ist, hab ich nie bestritten!
Orthographie und Interpunktion folgen keiner gültigen Norm. Wer Fehler findet darf sie behalten!

ElEspanol


Serenifly

na dann gib' doch mal einen char[] ohne abschliessendes /0 per printf aus... Gibt die tollsten Ergebnisse!
Klar. Die String Klasse verwaltet intern auch ein char Array. Halt ein dynamisches dass mit der Größe des Strings wächst. Durch die Kapselung in der Klasse ist auch garantiert dass es terminiert ist

Quote
Dass die "Nutzinformation" die gleiche ist, hab ich nie bestritten!
Das aber das einzige was hier relevant ist. Der Overhead spielt für einen Vergleich oder die Ausgabe keine Rolle

Normal rate ich ja von der Verwendung der String Klasse ab. Das ist hier aber nicht das Problem. Wenn er char[] verwenden würde und den empfangenen String mit println() zurück sendet kommt genau das gleiche heraus.

Das Problem wird sein dass er nicht bis zu einem Endzeichen einliest, sondern einfach readString() macht. Also mit Timeout so lange einlesen wie Zeichen da sind. Und damit wird auch prompt das CR + LF eingelesen

Go Up