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
switch case
07.10.2017, 23:04 (Dieser Beitrag wurde zuletzt bearbeitet: 08.10.2017 11:02 von ardu_arne.)
Beitrag #1
switch case
Hallo,

ich habe hier folgenden Code. wenn ich jetzt mit dem Seriellen Monitor a-e sende gehen die Lampen anden Ports an. Aber nicht mehr aus. Warum??

ich dachte, wenn jetzt case a Aktiv ist. Und ich sende b, wird case b Aktiv, aber a trifft ja dann nicht mehr zu, also müsste es ja wieder ausgehen ?

was mache ich hier falsch?
Code:
// Serielle Daten


char empfangeneDaten = 0;


void setup()
{
    // Konfiguration serielle Schnittstelle
    Serial.begin(9600);  // Uebertragungsgeschwindigkeit
    
    pinMode(13,OUTPUT);
    pinMode(5,OUTPUT);
    pinMode(2,OUTPUT);
    pinMode(3,OUTPUT);
    pinMode(4,OUTPUT);
}

void loop()

{
    // Serielle Daten sind vorhanden
    if (Serial.available() > 0) {
        // Daten einlesen
        empfangeneDaten = Serial.read();
        // Ausgabe des empfangenen Wertes
        Serial.print("Du hast ");
        Serial.print(empfangeneDaten);
        Serial.println(" gesendet.");
    }
    
    switch(empfangeneDaten)
    
    {
      case 'a': digitalWrite(2,HIGH); break;    
      case 'b': digitalWrite(3,HIGH); break;    
      case 'c': digitalWrite(4,HIGH); break;    
      case 'd': digitalWrite(5,HIGH); break;    
      case 'e': digitalWrite(13,HIGH); break;    
      
     // default:  digitalWrite(2,HIGH);
             //    digitalWrite(3,HIGH);
            //      digitalWrite(4,HIGH);
            //       digitalWrite(5,HIGH);break;
    }

    

    
}
Edit: Codebereich formatiert
[Bild: attachment.php?aid=2177]
Anleitung dazu ,bitte lesen und künftig selbst anwenden.Wink

Gruß Arne
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.10.2017, 09:44
Beitrag #2
RE: switch case
(07.10.2017 23:04)huber5093 schrieb:  was mache ich hier falsch?

1. Dein Sketch ist sehr schlecht lesbar, da du keine Code-Tags verwendest.
2. Du musst die Led auch wieder ausschalten. Ohne eine richtige Anweisung "digitalWrite(5, LOW)" bleibt die Led an.

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.10.2017, 13:46
Beitrag #3
RE: switch case
(08.10.2017 09:44)hotsystems schrieb:  
(07.10.2017 23:04)huber5093 schrieb:  was mache ich hier falsch?

1. Dein Sketch ist sehr schlecht lesbar, da du keine Code-Tags verwendest.
2. Du musst die Led auch wieder ausschalten. Ohne eine richtige Anweisung "digitalWrite(5, LOW)" bleibt die Led an.

Ok, aber wo schreibe ich denn das hin bei Default ? wenn ich es bei a reinschreibe, dann wird es angeschaltet und wieder aus ?

wenn a aktiv led ein, wenn b aktiv led aus und b ein.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.10.2017, 14:04
Beitrag #4
RE: switch case
Du musst Dir erst mal klar werden wie Du steuern willst. Da gibt es viele Varianten:

a) A= Led 1 ein - a = Led 1 aus, B = Led 2, b = Led 2 aus , ...
b) 1.Mal a = Led 1 ein, 2. Mal a = Led 1 aus, ...
c) a schaltet Led 1 ein, b schaltet Led 1 aus und Led 2 ein, c ...

Jede dieser Varianten wird anders aufgebaut und hat andere Möglichkeiten.
a) und c) sind am Einfachsten, bei b) musst Du Dir den Status der LED merken

Ansonsten gewöhne Dir gleich am Anfang ordentliches Einrücken an, das hilft Dir und uns schneller den Überblick zu behalten / zu bekommen.
<Strg>+T in der IDE hilft Dir dabei.

