INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
If-Bedingung funktioniert nicht bei Serial1.write
16.09.2016, 14:55
Beitrag #1
If-Bedingung funktioniert nicht bei Serial1.write
Hallo zusammen,

in dem unten stehenden Programm empfange ich per serieller Schnittstelle Daten vom PC und verarbeitet sie in einer If-Bedingung, d.h. ich lasse bei einem bestimmten empfangenen Wert eine LED blinken. Das funktioniert einwandfrei.

Sobald ich in dem Programm den Befehl Serial1.write verwende, wird die If-Bedingung nicht mehr durchlaufen, bzw. die LED blinkt nicht mehr. Warum?

Vielen Dank für eure Hilfe.

Code:
String  inputString    = "";
boolean stringComplete = false;
char    inputChar[256] = "0";
int     seriParaLaenge = 256;
void setup() {
  Serial1.begin(9600);
  pinMode(13, OUTPUT);
}

void loop() {
  if (stringComplete)
  {
    //  if (inputString.substring(3,1) == "9")//(0,4) == "A180")
    if (inputString == "1239\r")
    {
      digitalWrite(13, HIGH);
      delay(50);
      digitalWrite(13, LOW);
      delay(10);
    }

// Sobald der nächste Block im Programm enthalten ist, wird die vorherige
// If-Bedingung nicht mehr durchlufen, bzw. die LED blinkt nicht mehr. Warum?
    char outChar[] = "nnnn";
    inputString.toCharArray(outChar, 5);
    Serial1.write(outChar);
    delay(10);
    Serial1.write( '\r' );
    delay(100);

    inputString = "";
    stringComplete = false;
  }
}

void serialEvent1() {
  while (Serial1.available())
  {
    char inChar = (char)Serial1.read();
    inputString += inChar;

    if (inChar == '\r')
    {
      stringComplete = true;
    }
  }
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.09.2016, 15:20
Beitrag #2
RE: If-Bedingung funktioniert nicht bei Serial1.write
Hallo,

am Ende der If-Bedingung schreibst du:
Code:
stringComplete = false;
Am Anfang der If-Bedingung schreibst du:
Code:
if (stringComplete)

Die Bedingung ist dann immer "false" und deshalb wird loop() auf:
Code:
void loop() {
  if (stringComplete)
}
reduziert.
Mehr macht das Programm dann nicht mehr.

Gruß
Arne

Gruß Arne
Mit zunehmender Anzahl qualifizierter Informationen bei einer Fragestellung, erhöht sich zwangsläufig die Gefahr auf eine zielführende Antwort.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.09.2016, 15:54
Beitrag #3
RE: If-Bedingung funktioniert nicht bei Serial1.write
(16.09.2016 15:20)ardu_arne schrieb:  Hallo,

am Ende der If-Bedingung schreibst du:
Code:
stringComplete = false;
Am Anfang der If-Bedingung schreibst du:
Code:
if (stringComplete)

Die Bedingung ist dann immer "false" und deshalb wird loop() auf:
Code:
void loop() {
  if (stringComplete)
}
reduziert.
Mehr macht das Programm dann nicht mehr.

Gruß
Arne

Ganz unten wird in der Funktion serialEvent1 wird der Wert von stringCompete wieder auf true gesetzt.

Wenn ich den Befehl serial1.write weglasse, wird die If-Bedingung durchlaufen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.09.2016, 16:01
Beitrag #4
RE: If-Bedingung funktioniert nicht bei Serial1.write
Wo wird den "serialEvent1()" aus loop() heraus aufgerufen?
Funktionen die nicht aufgerufen werden, werden auch nicht abgearbeitet!

Gruß
Arne

Gruß Arne
Mit zunehmender Anzahl qualifizierter Informationen bei einer Fragestellung, erhöht sich zwangsläufig die Gefahr auf eine zielführende Antwort.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.09.2016, 16:14
Beitrag #5
RE: If-Bedingung funktioniert nicht bei Serial1.write
(16.09.2016 16:01)ardu_arne schrieb:  Wo wird den "serialEvent1()" aus loop() heraus aufgerufen?
Funktionen die nicht aufgerufen werden, werden auch nicht abgearbeitet!

Gruß
Arne

Serial1.event wird ausgeführt sobald das Ereigniss "Daten empfangen" eintritt. Diese Funktion wird nicht aus dem Programm heraus angesteuert.

Wie gesagt, wenn ich den Befehl serial1.write weglasse funktioniert ja auch alles.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.09.2016, 16:33
Beitrag #6
RE: If-Bedingung funktioniert nicht bei Serial1.write
Oh, ich war da wohl auf den falschen Dampfer und musste mich selbst erst mal schlau lesen. serialEvent() hatte ich selbst noch nicht verwendet.

Es fehlt so wie ich das sehe die Angabe der Puffergröße in setup().
Code:
inputString.reserve(200);

Gruß Arne
Mit zunehmender Anzahl qualifizierter Informationen bei einer Fragestellung, erhöht sich zwangsläufig die Gefahr auf eine zielführende Antwort.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
16.09.2016, 20:36 (Dieser Beitrag wurde zuletzt bearbeitet: 16.09.2016 20:37 von Datatom.)
Beitrag #7
RE: If-Bedingung funktioniert nicht bei Serial1.write
(16.09.2016 16:33)ardu_arne schrieb:  Oh, ich war da wohl auf den falschen Dampfer und musste mich selbst erst mal schlau lesen. serialEvent() hatte ich selbst noch nicht verwendet.

Es fehlt so wie ich das sehe die Angabe der Puffergröße in setup().
Code:
inputString.reserve(200);

inputString.reserve hat jetzt keine Änderung ergeben. Es funktioniert damit auch nicht.

Ich habe Serial1.write mit in die If-Bedingung geschrieben und nun geht es. Das reicht mir vollkommen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Wire.write und Client Socket LiVe 3 123 11.01.2019 13:51
Letzter Beitrag: Tommy56
  Problem mit Displayanzeige LCD2004 bzw. nicht Richtig magnum1795 39 1.169 18.12.2018 08:15
Letzter Beitrag: magnum1795
  Elegoo Mega 2560 R3 lässt sich nicht programieren Union1925 6 336 03.12.2018 21:21
Letzter Beitrag: Tommy56
Rainbow Sketch lässt sich nicht editieren HKestermann 3 330 03.11.2018 11:23
Letzter Beitrag: Hilgi
  Befehl wird nicht ausgeführt renesworld 15 687 19.10.2018 12:37
Letzter Beitrag: hotsystems
  Anfänger bekommt den Sketch nicht zum Laufen Maschinenbauer 6 728 06.10.2018 21:01
Letzter Beitrag: Tommy56
  Messwert auf OLED 0,96" SSD1306 darstellen geht nicht alpenpower 8 1.257 17.09.2018 10:56
Letzter Beitrag: alpenpower
  [gelöst]String, char .... ich begreife es einfach nicht - char Array <> mit SDexist christian@schiltkamp.info 10 1.234 31.08.2018 23:05
Letzter Beitrag: Tommy56
  LED an Pin13 geht nicht aus. uweq 7 726 24.08.2018 12:31
Letzter Beitrag: uweq
  [selbst gelöst] Register von Inline-Assembler-Anweisung vorher nicht gesetzt => Bug? Addi 2 389 24.08.2018 08:11
Letzter Beitrag: Addi

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste