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:
  • 1 Bewertungen - 5 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Enum mit Switch - Probleme
03.08.2014, 09:04
Beitrag #9
RE: Enum mit Switch - Probleme
Moin bk,
Zitat:hi Ricardo, ich grübel grad auch rum und bin momentan auf der Rille das die switch case Geschichte einen Integerwert als Auswahlvariable benötigt und die könnte man doch aus dem Laufindex von der enum Aufzählung gewinnen können sofern enum Strings beherrscht.
Auf diesen Zug bin ich auch gesprungen. Man könnte ja anstatt der enum mit Strings auch ein String-Array nehmen. Das analogRead auf eine String-Variable als Vergleichswert ist ja kein Problem. Was aber problematisch ist, ist dann der Vergleich zwischen dem eingelesenen String und einem Element des String-Array. Der will einfach nicht triggern... Huh
Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.08.2014, 09:24
Beitrag #10
RE: Enum mit Switch - Probleme
(03.08.2014 09:04)rkuehle schrieb:  Moin bk,
Zitat:hi Ricardo, ich grübel grad auch rum und bin momentan auf der Rille das die switch case Geschichte einen Integerwert als Auswahlvariable benötigt und die könnte man doch aus dem Laufindex von der enum Aufzählung gewinnen können sofern enum Strings beherrscht.
Auf diesen Zug bin ich auch gesprungen. Man könnte ja anstatt der enum mit Strings auch ein String-Array nehmen. Das analogRead auf eine String-Variable als Vergleichswert ist ja kein Problem. Was aber problematisch ist, ist dann der Vergleich zwischen dem eingelesenen String und einem Element des String-Array. Der will einfach nicht triggern... Huh
Grüße Ricardo
Moin Ricardo,
..oh...nun müßte ich meine Denkmaschine aktivieren....bin aber gerade aufm Sprung in die Therme...mache mir Heute nen entspannten Tag..Wink..bis Heute Abend.
lg
bk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.08.2014, 20:18
Beitrag #11
RE: Enum mit Switch - Probleme
Der folgende Code sammelt die Eingaben von Serial und macht daraus ein Command. Dieses wird dann mit den Elementen des Auswahl-Array verglichen.
Bei Treffer kommt dann die entsprechende Anzeige hoch.
Was zur Zeit nicht richtig funktioniert ist die Serial.print Steuerung. Dies liegt daran, dass die char[] cmd und ausw am Anfang gleich sind. Mir fehlt im Moment jedoch die passende Lampe/Erleuchtung um dies zu korrigieren.
Vielleicht kann ja jemand weiter am Code feilen.
Grüße Ricardo
Code:
//## Master ##
#include <Wire.h>
char character; // EinzelCharacter von SerialRead
String command = ""; // GesamtString von SerialRead
uint8_t CmdSize; // Laänge des GesamtString von SerialRead
char* Auswahl[] = {"Lue_slow_on", "Lue_slow_off", "A02_on", "A02_off", "a", "A"}; // Befehlsauswahl
String temp = ""; // Zwischenpuffer für ein Element aus Auswahl
uint8_t ArraySize = 6; // Anzahl Elemente Auswahl
uint8_t i; // Zähler

//----------------------
// Setup
//----------------------
void setup()
{
  Serial.begin(9600);
  Wire.begin();
}
//----------------------
// Loop
//----------------------
void loop()
{
  i = 99;
  command = "";
  while (Serial.available() > 0)
  {
    character = Serial.read();
    command.concat(character);
  }
  // Char[] aus GesamtString von SerialRead erstellen
  CmdSize = command.length();
  char cmd[CmdSize];
  command.toCharArray(cmd, CmdSize);
  for (i = 0; i < ArraySize; i++)
  {
    // Char[] aus GesamtString von Einzelelement von Auswahl erstellen
    char ausw[CmdSize];
    temp = Auswahl[i];
    temp.toCharArray(ausw, CmdSize);
    // Vergleich der Char[]s
    if (strcmp(cmd, ausw) == 0)
    {
      if (i == 0 ) Serial.println("Lue_slow_on gefunden");
      if (i == 1 ) Serial.println("Lue_slow_off gefunden");
      if (i == 2 ) Serial.println("A02_on gefunden");
      if (i == 3 ) Serial.println("A02_off gefunden");
      if (i == 4 ) Serial.println("a gefunden");
      if (i == 5 ) Serial.println("A gefunden");
      break;
    }
  }
}

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
03.08.2014, 21:54
Beitrag #12
RE: Enum mit Switch - Probleme
Hi,
braucht man für toCharArray nicht ein Zeichen mehr als die Länge des String? Die abschließende 0 muss auch noch reinpassen, oder?
Außerdem: Da command ein String ist, müsste doch auch direkt sowas gehen, oder:
Code:
if(command.equals(Auswahl[i]))
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.08.2014, 06:54 (Dieser Beitrag wurde zuletzt bearbeitet: 04.08.2014 13:11 von Bitklopfer.)
Beitrag #13
RE: Enum mit Switch - Probleme
Nachtrag um 14:10 Code um LED Ausgabe erweitert.

