Probleme mit SerialRead und if Anweisung

Hallo zusammen,

habe gestern meinerstes Arduino Pro Board bekommen und soweit auch in Betrieb genommen :)

Habe als Testprogramm folgendes Szenario versucht umzusetzen... leider scheint es da noch einen Denkfehler zu geben... :(

Es soll kontinuierlich der SerialPort gelesen und auf Asci 1 oder 0 abgefragt werden.
Wenn Wert =1 dann setze LED 13 auf high... wenn 0 dann auf Low...

Bei mit kommt jedoch keine Änderung des LED - Status ...

Mein Sketch sieht so aus... :)

const int ledPin = 13; // the pin that the LED is attached to
int incomingByte;      // a variable to read incoming serial data into
 
void setup() {
  // initialize serial communication:
  Serial.begin(9600);
  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);
 
 
}
 
void loop() {
 
  if (Serial.available() > 0) {
 
    incomingByte = Serial.read();
 
 
 
      if (incomingByte == '1') {
 
        digitalWrite(ledPin, HIGH);
      Serial.write(incomingByte);
      delay(1000);
    }
 
     if (incomingByte =='0') {
 
        digitalWrite(ledPin, LOW);
      Serial.write(incomingByte);
      delay(1000);
    }
 
 
  }
}
[blockcode]
Über einen kleinen Hinweis würde ich mich freuen :)
 
Danke und auf gute Zusammenarbeit :)
 
lg Demo


Ähnliche Artikel

Kommentare

hallo Derdemo

Wie schickst Du die 1 und 0? Benutzt Du die Tasten 1 und 0?
Dann schickst Du den ASHII-Wert von 0 und 1 (48 und 49 dezimal).
In der IF Anweisung vergleichst Du einen Integerwert mit einem Zeichen. (Äpfel mit Birnen)

Ändere Dein Programm wie folgt:
int incomingByte; -> char incomingByte;
Dann vergleichst Du 2 Buchstaben und dann geht's.
oder
if (incomingByte == '1') { -> if (incomingByte == 49) { // Zeichen 1
if (incomingByte == '0') { -> if (incomingByte == 48) { // Zeichen 0
Dann vergleichst du 2 Zahlen.

Taste 1 schaltet das LED 13 ein,
Taste 0 aus.

Grüße Uwe

Bild von derdemo

Hallo Uwe,

danke für die Antwort :)

Hast natürlich Recht mit den Äpfeln... :)

aber... habe alles abgeändert und es leutet immernoch keine LED...

const int ledPin = 13; // the pin that the LED is attached to
char incomingByte;      // a variable to read incoming serial data into
 
void setup() {
  // initialize serial communication:
  Serial.begin(9600);
  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);
 
 
}
 
void loop() {
 
  if (Serial.available() > 0) {
 
    incomingByte = Serial.read();
 
     Serial.write(incomingByte);
 
     if (incomingByte == 49){
 
        digitalWrite(ledPin, HIGH);
      Serial.write(incomingByte);
      delay(1000);
    }
 
 if (incomingByte == 48)  {
 
        digitalWrite(ledPin, LOW);
      Serial.write(incomingByte);
      delay(1000);
    }
 
 
  }
}

Serial.write(incomingByte); habe ich mal eingebaut, um zu sehen was da wirklich empfangen wird... und es wird immer schön alles angezeigt...

hmmm... komisch...

lg demo

Funktioniert doch wunderbar!

hallo derdemo

Jetzt vergleichst Du Birnen mit Äpfel ;-)

Wir haben uns falsch verstanden. Du mußt entweder den Typ der Variablen "incomingByte" ändern oder den Typ in der IF-bedingung.
Nicht beides.

Entschuldige Bitte meine unklare Antwort.

Viele Grüße Uwe

Bild von derdemo

Hallo Uwe,

Hmmm...irgendwie blick ich jetzt nicht ganz durch... wiesoweshalbwarum...

Laut deiner Aussage sollte das dann so funktionieren ?... (habe incomingByte wieder auf int umgestellt..)

der Serial Monitor gibt mir auch immer schön das gesendete zurück,... aber die LED bewegt sich nicht...

lg Demo

const int ledPin = 13; // the pin that the LED is attached to
// char incomingByte;      // a variable to read incoming serial data into
int incomingByte;      // a variable to read incoming serial data into 
 
