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
ExclamationMit zunehmender Anzahl qualifizierter Informationen bei einer Problemstellung, erhöht sich zwangsläufig die Gefahr auf eine zielführende Antwort.Exclamation
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
ExclamationMit zunehmender Anzahl qualifizierter Informationen bei einer Problemstellung, erhöht sich zwangsläufig die Gefahr auf eine zielführende Antwort.Exclamation
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
ExclamationMit zunehmender Anzahl qualifizierter Informationen bei einer Problemstellung, erhöht sich zwangsläufig die Gefahr auf eine zielführende Antwort.Exclamation
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
  BME280 wird nicht erkannt sowerum 14 287 10.12.2017 22:14
Letzter Beitrag: Tommy56
  Echtzeituhrmodul läuft nicht scritch 21 687 30.11.2017 10:44
Letzter Beitrag: Tommy56
  Bootloader lässt sich nicht brennen?? dobermann145 10 581 21.11.2017 22:58
Letzter Beitrag: hotsystems
Sad Nano - nicht genug Speicher torsten_156 10 648 30.10.2017 21:40
Letzter Beitrag: MicroBahner
  NeoPixels: Sketch will nicht - Problem mit delay? Zabsi 5 508 22.08.2017 15:17
Letzter Beitrag: Tommy56
  BME280 - Luftdruckoffset nicht einstellbar ? Stargazer 17 1.314 13.08.2017 15:38
Letzter Beitrag: hotsystems
  Arduino funktioniert immer erst nach reset Maxi290997 11 1.065 25.07.2017 09:38
Letzter Beitrag: Maxi290997
  Serial.write fraju 5 961 23.07.2017 21:57
Letzter Beitrag: Mathias
  Ich komme mit millis nicht weiter !!! Gonmaus 8 959 09.07.2017 21:24
Letzter Beitrag: Tommy56
  WEMOS Motorshield funzt nicht Rumpl-X 8 800 07.06.2017 21:10
Letzter Beitrag: Tommy56

Gehe zu:


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