Moinsen,
also man kann das ganze auch schlanker machen ohne diese Vergleichsliste...
Ricardo deine Eingabe auf den String habe ich mal bei dir geklaut und das draus gemacht:
Code:
//## Master ##
#include <Wire.h>
//typedef enum {
//  Lue_slow_on, Lue_slow_off, A02_on, A02_off, A03_on, A03_off, A04_on, A04_off, A05_on, A05_off,
//  A06_on, A06_off, A07_on, A08_off, A09_on, A09_off, A10_on, A10_off,
//  c,C
//} Auswahl;

char zbuff;
String command = ""; // GesamtString von SerialRead

const byte led = 13;   // die uebliche LED aufm Board

//----------------------
// Setup
//----------------------
void setup()
{
  Wire.begin();
  Serial.begin(9600);
  Serial1.begin(9600);
  pinMode(led, OUTPUT);    
  Serial.println("START");   // BEREIT Meldung...
}


//----------------------
// Loop
//----------------------
void loop()
{

    command = "";
    while (Serial.available() > 0)
    {
    zbuff = Serial.read();
    delay(10);     // ohne delay werden nur einzelne Zeichen gelesen
    Serial.print(zbuff);
    command.concat(zbuff);
    }
    if(command != "")Serial.print("  <= Zeichenecho der Eingabe");
  
  if(command != ""){      // wenn Zeichen im String dann auswerten
    Serial.println("");   // Zeilenvorschub
    
    if(command == "A02_on"){
        Wire.beginTransmission(4);
        Wire.write('b');
        Serial.println("A02_on , Befehl erkannt");
        Wire.endTransmission();
    }
    if(command == "A02_off"){
        Wire.beginTransmission(4);
        Wire.write('b');
        Serial.println("A02_off , Befehl erkannt");
        Wire.endTransmission();
    }

    if(command == "Lue_slow_on"){
        Wire.beginTransmission(4);
        Wire.write('a');
        Serial.println("Lue_slow_on , Befehl erkannt");
        Wire.endTransmission();
    }
    if(command == "Lue_slow_off"){
        Wire.beginTransmission(4);
        Wire.write('A');
        Serial.println("Lue_slow_off , Befehl erkannt");
        Wire.endTransmission();
    }
    if(command == "c"){
        Wire.beginTransmission(4);
        Wire.write('c');
        Serial.println("c , Befehl erkannt");
        Wire.endTransmission();
    }
    if(command == "C"){
        Wire.beginTransmission(4);
        Wire.write('C');
        Serial.println("C , Befehl erkannt");
        Wire.endTransmission();
    }
    if(command == "a" || command == "A"){
        digitalWrite(led, 0);
        Serial.println("LED AUS");
    }
    if(command == "e" || command == "E"){
        digitalWrite(led, 1);
        Serial.println("LED EIN");
    }

    Serial.println("");   // Zeilenvorschub wegen der Uebersicht
    }  // Ende if command != ""

}
..das läuft auf jeden Fall mal. Ohne enum und swich case....janz brimidiv....Tongue
lg
bk
P.S. nun warte ich mal was die Auswahllistensparte noch auf den Tisch legt...Rolleyes
Das von Thorsten mit dem command.equals würde ich schon noch gerne komplett sehen...Smile

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.08.2014, 08:19
Beitrag #14
RE: Enum mit Switch - Probleme
Yuo Moin,