Das mit den Codetags hat Dir Hotsystems ja schon geschrieben. Wie das geht, steht hier.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.10.2017, 14:47
Beitrag #5
RE: switch case
(08.10.2017 13:46)huber5093 schrieb:  wenn a aktiv led ein, wenn b aktiv led aus und b ein.
Ich glaube, Du hast eine falsche Vorstellung von der Funktion der switch Anweisung. Die cases sind keine Zustände, die aktiv oder inaktiv sind. Im Prinzip ist es auch nicht viel anders als eine Kette von if-Anweisungen.
In deinem Fall: wenn Du ein 'a' empfängst, werden die Anweisungen von case 'a' ausgeführt. wenn Du ein 'b' empfängst, werden die Anweisungen von case 'b' ausgeführt. Willst Du, dass die Led, die bei Empfang von 'a' eingeschaltet wurde, beim Empfang von 'b' wieder ausgeschaltet wird, musst Du das im case 'b' auch tun.

Ausserdem musst Du berücksichtigen, dass loop() ja eine Dauerschleife ist, und dein switch daher ständig ausgeführt wird. Hast Du einmal z.B. ein 'a' empfangen und damit deine Variable 'empfangeneDaten' auf 'a' gesetzt, so wird in jedem loop-Durchlauf das case 'a' ausgeführt. case default: wird nur ausgeführt, wenn Du ein Zeichen empfängst, dass ein keinem case vorkommt.

Gruß, Franz-Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.10.2017, 14:57
Beitrag #6
RE: switch case
(08.10.2017 14:47)MicroBahner schrieb:  Ausserdem musst Du berücksichtigen, dass loop() ja eine Dauerschleife ist, und dein switch daher ständig ausgeführt wird. Hast Du einmal z.B. ein 'a' empfangen und damit deine Variable 'empfangeneDaten' auf 'a' gesetzt, so wird in jedem loop-Durchlauf das case 'a' ausgeführt.
Das kann man ja abfangen, indem man 'empfangeneDaten' am Loopanfang auf z.B. 'z' setzt.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.10.2017, 15:19 (Dieser Beitrag wurde zuletzt bearbeitet: 08.10.2017 15:24 von MicroBahner.)
Beitrag #7
RE: switch case
(08.10.2017 14:57)Tommy56 schrieb:  Das kann man ja abfangen, indem man 'empfangeneDaten' am Loopanfang auf z.B. 'z' setzt.
Das stimmt, aber man muss es dann eben auch tun Smile
Man könnte auch den ganzen switch in die Abfrage packen, ob überhaupt ein Zeichen angekommen ist, dann würde er nur einmal bei jedem Zeichenempfang ausgeführt.
Bei deiner Lösung würde ohne Zeichenempfang immer der default-Zweig ausgeführt.
Alles eine Frage, wie es der TO haben will Rolleyes

Meine Antwort bezog sich darauf, wie es jetzt ist, da ich glaube, dass der Ablauf dem TO noch nicht ganz klar ist.

Gruß, Franz-Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.10.2017, 15:33
Beitrag #8
RE: switch case
(08.10.2017 15:19)MicroBahner schrieb:  Meine Antwort bezog sich darauf, wie es jetzt ist, da ich glaube, dass der Ablauf dem TO noch nicht ganz klar ist.
Ja, warten wir mal, was er so meint.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  switch case funktion ausser halb loop ??? huber5093 13 2.795 12.04.2017 15:26
Letzter Beitrag: Tommy56
  Unterschiedliche Programme durch Switch/ Case SpeedShifter 26 3.522 04.10.2016 15:29
Letzter Beitrag: SpeedShifter
  Switch/Case mit chars phischmi 8 2.002 24.07.2016 21:00
Letzter Beitrag: phischmi
  Problem Wiederholung eines Case im Switch via Bluetooth Ecki1212 6 2.084 16.09.2015 23:06
Letzter Beitrag: Ecki1212
  Switch Case, LEDs bleiben an, Bedingung aber falsch luto92 4 2.494 16.11.2014 16:52
Letzter Beitrag: luto92
  Enum mit Switch - Probleme alpenpower 17 10.110 08.08.2014 18:56
Letzter Beitrag: Bitklopfer

Gehe zu:


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