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
  Probleme Serieller Kommunikation Arduino Nextero 13 292 12.12.2017 16:47
Letzter Beitrag: hotsystems
  Makeblock mit Scratch programmieren- Probleme Keinen Schimmer 13 2.810 08.12.2017 15:17
Letzter Beitrag: Drahreg
  Probleme mit multiplexing Thor Wallhall 50 1.948 01.11.2017 21:15
Letzter Beitrag: Thor Wallhall
  switch case huber5093 8 567 08.10.2017 15:44
Letzter Beitrag: hotsystems
  Interrupt und I2C gibt das Probleme? Badger1875 5 345 03.10.2017 23:26
Letzter Beitrag: GuaAck
Big Grin Probleme mit pgm_read_word NoGi 9 1.625 23.04.2017 10:09
Letzter Beitrag: NoGi
  switch case funktion ausser halb loop ??? huber5093 13 1.776 12.04.2017 15:26
Letzter Beitrag: Tommy56
  Probleme mit einem Sketch für einen LED Cube 5x5x5 Frank1234 5 590 13.03.2017 12:12
Letzter Beitrag: Tommy56
  Probleme bei Countdown ferdi 0 405 23.01.2017 10:45
Letzter Beitrag: ferdi
  Unterschiedliche Programme durch Switch/ Case SpeedShifter 26 1.747 04.10.2016 15:29
Letzter Beitrag: SpeedShifter

Gehe zu:


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