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
  Programm läuft auf UNO aber nicht auf ATTINY85 Diwo13 23 360 Gestern 23:09
Letzter Beitrag: hotsystems
  AT90CAN Interrupt wird nicht ausgelöst slsb02 5 255 19.11.2019 15:04
Letzter Beitrag: slsb02
  Nebelmaschine: Programmteile funktionieren nicht ChrisTastic 11 508 15.11.2019 09:08
Letzter Beitrag: hotsystems
  Nextion und Arduino kommunizieren nicht alpenpower 7 350 04.11.2019 10:36
Letzter Beitrag: GuaAck
  Button funktioniert nicht trotz korrekter Schaltung Schneggl 3 323 12.10.2019 08:17
Letzter Beitrag: Schneggl
  Eine Frage zu SPI Gary 3 453 01.10.2019 20:54
Letzter Beitrag: Gary
  Empfänger funktioniert nicht mehr jgrothe 5 501 06.09.2019 18:57
Letzter Beitrag: Tommy56
  myport nicht gefunden? - Arduino und Visual Studio Stagneth.Alexander 4 574 04.09.2019 14:16
Letzter Beitrag: Stagneth.Alexander
  UDP send oder print ??? Ich kapiers nicht HarryB 5 529 03.09.2019 13:06
Letzter Beitrag: Tommy56
Wink Solar Roboter- Servo dreht nach Stopp nicht weiter Stagneth.Alexander 37 2.893 20.08.2019 14:15
Letzter Beitrag: geist4711

Gehe zu:


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