- LiFePO4 Speicher Test    Werbung      
Ergebnis 1 bis 10 von 10

Thema: einfaches Programm, simpler Fehler, aber wo?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.03.2013
    Beiträge
    242
    Länge ist 3, aber welches?

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.01.2014
    Beiträge
    454
    Wahrscheinlich schickst du die falsche Terminierung. Im Seriellen Monitor kann man das unten rechts umstellen. Mit 'Neue Zeile' sollte es funktionieren.

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.03.2013
    Beiträge
    242
    Wenn ich die SS2 nur mit read auslese, erhalte ich hex 106, 97,13,10 das sind j, a, CR und LF.
    Das wäre ja fast plausibel, da ich das "ja" von einem anderen Arduino mit println sende. Aber das sind ja nun 4 und nicht 3 Zeichen.

    Ich bin über dieses Problem auch deshalb so erstaunt, weil ich das aus einem andern Programm genau so übernommen habe, erhalte da die SS-Signale jedoch über ein Bluetooth-Modul HC06 von einer Tablet-App.
    Geändert von fredyxx (03.01.2017 um 10:37 Uhr)

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.01.2014
    Beiträge
    454
    Naja, readStringUntil('\n') liesst alle Zeichen bis '\n'. Da dies als Trennzeichen gewertet wird, wird es nicht in den Rückgabestring geschrieben.

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.03.2013
    Beiträge
    242
    Ich habe das Problem nun folgendermaßen behoben:

    Blinken = Serial2.readStringUntil('\n');.....ersetzt durch.....Blinken = Serial2.readStringUntil('\r');

    und

    if (Blinken == "ja").....ersetzt durch.....if (Blinken.substring(1) == "ja").....da wird dann das erste Zeichen nicht mitgenommen.

    Danke für eure Hilfen

    Gruß

    fredyxx

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.01.2014
    Beiträge
    454
    Damit liest du erst ab der zweiten 'ja'-Nachricht. Die erste wird ignoriert.
    Mach besser sowas:
    Code:
      if (Serial.available()) {
        str = Serial.readStringUntil('\n');
        str.replace("\r", "\0");
    }
    Damit löscht du das '\r' in der Nachricht, falls es vorkommt.
    Geändert von Sisor (03.01.2017 um 12:33 Uhr)

  7. #7
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    18.03.2013
    Beiträge
    242
    Danke, das sind wohl die Feinheiten, die man Erfahrung nennt!!

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    04.09.2011
    Ort
    Hessen
    Beiträge
    707
    Tja, das ist eine typische Fehlerquelle bei solcher Art von Empfangslogik.

    Das readStringUntil hat da diverse Nachteile:

    - es könnten noch Reste alter Daten im Empfangspuffer stehen, die dann vorne an das "ja" drankommen,

    - ein Windowszeilenumbruch besteht z.B. aus \r und \n, deswegen könnte noch das \r da drin stehen,

    - wenn man bei der Eingabe den Cursor bewegt hat oder was gelöscht hat, könnte da noch anderes reingeraten.

    Also besser mit read() jedes Zeichen einzeln einlesen, bis nichts mehr kommt, und alles wegschmeissen, was man nicht braucht.

Ähnliche Themen

  1. Antworten: 14
    Letzter Beitrag: 11.04.2013, 14:34
  2. Einfaches StatusLED Programm
    Von derwisch im Forum Asuro
    Antworten: 6
    Letzter Beitrag: 21.06.2012, 19:09
  3. einfaches programm will nicht
    Von chineseboy im Forum Asuro
    Antworten: 6
    Letzter Beitrag: 29.03.2010, 17:57
  4. Einfaches Programm - Denkfehler gesucht
    Von carrera1988 im Forum Robby RP6
    Antworten: 2
    Letzter Beitrag: 29.02.2008, 08:50
  5. Einfaches Timing-Programm - brauche Hilfe
    Von Powell im Forum Elektronik
    Antworten: 6
    Letzter Beitrag: 23.08.2006, 20:58

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

    Werbung      12V Akku bauen