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
- 98 Aufrufe
- Zitieren
Ä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
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...
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
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
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
und nochmal :)
Also prinzipiell funktioniert der Arduino Pro... das Example Sketch bringt auch wie gewünscht LED 13 zum blinken.. :)
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 ?...
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)
Grüße Uwe
Kommentar hinzufügen