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 erkennt eine Phase nicht
30.01.2019, 13:00 (Dieser Beitrag wurde zuletzt bearbeitet: 30.01.2019 14:19 von DonSonora.)
Beitrag #1
Switch erkennt eine Phase nicht
Hallo Angel

ich will folgendes:

Taste als Start , dann sollen die Leds abwechselnd ein und ausschalten. Also ein Automat.

Jedoch ignoriert der switch die Phase Start und wartet nicht auf die Aktivierung der Taste.

Funktioniert es im Switch nicht?

Falls nicht, wo kann ich die Starttaste einbauen ( später auch eine Stopptaste)

LG Thomas

Hier der script:


EDIT: mit Kommentare

Code:
byte LED1 = 11;
byte LED2 = 10;
byte LED3 = 9;
byte LED4 = 6;




enum Phase {START, ON1, OFF1, ON2, OFF2}; // "Namen" fuer die Phasen
int d[] = {1000, 1000, 1000, 1000};


Phase phase;  // das verstehe ich nicht, was das macht. Phase ist nicht in Farbe blau


const int button1 = 2;


int State1 = 0;

unsigned long int millisMem; // Merker fuer millis()



void setup()
{
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
  pinMode(LED3, OUTPUT);
  pinMode(LED4, OUTPUT);

phase = START;  // da keine Wirkung
  millisMem = millis();
  pinMode(button1, INPUT_PULLUP);

}

void loop()
{
  switch (phase)
  { case START:  State1 = digitalRead(button1);   // da soll er auf Befehl warten, Erst Start, wenn Taste gedrückt ist)
      if (button1 == LOW)    // in meinem Fall wird dieser case START einfach ignoiert bzw übersprungen.

      { digitalWrite(LED1, LOW);
        digitalWrite(LED2, LOW);
        digitalWrite(LED3, HIGH);
        digitalWrite(LED4, LOW);
      }
      else
      {
        phase = ON1;
      }
      break;
    case ON1:   // ab da läuft perfekt
      if (millis() - millisMem < d[0])
      { digitalWrite(LED1, HIGH);
        digitalWrite(LED2, LOW);
        digitalWrite(LED3, LOW);
        digitalWrite(LED4, LOW);
      }
      else
      {
        phase = OFF1;
      }
      break;
    case OFF1:
      if (millis() - millisMem < d[0] + d[1])
      { digitalWrite(LED1, LOW);
        digitalWrite(LED2, HIGH);
        digitalWrite(LED3, LOW);
        digitalWrite(LED4, LOW);
      }
      else
      {
        phase = ON2;
      }
      break;
    case ON2:
      if (millis() - millisMem < d[0] + d[1] + d[2])
      { digitalWrite(LED1, LOW);
        digitalWrite(LED2, LOW);
        digitalWrite(LED3, HIGH);
        digitalWrite(LED4, LOW);
      }
      else
      {
        phase = OFF2;
      }
      break;
    case OFF2:
      if (millis() - millisMem < d[0] + d[1] + d[2] + d[3])
      { digitalWrite(LED1, LOW);
        digitalWrite(LED2, LOW);
        digitalWrite(LED3, LOW);
        digitalWrite(LED4, HIGH);
      }
      else
      {
        phase = ON1;
        millisMem = millis();
      }
      break;
  }


}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.01.2019, 13:39
Beitrag #2
RE: Switch erkennt eine Phase nicht
Stelle Deinen Sketch bitte in Codetags.
Wie das geht, steht hier.
Das kannst Du auch noch nachträglich ändern.
Code:
if (button1 == LOW)
button1 ist A0 das willst Du bestimmt nicht abfragen.

Etwas Einrückung (<Strg>+T in der IDE hilft Dir dabei) würde die Lesbarkeit erhöhen.

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
30.01.2019, 13:42 (Dieser Beitrag wurde zuletzt bearbeitet: 30.01.2019 14:19 von DonSonora.)
Beitrag #3
RE: Switch erkennt eine Phase nicht
Danke,

hier die bessere Lesbarkeit des Scripts am Anfang: ( bearbeitet)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.01.2019, 13:47
Beitrag #4
RE: Switch erkennt eine Phase nicht
Wieso ist der besser lesbar ?
Tommy schrieb doch, du möchtest Code-Tags verwenden, nur dann ist der für alle besser lesbar.
Zumindest hast du es versucht und kannst es noch berichtigen.
[code*] am Anfang und [*/code] am Ende, aber ohne die Sterne.

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.01.2019, 13:51 (Dieser Beitrag wurde zuletzt bearbeitet: 30.01.2019 13:53 von DonSonora.)
Beitrag #5
RE: Switch erkennt eine Phase nicht
(30.01.2019 13:47)hotsystems schrieb:  Wieso ist der besser lesbar ?
Tommy schrieb doch, du möchtest Code-Tags verwenden, nur dann ist der für alle besser lesbar.
Zumindest hast du es versucht und kannst es noch berichtigen.
[code*] am Anfang und [*/code] am Ende, aber ohne die Sterne.

Sorry, ich bin noch grün hier. Habe das geändert. Hoffe, es passt so?

