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

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

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);

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
  Arduino lässt sich nicht installieren bergfrei 4 154 20.11.2016 18:34
Letzter Beitrag: bergfrei
  Arduino Mega 2560 läuft nicht Wolfgang50 6 189 13.11.2016 10:50
Letzter Beitrag: Wolfgang50
  Ardublock übertragt nicht an IDE oder UNO R3 tobi83 5 361 16.10.2016 14:07
Letzter Beitrag: Pit
  Upload funktioniert nicht Levi 5 250 22.09.2016 20:19
Letzter Beitrag: hotsystems
  ESP8266 tuts nicht sowerum 7 397 19.09.2016 21:01
Letzter Beitrag: sowerum
  SD Karte wird nicht erkannt... Maxi290997 2 209 16.08.2016 14:36
Letzter Beitrag: Maxi290997
  Arduino lässt sich nicht mehr beschreiben Maxi290997 15 989 07.08.2016 11:40
Letzter Beitrag: Maxi290997
  Serial.write Mathias 6 387 29.07.2016 17:06
Letzter Beitrag: Mathias
  Arduino Uno+Motor Shield+Velleman Mustercode funktionieren nicht Dubidu 8 492 20.07.2016 19:05
Letzter Beitrag: Scheams
  Sketch konnte nicht angelegt werden Sarius 2 244 16.07.2016 15:59
Letzter Beitrag: Sarius

Gehe zu:


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