# Schlummerfunktion

**URL:** <https://forum.arduino.cc/t/schlummerfunktion/956322>\
**Category:** Deutsch\
**Created:** [February 7, 2022, 4:40pm UTC](https://forum.arduino.cc/t/schlummerfunktion/956322 "2022-02-07T16:40:05Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![bukzi](https://avatars.discourse-cdn.com/v4/letter/b/e9a140/32.png) [@bukzi](https://forum.arduino.cc/u/bukzi)\
**Post date:** [February 7, 2022, 4:40pm UTC](https://forum.arduino.cc/t/schlummerfunktion/956322/1 "2022-02-07T16:40:05Z")

</div>

Hallo,

ich bin noch ein ziemlicher Neuling in der Programmierung und versuche gerade eine Art Schlummerfunktion zu programmieren, zunächst im Kleinen mit einer LED. Dabei soll die LED am Anfang leuchten und nachdem man den Taster betätigt hat für einen definierten Zeitraum ausgehen bevor sie sich erneut anschaltet und erst nachdem man den Taster ein zweites mal betätigt hat, völlig ausbleiben.

Dabei bin ich bis jetzt soweit, wobei die LED jedoch nur einmal ganz aus geht:

```cpp
int x=0;

int pinlrot=5;
bool rot=true;

int stat1;
int schaltr=9;

long Los;
long Start;

void setup() {

  Serial.begin(9600);
  
  pinMode(schaltr,INPUT_PULLUP);
  pinMode(pinlrot,OUTPUT);
  
  
}

void loop() {

  stat1=digitalRead(schaltr);
  
   
//---------------------------------------------------------
if(rot==true){
  digitalWrite(pinlrot, HIGH);
}
if(rot==false){
  digitalWrite(pinlrot, LOW);
}
//---------------------------------------------------------

Los=millis();

  
if((stat1==HIGH)&&(x==0))
{
  Start=millis();
  rot=false;

    if(Los-Start>1000){
    rot=true;
    x=1;
  }
}

if((stat1==HIGH)&&(x==1)){
  rot=false;
  Start=millis();
  x=2
}
}

```

Vielen Dank im Voraus.`Vorformatierter Text`

---

<div class="post-metadata">

**Author:** ![J-M-L](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/j-m-l/32/766245_2.png) [@J-M-L](https://forum.arduino.cc/u/J-M-L)\
**Post date:** [February 7, 2022, 4:55pm UTC](https://forum.arduino.cc/t/schlummerfunktion/956322/2 "2022-02-07T16:55:04Z")

</div>

Verwenden Sie auch Englisch im Allgemeinen Forum.  
Ich habe Ihren Post zum Deutschen Forum verschoben

PS: Haben Sie von Code-Tags Gehört?

➜ [Wie man dieses Forum benutzt - bitte lesen](https://forum.arduino.cc/t/wie-man-dieses-forum-benutzt-bitte-lesen/902274)

---

<div class="post-metadata">

**Author:** ![paulpaulson](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/paulpaulson/32/363643_2.png) [@paulpaulson](https://forum.arduino.cc/u/paulpaulson)\
**Post date:** [February 7, 2022, 7:45pm UTC](https://forum.arduino.cc/t/schlummerfunktion/956322/4 "2022-02-07T19:45:41Z")

</div>

Hallo [bukzi](https://forum.arduino.cc/u/bukzi)  
Das Zauberwort lautet "Schrittkette".  
Die Schrittkette durchläuft die von dir aufgeführten Schritte. Diese ist formuliert in einer Switch/Case Struktur und kann die folgenden Schritte durchlaufen:

```cpp
enum {LedOn, Wait4ButtonPressedFirst, ButtonPressedFirst, Wait4TimerFired, TimerFired, Wait4ButtonPressedSecond, ButtonPressedSecond}

```

Ich wünsche einen geschmeidigen Abend und viel Spass beim Programmieren in C++.

p.s. Es wird noch ein Timer benötigt, der über die Schrittkette gestartet wird.

---

<div class="post-metadata">

**Author:** ![wno158](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/wno158/32/1014607_2.png) [@wno158](https://forum.arduino.cc/u/wno158)\
**Post date:** [February 7, 2022, 8:22pm UTC](https://forum.arduino.cc/t/schlummerfunktion/956322/5 "2022-02-07T20:22:35Z")

</div>

Ich denke, vor größeren Umbauten am Sketch (Bravo - Lob - erster Beitrag und kein `delay()` drin!!!) ist noch ein klitzekleines anderes Problem mit großer Auswirkung zu beseitigen:

```cpp
void loop()
{
  stat1 = digitalRead(schaltr);
  rot = true;
  ...

```

Bei jedem Durchlauf der `loop()` wird `rot` gesetzt.  
Eigentlich sollte das doch bestimmt weiter unten aufgrund der Werte von `stat1` und `x` passieren (die genaue Logik habe ich mir noch nicht zu Gemüte geführt).  
In anderen Worten: Alles was da unten gerechnet und geschaltet wird ist für die Katz.

```cpp
 ...
 rot = true;
 //---------------------------------------------------------
  if (rot == true)
  {
    // HIER kommt das Programm immer hin!
    ...

```

Willkommen im Forum und Gruß!  
Walter

---

<div class="post-metadata">

**Author:** ![bukzi](https://avatars.discourse-cdn.com/v4/letter/b/e9a140/32.png) [@bukzi](https://forum.arduino.cc/u/bukzi)\
**Post date:** [February 7, 2022, 8:33pm UTC](https://forum.arduino.cc/t/schlummerfunktion/956322/6 "2022-02-07T20:33:47Z")

</div>

Vielen Dank für die Antworten.

Ich bräuchte jedoch noch etwas mehr Erläuterungen zum Gedanken der Schrittkette und wie baue ich optimal einen Timer ein?

---

<div class="post-metadata">

**Author:** ![bukzi](https://avatars.discourse-cdn.com/v4/letter/b/e9a140/32.png) [@bukzi](https://forum.arduino.cc/u/bukzi)\
**Post date:** [February 7, 2022, 9:04pm UTC](https://forum.arduino.cc/t/schlummerfunktion/956322/7 "2022-02-07T21:04:45Z")

</div>

Ich habe jetzt diesen Quellcode geschrieben. Jedoch geht die Lampe dabei nur einmal aus und kein weiteres mal.

```cpp

//---------------------------------------------------------
if(rot==true){
  digitalWrite(pinlrot, HIGH);
}
if(rot==false){
  digitalWrite(pinlrot, LOW);
}
//---------------------------------------------------------

Los=millis();

if(Los-Start>1000){
    rot=true;
}

if((stat1==HIGH)&&(x==0)){
  x=1;  
}

if((stat1==HIGH)&&(x==2)){
  x=3;  
}

if((stat1==HIGH)&&(x==4)){
  x=5;  
}

switch (x) {
  case 1:
    rot=false;
    x=2;
    Start=millis();// Tue etwas, wenn "var" 1 ist
    break;

  case 3:
    rot=false;
    x=4;
    Start=millis();
    // Tue etwas, wenn "var" 2 ist
    break;

   case 5:
    rot=false;
    x=6;
    Start=millis();
    // Tue etwas, wenn "var" 2 ist
    break;
    
}

```

---

<div class="post-metadata">

**Author:** ![paulpaulson](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/paulpaulson/32/363643_2.png) [@paulpaulson](https://forum.arduino.cc/u/paulpaulson)\
**Post date:** [February 8, 2022, 6:09am UTC](https://forum.arduino.cc/t/schlummerfunktion/956322/8 "2022-02-08T06:09:19Z")

</div>

Hallo  
Hast du dich zum Thema Schrittkette oder Finite State Machine eingelesen?  
Die Programmierung einer Schrittkette oder Finite State Machine wird durch die Verwendung der SWITCH/CASE Anweisung unterstützt.

---

<div class="post-metadata">

**Author:** ![system](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/system/32/1140315_2.png) [@system](https://forum.arduino.cc/u/system)\
**Post date:** [August 7, 2022, 6:10am UTC](https://forum.arduino.cc/t/schlummerfunktion/956322/9 "2022-08-07T06:10:19Z")

</div>

Closed on August 7, 2022, 6:10am UTC

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.