LG
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.01.2019, 13:55 (Dieser Beitrag wurde zuletzt bearbeitet: 30.01.2019 14:00 von hotsystems.)
Beitrag #6
RE: Switch erkennt eine Phase nicht
(30.01.2019 13:51)DonSonora schrieb:  
(30.01.2019 13:47)hotsystems schrieb:  Wieso ist der besser lesbar ?
Tommy schrieb doch, du möchtest Code-Tags verwenden, nur dann ist der für alle besser lesbar.
Zumindest hast du es versucht und kannst es noch berichtigen.
[code*] am Anfang und [*/code] am Ende, aber ohne die Sterne.

Sorry, ich bin noch grün hier. Habe das geändert. Hoffe, es passt so?

LG

Alles klar, so passt es und ist auch lesbar.

Allerdings komme ich mit einer verschachtelten If-Abfrage und Switch-Case nicht klar.

Kannst du da noch ein paar Kommentare zu schreiben, damit wir auch erkennen was da passieren soll.

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.01.2019, 14:02
Beitrag #7
RE: Switch erkennt eine Phase nicht
Auf einen Fehler hatte ich Dich ja bereits hingewiesen.

Mir fehlt in Deinem Ablauf der initiale Zustand AUS. Aus dem würde ich erst über den Button in den Status START wechseln.

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
30.01.2019, 14:18 (Dieser Beitrag wurde zuletzt bearbeitet: 30.01.2019 14:36 von MicroBahner.)
Beitrag #8
RE: Switch erkennt eine Phase nicht
Hallo Thomas,
Tommy hat dir dein Problem ja schon gesagt:
(30.01.2019 13:39)Tommy56 schrieb:  
Code:
if (button1 == LOW)
button1 ist A0 das willst Du bestimmt nicht abfragen.
aber ich glaube, Du hast seinen Hinweis falsch interpretiert. Du kannst natürlich den Pin A0 für den Taster nehmen. Du darfst aber in der Abfrage nicht den (konstanten) Wert 'A0' vergleichen, sondern den Zustand am Pin A0. Den liest Du in der Zeile davor schon in die Variable State1 ein. Also musst Du in der if-Abfrage mit der Variablen State1 vergleichen.
Ausserdem kommt es jetzt noch darauf an, wie der Taster angeschlossen ist. Da Du für Button1 'INPUT_PULLUP' verwendest, nehme ich an, dass er gegen Gnd schaltet. Dann ist der Eingang im Ruhezustand auf HIGH, was bei deiner Abfrage sofort den else-Zweig ausführen lässt -> und schon geht es los mit Blinken Wink . Du musst also auf HIGH vergleichen, damit erst beim Drücken der Taste ( =LOW) der else-Zweig ausgeführt wird.

Code:
enum Phase {START, ON1, OFF1, ON2, OFF2}; // "Namen" fuer die Phasen
int d[] = {1000, 1000, 1000, 1000};

Phase phase;  // das verstehe ich nicht, was das macht. Phase ist nicht in Farbe blau
Mit 'enum Phase ... ' definierst Du einen neuen VariablenTyp, der nur die Werte START ... OFF2 annehmen kann.
Mit 'Phase phase;' legst Du nun eine Variable von diesem neuen Typ an.

Aber was meinst Du mit 'Phase ist nicht in Farbe blau' ??
Edit: Du meinst, dass die IDE das nicht in blau darstellt?. Datentypen, die Du neu definiert hast, kennt die IDE nicht ( erst der Compiler kennt das dann ), und deshalb kann die IDE das auch nicht entsprechend einfärben.

Gruß, Franz-Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
Wink Solar Roboter- Servo dreht nach Stopp nicht weiter Stagneth.Alexander 37 1.529 20.08.2019 14:15
Letzter Beitrag: geist4711
  myport nicht gefunden? - Arduino und Visual Studio Stagneth.Alexander 3 209 04.08.2019 17:38
Letzter Beitrag: Tommy56
  Atmega 328 Sketchl läuft auf UNO3, alleine auf Breadboard nicht delay 9 525 02.08.2019 15:03
Letzter Beitrag: hotsystems
  Reaktionsspiel funktioniert nicht, wie es sollte... Stagneth.Alexander 27 1.101 21.07.2019 07:57
Letzter Beitrag: Stagneth.Alexander
Question Programm läuft nicht richtig CMeeep 22 1.406 04.07.2019 21:58
Letzter Beitrag: Franz54
  Sleep Modus aktivieren (Reed-Switch Falle) Wochenendprogrammierer 20 1.100 01.07.2019 21:16
Letzter Beitrag: hotsystems
  2 Sketche zusammenführen - korrelieren nicht Nicolai 11 1.056 24.05.2019 11:04
Letzter Beitrag: Nicolai
  Bedingung wird nicht wiederholt ausgeführt Lite 16 1.290 29.03.2019 05:11
Letzter Beitrag: Lite
  Gelöst ==> Arduino Nano, Kommunikation mit PC bringt nicht korrekten ASCII moehrle 4 689 02.03.2019 22:04
Letzter Beitrag: hotsystems
  Typecasting oder nicht? Batucada 1 504 19.02.2019 18:51
Letzter Beitrag: Tommy56

Gehe zu:


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