hätte ich auch selber drauf kommen können, dass man es gleich ohne Vergleichsarray macht. Spart Speicher und ist schlanker. Tja, manchmal sieht den Wald vor......
Frage:
Code:
if(command != "")Serial.print("  <= Zeichenecho der Eingabe");
if(command != ""){      // wenn Zeichen im String dann auswerten
    Serial.println("");   // Zeilenvorschub
Zweimal die gleiche Abfrage hintereinander mit verschiedenen Reaktionen ?
Grüße RK

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.08.2014, 11:02 (Dieser Beitrag wurde zuletzt bearbeitet: 04.08.2014 13:18 von Bitklopfer.)
Beitrag #15
RE: Enum mit Switch - Probleme
(04.08.2014 08:19)rkuehle schrieb:  Yuo Moin,

hätte ich auch selber drauf kommen können, dass man es gleich ohne Vergleichsarray macht. Spart Speicher und ist schlanker. Tja, manchmal sieht den Wald vor......
Frage:
Code:
if(command != "")Serial.print("  <= Zeichenecho der Eingabe");
if(command != ""){      // wenn Zeichen im String dann auswerten
    Serial.println("");   // Zeilenvorschub
Zweimal die gleiche Abfrage hintereinander mit verschiedenen Reaktionen ?
Grüße RK

Hi Ricardo,
...öhmm ja...drum wohne ich im Wald das ich die Bäume besser... Cool

Zum Zweiten, war bewußt so gemacht...zuerst hatte ich den Zeichenecho Verweis hinter der Zweiten Abfrage != "" integriert. ABER funktionell gehört diese Kommentarausgabe zu dem Seriel Abfrage Block und dient ja nur der Erklärung auf dem Seriellen Monitor weil da sonst z.B. das "c" ganz alleine in ner Zeile steht und keiner weiß wo's herkommt...ist also nur ein Debug Hilfmittel das auch ersatzlos weggelassen werden kann. Die Zweite Abfrage ist natürlich wichtig fürn Programmablauf.

Im übrigen bei deiner letzten geposteten Lösung mit dem ermitteln vom Index aus der Liste hättest dann wiederum switch case verwenden können anstelle der if's ...Big Grin

14:18 ..und da fällt mir gerade noch ein das die Listenvariante auch einen Vorteil hat und zwar wenn man die ganze Sache in Richtung Komfort treibt um z.B. ein Fragezeichen oder das Hilfe ersuchen bearbeiten will und dann alle möglichen Kommandos ausgeben möchte....dann braucht man nur noch die Liste rausschieben auf den Monitor...Idea
lg
bk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.08.2014, 14:06 (Dieser Beitrag wurde zuletzt bearbeitet: 04.08.2014 14:08 von alpenpower.)
Beitrag #16
RE: Enum mit Switch - Probleme....gelöst
Hallo,

so, ich bin wieder im Lande und am Projekt.
Ich hab die Vorlage #13 von Ricardo übernommen und soweit an meine Sache angepasst, bzw. erweitert. Die anderen Ansätze sind mir ehrlich gesagt zu unverständlich.
Anfangs hatte ich fast schon das gleiche Script erstellt....mit ein paar Fehlern.
Ich bin dann zu Enum abgedriftet und nun wieder zurückgekehrt.
Aber es klappt hervorragend, vielen lieben Dank an Euch.
Nun kann ich im Klartext die Befehle senden und der Slave versteht mich, schön.

Grüsse
Franz
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 614 04.10.2016 15:29
Letzter Beitrag: SpeedShifter
  ArduinoDroid Probleme Brother Tak 1 203 10.09.2016 22:12
Letzter Beitrag: Brother Tak
  Switch/Case mit chars phischmi 8 332 24.07.2016 21:00
Letzter Beitrag: phischmi
  Roboter-Bau Probleme blebbens 8 378 12.07.2016 07:35
Letzter Beitrag: Binatone
  Probleme mit sprintf() und dtostrf() GMBU 11 812 22.06.2016 10:52
Letzter Beitrag: GMBU
  Makeblock mit Scratch programmieren- Probleme Keinen Schimmer 6 965 06.05.2016 18:34
Letzter Beitrag: arduinopeter
  Programme vom UNO auf nano , mini Pro portieren Probleme anwo 19 1.176 17.04.2016 21:12
Letzter Beitrag: hotsystems
  Probleme beim Auslesen eines IR Empfängers linuxpaul 7 574 06.03.2016 14:44
Letzter Beitrag: hotsystems
  I²C vom NANO zum PI Probleme mit High/Low Bit Tobias1984 4 331 29.02.2016 00:00
Letzter Beitrag: hotsystems
  Probleme beim auswählen des Ports Levi 11 829 21.02.2016 18:00
Letzter Beitrag: hotsystems

Gehe zu:


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