void setup() {
  // initialize serial communication:
  Serial.begin(9600);
  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);
 
 
}
 
void loop() {
 
  if (Serial.available() > 0) {
 
    incomingByte = Serial.read();
 
     Serial.write(incomingByte);
 
     if (incomingByte == 49){
 
        digitalWrite(ledPin, HIGH);
      Serial.write(incomingByte);
      delay(1000);
    }
 
 if (incomingByte == 48)  {
 
        digitalWrite(ledPin, LOW);
      Serial.write(incomingByte);
      delay(1000);
    }
 
 
  }
}

hallo derdemo
Das Programm das Du jetzt eingefügt hast, funktioniert (kopiert, in Arduino 0017 eingefügt, kompiliert, Übertragen, Serial Monitor geöffnet, "1" "enter" , led an , "0" "enter", led aus, "010101010101010101" "enter", Led blinkt in 2 Sekundenrythmus).
Ich habe den Test auf einem Arduino 2009 gemacht , müßte aber ebenso auf dem Arduino PRO funktionieren.
Ich weiß nicht was, ich Dir raten kann.
Das LED auf dem Arduino funktioniert? Wenn du einen Sketch hochläds blinkt es kurz?
Wir hören uns.
Schönen Sonntag.
Uwe

Bild von derdemo

und nochmal :)

Also prinzipiell funktioniert der Arduino Pro... das Example Sketch bringt auch wie gewünscht LED 13 zum blinken.. :)

int ledPin =  13;    // LED connected to digital pin 13
void setup()   {                
  pinMode(ledPin, OUTPUT);     
}
void loop()                     
{
  digitalWrite(ledPin, HIGH);   // set the LED on
  delay(1000);                  // wait for a second
  digitalWrite(ledPin, LOW);    // set the LED off
  delay(1000);                  // wait for a second
}

Ich tippe mittlerweile auf ein Problem mit den Ascii Codes oder Schnittstelleneinstellungen ?!

Habe zum Testen einmal folgenden Code genommen, der bewirkt das die LED beim empfangen von Bytes für 5 sek leuchtet... das funktioniert dann auch...
Das Problem müsste dann also in der Auswertung der If Anweisung liegen ?...

 const int ledPin = 13; // the pin that the LED is attached to
int incomingByte;      // a variable to read incoming serial data into
//char incomingByte;      // a variable to read incoming serial data into 
 
void setup() {
  // initialize serial communication:
  Serial.begin(9600);
  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, HIGH);
 
 
}
 
void loop() {
 
  if (Serial.available() > 0) {
 
   incomingByte = Serial.read();
          digitalWrite(ledPin, HIGH);
          delay(5000);
 
    }
 
else
         {
       digitalWrite(ledPin, LOW);
         }
 
}

Ansonsten aber auch einen schönen Sonntag :)

lg Demo

hallo derdemo,
Da sind wir schon einen Schritt weiter.
Wenn der letzte Sketch funktioniert, dann kann es nur die IF Anweisung sein oder wie du die 1 oder 0 versendest.
Welche Zahlen gibt Dir folgender Sketch, wenn Du die 1 und 0 sendest? ( müßte 49 und 48 sein)

const int ledPin = 13; // the pin that the LED is attached to
// char incomingByte;      // a variable to read incoming serial data into
int incomingByte;      // a variable to read incoming serial data into 
int serialoutput;          // number of the sended character to send return to the PC  
 
void setup() {
  // initialize serial communication:
  Serial.begin(9600);
  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT); }
 
void loop() { 
  if (Serial.available() > 0) { 
     incomingByte = Serial.read(); 
      if (incomingByte == 49){ 
      digitalWrite(ledPin, HIGH);
      Serial.println(incomingByte);  // return ashii value of the sended character.
      delay(1000);
      } 
      if (incomingByte == 48)  { 
      digitalWrite(ledPin, LOW);
      Serial.println(incomingByte);
      delay(1000);
    } 
  }
}

Grüße Uwe

Kommentar hinzufügen

Der Inhalt dieses Feldes wird nicht öffentlich zugänglich angezeigt.
CAPTCHA
Diese Frage hat den Zweck zu testen, ob man ein menschlicher Benutzer ist und um automatisierten Spam vorzubeugen.
Leberwur_t: