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
  SD Karte wird nicht erkannt Maxi290997 6 195 31.03.2017 06:05
Letzter Beitrag: Bitklopfer
Sad Sketch funktioniert auf dem Mega 2560 nicht Frank1234 16 596 26.03.2017 14:15
Letzter Beitrag: oOSpikeOo
  Mein Skript macht nicht das was es soll ;( DerMatze79 4 224 16.03.2017 22:19
Letzter Beitrag: MicroBahner
  Programmablauf macht nicht das was ich möchte !! ESP + Blynk b3ta 3 203 01.03.2017 14:29
Letzter Beitrag: Tommy56
Rainbow File geht nicht zum compilieren!!!! Jocky 7 298 19.02.2017 20:01
Letzter Beitrag: Binatone
  IRremote bringe ich nicht zum laufen Franz54 5 231 19.02.2017 11:56
Letzter Beitrag: Tommy56
  Code aus 1.6.9 geht mit 1.8.1 nicht mehr zu kompilieren DL1AKP 7 424 02.02.2017 12:16
Letzter Beitrag: Tommy56
  Arduino Läst sich nicht Programmieren Micha06 4 318 29.01.2017 17:27
Letzter Beitrag: Micha06
  Nicht verzagen Forum fragen bergfrei 13 562 28.01.2017 06:09
Letzter Beitrag: dqb312
  Sloeber findet meinen Com Port nicht :-( Pfeilebastler 2 185 27.01.2017 11:11
Letzter Beitrag: hotsystems

Gehe zu:


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