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 mit chars
23.07.2016, 10:47
Beitrag #1
Switch/Case mit chars
Hallo zusammen,

ich habe grad einige Fragezeichen überm Kopf zur Verwendung von chars in switch/case-Abfragen Huh

Zunächst mal mein Code:

Code:
int motor = root["motor"];
    int value = root["value"];
    
    switch (motor) {
      case 1:
        fan->setSpeed(value);
        fan->run(FORWARD);
        Serial.println(value);
        break;
      case 2:
        gas->step(value, FORWARD, SINGLE);
        Serial.println(value);
        break;
      default:
        Serial.println("Kein Befehl erkannt");
        break;
    }
Funktioniert alles so, wie es soll Smile

Nun möchte ich die Motoren aber ungern nummerieren, sondern direkt mit "fan" und "stepper" ansprechen - der Übersichtlichkeit halber.
Wenn ich den Code nun wie folgt anpasse, erhalte ich beim kompilieren eine Fehlermeldung Undecided

Code:
char motor = root["motor"];
...
case "fan":

Zitat:...
invalid conversion from 'const char*' to 'int' [-fpermissive]

Was mache ich falsch, bzw. wie muss ich den Code anpassen?

Vielen Dank für eure Hilfe!

Philipp
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.07.2016, 13:15
Beitrag #2
RE: Switch/Case mit chars
Switch / case setzt echte Zahlen (int) vorraus, was Char eben nicht ist.

Über IF / Else könnte man die Char vergleichen.
Bei Übereinstimmung die INT auf den gewünschten Wert setzen und dann weiter wie gehabt.

Oder nach dem Vergleich direkt die Motoren steuern.

PS:
Dein Code ist nicht komplett, das mögen die alten Hasen hier im Forum nicht so gern.
Wink

Binatone
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.07.2016, 13:44
Beitrag #3
RE: Switch/Case mit chars
(23.07.2016 10:47)phischmi schrieb:  Hallo zusammen,

ich habe grad einige Fragezeichen überm Kopf zur Verwendung von chars in switch/case-Abfragen Huh

Zunächst mal mein Code:

Code:
int motor = root["motor"];
    int value = root["value"];
    
    switch (motor) {
      case 1:
        fan->setSpeed(value);
        fan->run(FORWARD);
        Serial.println(value);
        break;
      case 2:
        gas->step(value, FORWARD, SINGLE);
        Serial.println(value);
        break;
      default:
        Serial.println("Kein Befehl erkannt");
        break;
    }
Funktioniert alles so, wie es soll Smile

Nun möchte ich die Motoren aber ungern nummerieren, sondern direkt mit "fan" und "stepper" ansprechen - der Übersichtlichkeit halber.
Wenn ich den Code nun wie folgt anpasse, erhalte ich beim kompilieren eine Fehlermeldung Undecided

Code:
char motor = root["motor"];
...
case "fan":

Zitat:...
invalid conversion from 'const char*' to 'int' [-fpermissive]

Was mache ich falsch, bzw. wie muss ich den Code anpassen?

Vielen Dank für eure Hilfe!

Philipp

Ich würde mir mal den Datentyp enum anschauen.
enum ist eigentlich ein int, kann also mit case behandelt werden,
besteht aber aus einer aufgezählten Liste von Worten. (Aufzählungstyp)

z.B.
enum Motoren {SchnellerMotor, LangsamerMotor, KaputterMotor};
Motoren xx = LangsamerMotor

switch (xx)
...
...
case LangsamerMotor:
...
break;
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.07.2016, 14:30 (Dieser Beitrag wurde zuletzt bearbeitet: 23.07.2016 14:31 von phischmi.)
Beitrag #4
RE: Switch/Case mit chars
Danke für eure Antworten!
Ich würde das gern über switch/case lösen, da mir dies übersichtlicher erscheint, als if/else Undecided

Ich verstehe nicht ganz, wie ich das Problem mit enum lösen kann.
Hinter root[] verbirgt sich ein JsonObject in der Form
{"motor":"fan","value":130}
https://github.com/bblanchon/ArduinoJson...oding-JSON

Entschuldigt die vermeintlich blöden Fragen, aber Python ist noch recht neu für mich... Rolleyes
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.07.2016, 18:53
Beitrag #5
RE: Switch/Case mit chars
(23.07.2016 14:30)phischmi schrieb:  Entschuldigt die vermeintlich blöden Fragen, aber Python ist noch recht neu für mich... Rolleyes
Mit Python bist Du hier völlig falsch, hier geht es um C bzw. C++. Smile

Wenn sich Deine Motorbezeichnungen im ersten Buchstaben eindeutig unterscheiden, kannst Du das erste Zeichen des Motornamens verwenden. Für einzelne Zeichen funktioniert switch/case.

Gruß Tommy
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.07.2016, 01:33 (Dieser Beitrag wurde zuletzt bearbeitet: 24.07.2016 01:34 von phischmi.)
Beitrag #6
RE: Switch/Case mit chars
(23.07.2016 18:53)Tommy56 schrieb:  Mit Python bist Du hier völlig falsch, hier geht es um C bzw. C++. Smile

Big Grin
Um den Arduino steuern zu können versuche ich mir grad parallel Python beizubringen - das kommt dann dabei rum Rolleyes
Wie müsste denn die Syntax aussehen, damit es mit einem Buchstaben klappt bzw. als welchen Typ müsste ich die Variable motor definieren?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.07.2016, 14:41
Beitrag #7
RE: Switch/Case mit chars
Ich habe die Abfrage nun übrigens über if/else is gelöst.
Da es ohnehin nur zwei mögliche Inhalte für die Variable motor gibt, ist das noch ausreichend übersichtlich Smile
Danke für eure Hilfe!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.07.2016, 20:00
Beitrag #8
RE: Switch/Case mit chars
(24.07.2016 14:41)phischmi schrieb:  Ich habe die Abfrage nun übrigens über if/else is gelöst.
Da es ohnehin nur zwei mögliche Inhalte für die Variable motor gibt, ist das noch ausreichend übersichtlich Smile
Danke für eure Hilfe!

Schön, wenn es funktioniert. Es wäre gut, wenn Du Deinen fertigen Sketch noch rein stellen würdest, damit das Thema abgerundet ist.
Evtl. sucht jemand etwas ähnliches.

Gruß Tommy
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Unterschiedliche Programme durch Switch/ Case SpeedShifter 26 604 04.10.2016 15:29
Letzter Beitrag: SpeedShifter
  Problem Wiederholung eines Case im Switch via Bluetooth Ecki1212 6 898 16.09.2015 23:06
Letzter Beitrag: Ecki1212
  Switch Case, LEDs bleiben an, Bedingung aber falsch luto92 4 1.443 16.11.2014 16:52
Letzter Beitrag: luto92
  Enum mit Switch - Probleme alpenpower 17 5.384 08.08.2014 18:56
Letzter Beitrag: Bitklopfer

Gehe zu:


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