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
Rainbow File geht nicht zum compilieren!!!! Jocky 6 92 Heute 14:14
Letzter Beitrag: hotsystems
  IRremote bringe ich nicht zum laufen Franz54 5 67 Heute 11:56
Letzter Beitrag: Tommy56
  Code aus 1.6.9 geht mit 1.8.1 nicht mehr zu kompilieren DL1AKP 7 249 02.02.2017 12:16
Letzter Beitrag: Tommy56
  Arduino Läst sich nicht Programmieren Micha06 4 176 29.01.2017 17:27
Letzter Beitrag: Micha06
  Nicht verzagen Forum fragen bergfrei 13 398 28.01.2017 06:09
Letzter Beitrag: dqb312
  Sloeber findet meinen Com Port nicht :-( Pfeilebastler 2 101 27.01.2017 11:11
Letzter Beitrag: hotsystems
  Array, SD Read, Write Binär nilsconrad 14 245 25.01.2017 14:28
Letzter Beitrag: nilsconrad
  nRF24l01 empfängt Daten nicht techniclover 1 180 09.01.2017 19:20
Letzter Beitrag: celle
  [Gelöst] SD Card (Ethernet Shield) IO funktioniert nicht __jb__ 7 404 05.01.2017 09:51
Letzter Beitrag: rpt007
Wink Funktioniert, funktioniert nicht. clandestino 7 329 04.01.2017 22:54
Letzter Beitrag: renid55

Gehe zu:


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