# Hallo, wieder ein Neuling am Start

**URL:** <https://forum.arduino.cc/t/hallo-wieder-ein-neuling-am-start/1397573>\
**Category:** Deutsch\
**Created:** [July 23, 2025, 8:14pm UTC](https://forum.arduino.cc/t/hallo-wieder-ein-neuling-am-start/1397573 "2025-07-23T20:14:05Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![scorpi71](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/scorpi71/32/1134115_2.png) [@scorpi71](https://forum.arduino.cc/u/scorpi71)\
**Post date:** [July 23, 2025, 8:14pm UTC](https://forum.arduino.cc/t/hallo-wieder-ein-neuling-am-start/1397573/1 "2025-07-23T20:14:05Z")

</div>

Hallo, habe mir nach Anleitung schon mal ein gegenläufiges Lauflicht zusammen gebastelt und funktioniert soweit. Nun müsste ich das per Taster starten lassen können und nach einer definierbaren Zeit soll es wieder aufhören.

Weiterhin möchte ich 3 weitere LED betreiben z.B. das [Verkehrsampel-Script](https://funduino.de/arduino-ampel) welches gleichzeitig mit dem Lauflicht ablaufen soll.

Zur Erklärung, soll eine Beleuchtung für eine Modellbühne im Maßstab 1:50 werden, wie immer muss es gestern fertig sein. (diesen Sonntag)

Habe hier einen Arduino Nano und 2x 5 LEDs an 330 Ohm Widerständen und nochmal 3 LEDs auch an 330 Ohm Widerständen.

Die 2x LEDs bilden das Lauflicht mit Pin 3 - 7  
Den Taster habe ich an Pin 12 (wo muss das andere Kabel vom Taster hin, Widerstand o.ä.)

Die 3 noch zu aktivierenden LEDs sind an Pin 9 - 11

könnte mir bitte einer helfen meinen Scriptcode entsprechend zu erweitern?!

```arduino
int ledPins[8] = { 3, 4, 5, 6, 7, };
//definiert die Anzahl der LEDs und die benutzten Pins auf dem Arduino
const int buttonPin = 12; // Taster an Pin 12
void setup() 
{
 pinMode(buttonPin, INPUT); // Taster als Eingang
 for (int i = 0; i < 5; i++) 
 {
   pinMode (ledPins [i], OUTPUT); }

}

// Variablen
int buttonState = 0; // Speichert den Zustand des Tasters

void loop() {
  // Tasterzustand lesen
 digitalRead(buttonPin);
 for (int i = 0; i < 5; i++) {
   digitalWrite(ledPins[i], HIGH);
   delay(200); //Wartezeit An
   digitalWrite(ledPins[i], LOW); }
 for (int i = 4; i > 0; i--) {
   digitalWrite(ledPins[i], HIGH);
   delay(200); //Wartezeit Aus
   digitalWrite(ledPins[i], LOW); }
 
}

```

---

<div class="post-metadata">

**Author:** ![my\_xy\_projekt](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/my_xy_projekt/32/810062_2.png) [@my\_xy\_projekt](https://forum.arduino.cc/u/my_xy_projekt)\
**Post date:** [July 23, 2025, 8:21pm UTC](https://forum.arduino.cc/t/hallo-wieder-ein-neuling-am-start/1397573/2 "2025-07-23T20:21:10Z")

</div>

Das, was Du suchst ist eine State-Machine.

Was ich bisher verstanden habe: Der Taster soll auslösen.  
Soweit klar.  
Du hast zwei Ketten. Sollen die nacheinander oder gleichzeitig laufen?

Zusatzfragen:  
Soll der Taster dann gesperrt sein, wenn der Ablauf aktiv ist?  
Soll das nur einmal anlaufen, oder nach dem Tastendruck dauerhaft?

---

<div class="post-metadata">

**Author:** ![scorpi71](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/scorpi71/32/1134115_2.png) [@scorpi71](https://forum.arduino.cc/u/scorpi71)\
**Post date:** [July 23, 2025, 8:21pm UTC](https://forum.arduino.cc/t/hallo-wieder-ein-neuling-am-start/1397573/3 "2025-07-23T20:21:50Z")

</div>

ich vergaß das ich mit einem Pin z.B. PIN 8 noch ein Relais ansteuern muss, damit sich das Riesenrad dreht bis die vordefinierte Zeit abgelaufen ist.

---

<div class="post-metadata">

**Author:** ![scorpi71](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/scorpi71/32/1134115_2.png) [@scorpi71](https://forum.arduino.cc/u/scorpi71)\
**Post date:** [July 23, 2025, 8:24pm UTC](https://forum.arduino.cc/t/hallo-wieder-ein-neuling-am-start/1397573/4 "2025-07-23T20:24:34Z")

</div>

Laufen soll es gleichzeitig, also das Lauflicht als Bühnenbeleuchtung und die 3 weiteren LED mit dem Ampelscript sollen Lasershow imitieren und und das Relais angezogen bleiben um das Riesenrad zu bewegen, alles gleichzeitig

Nach Tastendruck soll es einmal solange ablaufen wie es definiert wir, z.B. 5 Min.  
In der Zeit Taster blockieren kling gut, erst wenn Durchlauf beendet ist wieder frei geben.

---

<div class="post-metadata">

**Author:** ![Rintin](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/rintin/32/1013044_2.png) [@Rintin](https://forum.arduino.cc/u/Rintin)\
**Post date:** [July 23, 2025, 8:29pm UTC](https://forum.arduino.cc/t/hallo-wieder-ein-neuling-am-start/1397573/5 "2025-07-23T20:29:57Z")

</div>

Ein Schaltplan wäre ganz praktisch.

Außerdem möchtest du dich in nicht blockierende Programmierung einlesen.  
z.B. kannst du "Blink without delay" aus den Beispielen ansehen.  
Statemachines gehören da auch auf die Liste.

> [@scorpi71](#):
>
> Den Taster habe ich an Pin 12

Mit pinMode(..., INPUT\_PULLUP) geht der andere Pin an GND.

---

<div class="post-metadata">

**Author:** ![my\_xy\_projekt](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/my_xy_projekt/32/810062_2.png) [@my\_xy\_projekt](https://forum.arduino.cc/u/my_xy_projekt)\
**Post date:** [July 23, 2025, 8:29pm UTC](https://forum.arduino.cc/t/hallo-wieder-ein-neuling-am-start/1397573/6 "2025-07-23T20:29:58Z")

</div>

Na mal sehen, bis zum Ende des Spiels wird das nicht dauern.  
Such Dir schon mal Kabel fürs Steckbrett. 😁

---

<div class="post-metadata">

**Author:** ![my\_xy\_projekt](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/my_xy_projekt/32/810062_2.png) [@my\_xy\_projekt](https://forum.arduino.cc/u/my_xy_projekt)\
**Post date:** [July 23, 2025, 9:00pm UTC](https://forum.arduino.cc/t/hallo-wieder-ein-neuling-am-start/1397573/7 "2025-07-23T21:00:08Z")

</div>

Ich hab einfach mal was gebastelt.  
WICHTIG!  
Dein TASTER muss mit einem Kontakt an den PIN 12 und mit einem Kontakt an GND.

Dann sollte erstmal Dein Blinklicht nach dem drücken 10 Sekunden laufen....

```arduino
constexpr uint8_t llPins {5};
constexpr uint8_t lauflicht[llPins] { 3, 4, 5, 6, 7, };
uint8_t lastllPin;

constexpr uint8_t blPins {3};
constexpr uint8_t blinklicht[blPins] {9, 10, 11,};
uint8_t lastblPin;

constexpr uint32_t toggleTime {200};

constexpr uint8_t buttonPin {12};

constexpr uint32_t laufzeit {10000}; // Zeit in Millisekunden
constexpr bool AUS {LOW};
constexpr bool EIN {!AUS};

uint8_t state;
uint32_t startTime;
uint32_t lastSwitch;
void setup()
{
  Serial.begin(115200);
  Serial.println(F("Start..."));
  pinMode(buttonPin, INPUT_PULLUP); // Taster als Eingang

  for (uint8_t b = 0; b < llPins; b++)
  {
    pinMode (lauflicht[b], OUTPUT);
    digitalWrite(lauflicht[b], AUS);
  }

  for (uint8_t b = 0; b < blPins; b++)
  {
    pinMode (blinklicht[b], OUTPUT);
    digitalWrite(blinklicht[b], AUS);
  }
}

void loop()
{
  switch (state)
  {
    case 0:
      if (!digitalRead(buttonPin))
      {
        startTime = millis();
        state++;
      }

      break;

    case 1:
      toggleNext();

      if (millis() - startTime > laufzeit)
      {
        state++;
      }

      break;

    case 2:
      allOff();

      if (digitalRead(buttonPin))
      {
        state = 0;
      }

      break;

    default:
      state = 0;
      break;
  }
}

void toggleNext()
{
  if (millis() - lastSwitch > toggleTime)
  {
    llOFF();
    digitalWrite(lauflicht[lastllPin++], EIN);

    if (lastllPin >= llPins)
    { lastllPin = 0; }

    blOFF();
    digitalWrite(blinklicht[lastblPin++], EIN);

    if (lastblPin >= blPins)
    { lastblPin = 0; }

    lastSwitch = millis();
  }
}

void allOff()
{
  llOFF();
  blOFF();
}

void llOFF()
{
  for (uint8_t b = 0; b < llPins; b++)
  {
    digitalWrite(lauflicht[b], AUS);
  }
}

void blOFF()
{
  for (uint8_t b = 0; b < blPins; b++)
  {
    digitalWrite(blinklicht[b], AUS);
  }
}

```

Wenn etwas nicht geht, musst Du es beschreiben. So genau wie möglich.

---

<div class="post-metadata">

**Author:** ![scorpi71](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/scorpi71/32/1134115_2.png) [@scorpi71](https://forum.arduino.cc/u/scorpi71)\
**Post date:** [July 23, 2025, 9:17pm UTC](https://forum.arduino.cc/t/hallo-wieder-ein-neuling-am-start/1397573/8 "2025-07-23T21:17:09Z")

</div>

Super, das Lauflicht lässt sich nun per Taster starten und läuft ein Weilchen, das Blinklicht geh nur wenn ich den Taster gedrückt halte.

Nun noch das Relais auf PIN8 anziehen lassen für die Dauer des Ablaufs

---

<div class="post-metadata">

**Author:** ![my\_xy\_projekt](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/my_xy_projekt/32/810062_2.png) [@my\_xy\_projekt](https://forum.arduino.cc/u/my_xy_projekt)\
**Post date:** [July 23, 2025, 9:34pm UTC](https://forum.arduino.cc/t/hallo-wieder-ein-neuling-am-start/1397573/9 "2025-07-23T21:34:14Z")

</div>

> [@scorpi71](#):
>
> Lauflicht lässt sich nun per Taster starten

Das sind die Pins 3 bis 7.

> [@scorpi71](#):
>
> das Blinklicht geh nur wenn ich den Taster gedrückt halte.

Das sind die Pins 9 bis 11 und müssen OHNE gedrückte Taste mitlaufen.

Relais ist hier mit bei.

```arduino
constexpr uint8_t llPins {5};
constexpr uint8_t lauflicht[llPins] { 3, 4, 5, 6, 7, };
uint8_t lastllPin;

constexpr uint8_t blPins {3};
constexpr uint8_t blinklicht[blPins] {9, 10, 11,};
uint8_t lastblPin;

constexpr uint32_t toggleTime {200};

constexpr uint8_t buttonPin {12};

constexpr uint32_t laufzeit {10000}; // Zeit in Millisekunden
constexpr bool AUS {LOW};
constexpr bool EIN {!AUS};

constexpr uint8_t relaisPin {8};
constexpr bool relaisOFF {HIGH};

uint8_t state;
uint32_t startTime;
uint32_t lastSwitch;
void setup()
{
  Serial.begin(115200);
  Serial.println(F("Start..."));
  pinMode(buttonPin, INPUT_PULLUP); // Taster als Eingang

  for (uint8_t b = 0; b < llPins; b++)
  {
    pinMode (lauflicht[b], OUTPUT);
    digitalWrite(lauflicht[b], AUS);
  }

  for (uint8_t b = 0; b < blPins; b++)
  {
    pinMode (blinklicht[b], OUTPUT);
    digitalWrite(blinklicht[b], AUS);
  }

  pinMode(relaisPin, OUTPUT);
  digitalWrite(relaisPin, relaisOFF);
}

void loop()
{
  switch (state)
  {
    case 0:
      if (!digitalRead(buttonPin))
      {
        startTime = millis();
        toggleRelais();
        state++;
      }

      break;

    case 1:
      toggleNext();

      if (millis() - startTime > laufzeit)
      {
        state++;
      }

      break;

    case 2:
      allOff();

      if (digitalRead(buttonPin))
      {
        state = 0;
      }

      break;

    default:
      state = 0;
      break;
  }
}

void toggleNext()
{
  if (millis() - lastSwitch > toggleTime)
  {
    llOFF();
    digitalWrite(lauflicht[lastllPin++], EIN);

    if (lastllPin >= llPins)
    { lastllPin = 0; }

    blOFF();
    digitalWrite(blinklicht[lastblPin++], EIN);

    if (lastblPin >= blPins)
    { lastblPin = 0; }

    lastSwitch = millis();
  }
}

void allOff()
{
  llOFF();
  blOFF();
  digitalWrite(relaisPin, relaisOFF);
}

void llOFF()
{
  for (uint8_t b = 0; b < llPins; b++)
  {
    digitalWrite(lauflicht[b], AUS);
  }
}

void blOFF()
{
  for (uint8_t b = 0; b < blPins; b++)
  {
    digitalWrite(blinklicht[b], AUS);
  }
}

void toggleRelais()
{
  digitalWrite(relaisPin, !digitalRead(relaisPin));
}

```

---

<div class="post-metadata">

**Author:** ![scorpi71](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/scorpi71/32/1134115_2.png) [@scorpi71](https://forum.arduino.cc/u/scorpi71)\
**Post date:** [July 24, 2025, 6:48am UTC](https://forum.arduino.cc/t/hallo-wieder-ein-neuling-am-start/1397573/10 "2025-07-24T06:48:25Z")

</div>

Guten Morgen,

erstmal vielen Dank für die bisherige unkomplizierte Hilfe, so hätte ich es niemals zusammen gebraucht, wäre wohl auf 3 Nano´s hinaus gelaufen.

Nun aber zum Fehlerbild.

Lauflicht wie gesagt wunderbar, Blinklicht nur wenn ich den Taster gedrückt halte mit 4k Prellwiderstand (10k habe ich gerade nicht, besorge ich heute)

Lasse ich den Prellwiderstand weg, geht das Blinklicht auch bei gedrückt gehaltenem Taster nicht mehr, das Lauflicht jedoch schon. Auch ein Anziehen vom Relais ist nicht zu hören / spüren.

Ich beschreibe mal den betreffenden Aufbau auf dem Steckboard:

Pin 12 auf Taster -\> Taster auf GND -\> Prellwiderstand auf GND

Pin 8 auf IN1 Relais  
GND auf GND Relais  
5V auf VCC Relais

Sollte es nur an dem Prellwiderstand liegen der statt vorgeschlagenen 10 kOhm nur 4 kOhm hat???

Wäre es möglich die Zeiten der 3 LED vom Blinklicht unterschiedlich einstellen zu können, das es nicht so Statisch aussieht? Deshalb hatte ich zu Beginn an das [Ampelscript](https://funduino.de/arduino-ampel) gedacht.

Hier 2 Fotos vom Aufbau

 ![1000035871](https://europe1.discourse-cdn.com/arduino/original/4X/c/4/0/c40f560120bd9fc7357e3b7314aeba4b504c13a8.jpeg)  
 ![1000035872](https://europe1.discourse-cdn.com/arduino/original/4X/a/b/f/abf74c8cc364e3c067574a6f59eb8029f10e1393.jpeg)

---

<div class="post-metadata">

**Author:** ![fony](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/fony/32/936882_2.png) [@fony](https://forum.arduino.cc/u/fony)\
**Post date:** [July 24, 2025, 7:12am UTC](https://forum.arduino.cc/t/hallo-wieder-ein-neuling-am-start/1397573/11 "2025-07-24T07:12:04Z")

</div>

> [@scorpi71](#):
>
> Pin 12 auf Taster -\> Taster auf GND -\> Prellwiderstand auf GND

Zeichne mall das, was ist Prellwiderstand? Wahrscheinlich soll das Pull down sein. Gegen Prellen hilft ein kleines delay.  
Ist das o geklemmt

 ![image](https://europe1.discourse-cdn.com/arduino/original/4X/2/3/c/23c9787ab6137e7ba90661c60572c269c037b2dc.png)

---

<div class="post-metadata">

**Author:** ![my\_xy\_projekt](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/my_xy_projekt/32/810062_2.png) [@my\_xy\_projekt](https://forum.arduino.cc/u/my_xy_projekt)\
**Post date:** [July 24, 2025, 7:20am UTC](https://forum.arduino.cc/t/hallo-wieder-ein-neuling-am-start/1397573/12 "2025-07-24T07:20:54Z")

</div>

> [@scorpi71](#):
>
> Fotos vom Aufbau

Mach mal bitte ein Foto vom kompletten(!) Aufbau, damit man alles sieht.  
Bitte nicht schräg sondern von oben.

> [@scorpi71](#):
>
> Wäre es möglich

Alles ist möglich.

---

<div class="post-metadata">

**Author:** ![scorpi71](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/scorpi71/32/1134115_2.png) [@scorpi71](https://forum.arduino.cc/u/scorpi71)\
**Post date:** [July 24, 2025, 7:56am UTC](https://forum.arduino.cc/t/hallo-wieder-ein-neuling-am-start/1397573/13 "2025-07-24T07:56:07Z")

</div>

so wie fony gezeichnet habe ich den Taster auch angeschlossen.

Muss dann erstmal etwas malochen gehen und 10k Widerstand besorgen, vielleicht liegt es ja daran da sich nur einen 4k dran habe.

 ![IMG_20250724_094221_263](https://europe1.discourse-cdn.com/arduino/original/4X/4/8/4/4848667633cb074cea0a5788ac4887a6bd20a828.jpeg)

---

<div class="post-metadata">

**Author:** ![my\_xy\_projekt](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/my_xy_projekt/32/810062_2.png) [@my\_xy\_projekt](https://forum.arduino.cc/u/my_xy_projekt)\
**Post date:** [July 24, 2025, 8:01am UTC](https://forum.arduino.cc/t/hallo-wieder-ein-neuling-am-start/1397573/14 "2025-07-24T08:01:49Z")

</div>

Der Widerstand muss da raus!  
Ich hab doch geschrieben, wie der Taster ran muss.

Mal sehen ob ich da sonst noch was erkenne.

Wenn Du wieder da bist und den Widerstand raus hast, dann:

```arduino
constexpr uint8_t llPins {5};
constexpr uint8_t lauflicht[llPins] { 3, 4, 5, 6, 7, };
uint8_t lastllPin;

constexpr uint8_t blPins {3};
constexpr uint8_t blinklicht[blPins] {9, 10, 11,};
uint8_t lastblPin;

constexpr uint32_t toggleTime {200};

constexpr uint8_t buttonPin {12};

constexpr uint32_t laufzeit {10000}; // Zeit in Millisekunden
constexpr bool AUS {LOW};
constexpr bool EIN {!AUS};

constexpr uint8_t relaisPin {8};
constexpr bool relaisOFF {HIGH};

uint8_t state;
uint32_t startTime;
uint32_t lastSwitch;
void setup()
{
  Serial.begin(115200);
  Serial.println(F("Start..."));
  pinMode(buttonPin, INPUT_PULLUP); // Taster als Eingang

  for (uint8_t b = 0; b < llPins; b++)
  {
    pinMode (lauflicht[b], OUTPUT);
    digitalWrite(lauflicht[b], AUS);
  }

  for (uint8_t b = 0; b < blPins; b++)
  {
    pinMode (blinklicht[b], OUTPUT);
    digitalWrite(blinklicht[b], AUS);
  }

  pinMode(relaisPin, OUTPUT);
  digitalWrite(relaisPin, relaisOFF);
}

void loop()
{
  switch (state)
  {
    case 0:
      if (!digitalRead(buttonPin))
      {
        startTime = millis();
        toggleRelais();
        state++;
      }

      break;

    case 1:
      blinkLicht();
      laufLicht();

      if (millis() - startTime > laufzeit)
      {
        state++;
      }

      break;

    case 2:
      allOff();

      if (digitalRead(buttonPin))
      {
        state = 0;
      }

      break;

    default:
      state = 0;
      break;
  }
}

void laufLicht()
{
  if (millis() - lastSwitch > toggleTime)
  {
    llOFF();
    digitalWrite(lauflicht[lastllPin++], EIN);

    if (lastllPin >= llPins)
    { lastllPin = 0; }

    lastSwitch = millis();
  }
}

void blinkLicht()
{
  static uint8_t blinkState = 0;
  bool isNew = true;
  static uint32_t myTime = 0;

  for (uint8_t b = 0; b < blPins; b++)
  {
    if (digitalRead(blinklicht[b]))
    { isNew = false; }
  }

  if (isNew)
  {
    blinkState = 0;
  }

  switch (blinkState)
  {
    case 0:
      digitalWrite(blinklicht[0], HIGH);
      myTime = millis();
      blinkState++;
      break;

    case 1:
      if (millis() - myTime > 500)
      {
        blOFF();
        digitalWrite(blinklicht[1], HIGH);
        myTime = millis();
        blinkState++;
      }

      break;

    case 2:
      if (millis() - myTime > 800)
      {
        blOFF();
        digitalWrite(blinklicht[2], HIGH);
        myTime = millis();
        blinkState++;
      }

      break;

    case 3:
      if (millis() - myTime > 300)
      {
        blOFF();
        blinkState = 0;
      }

      break;

    default:
      blinkState = 0;
      break;
  }
}

void allOff()
{
  llOFF();
  blOFF();
  digitalWrite(relaisPin, relaisOFF);
}

void llOFF()
{
  for (uint8_t b = 0; b < llPins; b++)
  {
    digitalWrite(lauflicht[b], AUS);
  }
}

void blOFF()
{
  for (uint8_t b = 0; b < blPins; b++)
  {
    digitalWrite(blinklicht[b], AUS);
  }
}

void toggleRelais()
{
  digitalWrite(relaisPin, !digitalRead(relaisPin));
}

```

---

<div class="post-metadata">

**Author:** ![scorpi71](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/scorpi71/32/1134115_2.png) [@scorpi71](https://forum.arduino.cc/u/scorpi71)\
**Post date:** [July 24, 2025, 4:41pm UTC](https://forum.arduino.cc/t/hallo-wieder-ein-neuling-am-start/1397573/15 "2025-07-24T16:41:16Z")

</div>

So wieder zu Hause, Widerstand ist raus und Script hochgeladen, leider ohne Änderung. Das Lauflicht funktioniert tadellos, der Rest nicht ☹

---

<div class="post-metadata">

**Author:** ![scorpi71](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/scorpi71/32/1134115_2.png) [@scorpi71](https://forum.arduino.cc/u/scorpi71)\
**Post date:** [July 24, 2025, 4:48pm UTC](https://forum.arduino.cc/t/hallo-wieder-ein-neuling-am-start/1397573/16 "2025-07-24T16:48:01Z")

</div>

Relais ist dieses hier

 ![s-l1600](https://europe1.discourse-cdn.com/arduino/original/4X/a/0/f/a0ff60891b7496faca50a6bf65f065ce709b7c32.webp)

# 2-Relais Modul 5V mit Optokoppler Low-Level-Trigger kompatibel mit Arduino und Raspberry Pi

---

<div class="post-metadata">

**Author:** ![my\_xy\_projekt](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/my_xy_projekt/32/810062_2.png) [@my\_xy\_projekt](https://forum.arduino.cc/u/my_xy_projekt)\
**Post date:** [July 24, 2025, 5:02pm UTC](https://forum.arduino.cc/t/hallo-wieder-ein-neuling-am-start/1397573/17 "2025-07-24T17:02:21Z")

</div>

Ich hab Dir mal eingefügt, das Du aus was angezeigt bekommst.

Bitte stelle Deinen Seriellen Monitor unten rechts so ein, wie im setup mit 115200.

```arduino
constexpr uint8_t llPins {5};
constexpr uint8_t lauflicht[llPins] { 3, 4, 5, 6, 7, };
uint8_t lastllPin;

constexpr uint8_t blPins {3};
constexpr uint8_t blinklicht[blPins] {9, 10, 11,};
uint8_t lastblPin;

constexpr uint32_t toggleTime {200};

constexpr uint8_t buttonPin {12};

constexpr uint32_t laufzeit {10000}; // Zeit in Millisekunden
constexpr bool AUS {LOW};
constexpr bool EIN {!AUS};

constexpr uint8_t relaisPin {8};
constexpr bool relaisOFF {HIGH};

uint8_t state;
uint32_t startTime;
uint32_t lastSwitch;

uint8_t debugState = 255;

void setup()
{
  Serial.begin(115200);
  Serial.println(F("Start..."));
  pinMode(buttonPin, INPUT_PULLUP); // Taster als Eingang

  for (uint8_t b = 0; b < llPins; b++)
  {
    pinMode (lauflicht[b], OUTPUT);
    digitalWrite(lauflicht[b], AUS);
  }

  for (uint8_t b = 0; b < blPins; b++)
  {
    pinMode (blinklicht[b], OUTPUT);
    digitalWrite(blinklicht[b], AUS);
  }

  pinMode(relaisPin, OUTPUT);
  digitalWrite(relaisPin, relaisOFF);
}

void loop()
{
  if (debugState != state)
  {
    Serial.print(F("Neuer Zustand: "));
    Serial.println(state);
    debugState = state;
  }

  switch (state)
  {
    case 0:
      if (!digitalRead(buttonPin))
      {
        Serial.println(F("TASTE gedrückt!"));
        startTime = millis();
        toggleRelais();
        state++;
      }

      break;

    case 1:
      blinkLicht();
      laufLicht();

      if (millis() - startTime > laufzeit)
      {
        state++;
      }

      break;

    case 2:
      allOff();

      if (digitalRead(buttonPin))
      {
        state = 0;
      }

      break;

    default:
      state = 0;
      break;
  }
}

void laufLicht()
{
  if (millis() - lastSwitch > toggleTime)
  {
    llOFF();
    Serial.print(F("Neue LauflichtLed: "));
    Serial.println(lastllPin);
    digitalWrite(lauflicht[lastllPin++], EIN);

    if (lastllPin >= llPins)
    { lastllPin = 0; }

    lastSwitch = millis();
  }
}

void blinkLicht()
{
  static uint8_t blinkState = 0;
  bool isNew = true;
  static uint32_t myTime = 0;

  for (uint8_t b = 0; b < blPins; b++)
  {
    if (digitalRead(blinklicht[b]))
    { isNew = false; }
  }

  if (isNew)
  {
    blinkState = 0;
  }

  switch (blinkState)
  {
    case 0:
      digitalWrite(blinklicht[0], HIGH);
      myTime = millis();
      blinkState++;
      break;

    case 1:
      if (millis() - myTime > 500)
      {
        blOFF();
        Serial.print(F("Neue BlinkLed ist 1"));
        digitalWrite(blinklicht[1], HIGH);
        myTime = millis();
        blinkState++;
      }

      break;

    case 2:
      if (millis() - myTime > 800)
      {
        blOFF();
        Serial.print(F("Neue BlinkLed ist 2"));
        digitalWrite(blinklicht[2], HIGH);
        myTime = millis();
        blinkState++;
      }

      break;

    case 3:
      if (millis() - myTime > 300)
      {
        Serial.print(F("Neue BlinkLed ist 0"));
        blOFF();
        blinkState = 0;
      }

      break;

    default:
      blinkState = 0;
      break;
  }
}

void allOff()
{
  Serial.println(F("Funktion: ALLES AUS!"));
  llOFF();
  blOFF();
  digitalWrite(relaisPin, relaisOFF);
}

void llOFF()
{
  for (uint8_t b = 0; b < llPins; b++)
  {
    digitalWrite(lauflicht[b], AUS);
  }

  Serial.println(F("Lauflicht OFF"));
}

void blOFF()
{
  for (uint8_t b = 0; b < blPins; b++)
  {
    digitalWrite(blinklicht[b], AUS);
  }

  Serial.println(F("blinklicht OFF"));
}

void toggleRelais()
{
  digitalWrite(relaisPin, !digitalRead(relaisPin));
  Serial.print(F("Relais geschaltet - Zustand neu: "));
  Serial.print(digitalRead(relaisPin));
}

```

Dann bekommst Du immer eine Anzeige, wenn sich was tut und das muss dan auch passend passieren.  
Wenn was nicht geht, dann Verkabelung prüfen.  
Auf dem Relaismodul ist eine LED, die muss ebenfalls an/aus eghen.

---

<div class="post-metadata">

**Author:** ![scorpi71](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/scorpi71/32/1134115_2.png) [@scorpi71](https://forum.arduino.cc/u/scorpi71)\
**Post date:** [July 24, 2025, 5:07pm UTC](https://forum.arduino.cc/t/hallo-wieder-ein-neuling-am-start/1397573/18 "2025-07-24T17:07:08Z")

</div>

FQBN: arduino:avr:nano:cpu=atmega328old  
Verwende das Board 'nano' von der Plattform im Ordner: C:\Users\Iev\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6  
Verwendung des Kerns 'arduino' von Platform im Ordner: C:\Users\Iev\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6

Verwendete Bibliotheken erkennen ...  
C:\Users\Iev\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF\_CPU=16000000L -DARDUINO=10607 -DARDUINO\_AVR\_NANO -DARDUINO\_ARCH\_AVR -IC:\Users\Iev\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\cores\arduino -IC:\Users\Iev\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\variants\eightanaloginputs C:\Users\Iev\AppData\Local\arduino\sketches\496F405D10F01F34196EDDB972561D6C\sketch\brauhausfest\_freiberger.ino.cpp -o nul  
Funktionsprototypen werden generiert ...  
C:\Users\Iev\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7/bin/avr-g++ -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF\_CPU=16000000L -DARDUINO=10607 -DARDUINO\_AVR\_NANO -DARDUINO\_ARCH\_AVR -IC:\Users\Iev\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\cores\arduino -IC:\Users\Iev\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\variants\eightanaloginputs C:\Users\Iev\AppData\Local\arduino\sketches\496F405D10F01F34196EDDB972561D6C\sketch\brauhausfest\_freiberger.ino.cpp -o C:\Users\Iev\AppData\Local\Temp\708807196\sketch\_merged.cpp  
C:\Users\Iev\AppData\Local\Arduino15\packages\builtin\tools\ctags\5.8-arduino11/ctags -u --language-force=c++ -f - --c++-kinds=svpf --fields=KSTtzns --line-directives C:\Users\Iev\AppData\Local\Temp\708807196\sketch\_merged.cpp

Sketch wird kompiliert ...  
"C:\Users\Iev\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF\_CPU=16000000L -DARDUINO=10607 -DARDUINO\_AVR\_NANO -DARDUINO\_ARCH\_AVR "-IC:\Users\Iev\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\cores\arduino" "-IC:\Users\Iev\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\variants\eightanaloginputs" "C:\Users\Iev\AppData\Local\arduino\sketches\496F405D10F01F34196EDDB972561D6C\sketch\brauhausfest\_freiberger.ino.cpp" -o "C:\Users\Iev\AppData\Local\arduino\sketches\496F405D10F01F34196EDDB972561D6C\sketch\brauhausfest\_freiberger.ino.cpp.o"  
Bibliotheken werden kompiliert ...  
Kern wird kompiliert ...  
Verwendung des vorkompilierten Kerns: C:\Users\Iev\AppData\Local\arduino\cores\arduino\_avr\_nano\_cpu\_atmega328old\_e0bff5c041da8a5d4697870f7ee0a051\core.a  
Alles zusammenlinken...  
"C:\Users\Iev\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7/bin/avr-gcc" -Os -g -flto -fuse-linker-plugin -Wl,--gc-sections -mmcu=atmega328p -o "C:\Users\Iev\AppData\Local\arduino\sketches\496F405D10F01F34196EDDB972561D6C/brauhausfest\_freiberger.ino.elf" "C:\Users\Iev\AppData\Local\arduino\sketches\496F405D10F01F34196EDDB972561D6C\sketch\brauhausfest\_freiberger.ino.cpp.o" "C:\Users\Iev\AppData\Local\arduino\sketches\496F405D10F01F34196EDDB972561D6C/..\..\cores\arduino\_avr\_nano\_cpu\_atmega328old\_e0bff5c041da8a5d4697870f7ee0a051\core.a" "-LC:\Users\Iev\AppData\Local\arduino\sketches\496F405D10F01F34196EDDB972561D6C" -lm  
"C:\Users\Iev\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7/bin/avr-objcopy" -O ihex -j .eeprom --set-section-flags=.eeprom=alloc,load --no-change-warnings --change-section-lma .eeprom=0 "C:\Users\Iev\AppData\Local\arduino\sketches\496F405D10F01F34196EDDB972561D6C/brauhausfest\_freiberger.ino.elf" "C:\Users\Iev\AppData\Local\arduino\sketches\496F405D10F01F34196EDDB972561D6C/brauhausfest\_freiberger.ino.eep"  
"C:\Users\Iev\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7/bin/avr-objcopy" -O ihex -R .eeprom "C:\Users\Iev\AppData\Local\arduino\sketches\496F405D10F01F34196EDDB972561D6C/brauhausfest\_freiberger.ino.elf" "C:\Users\Iev\AppData\Local\arduino\sketches\496F405D10F01F34196EDDB972561D6C/brauhausfest\_freiberger.ino.hex"  
"C:\Users\Iev\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7/bin/avr-size" -A "C:\Users\Iev\AppData\Local\arduino\sketches\496F405D10F01F34196EDDB972561D6C/brauhausfest\_freiberger.ino.elf"  
Der Sketch verwendet 3344 Bytes (10%) des Programmspeicherplatzes. Das Maximum sind 30720 Bytes.  
Globale Variablen verwenden 209 Bytes (10%) des dynamischen Speichers, 1839 Bytes für lokale Variablen verbleiben. Das Maximum sind 2048 Bytes.  
"C:\Users\Iev\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17/bin/avrdude" "-CC:\Users\Iev\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17/etc/avrdude.conf" -v -patmega328p -carduino "-PCOM4" -b57600 -D "-Uflash:w:C:\Users\Iev\AppData\Local\arduino\sketches\496F405D10F01F34196EDDB972561D6C/brauhausfest\_freiberger.ino.hex:i"

avrdude: Version 6.3-20190619  
Copyright (c) 2000-2005 Brian Dean, [http://www.bdmicro.com/](http://www.bdmicro.com/)  
Copyright (c) 2007-2014 Joerg Wunsch

```
     System wide configuration file is "C:\Users\Iev\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17/etc/avrdude.conf"

     Using Port : COM4
     Using Programmer : arduino
     Overriding Baud Rate : 57600

```

avrdude: ser\_open(): can't open device "\.\COM4": Das System kann die angegebene Datei nicht finden.

avrdude done. Thank you.

Fehlgeschlagenes Hochladen: Hochladefehler: exit status 1

---

<div class="post-metadata">

**Author:** ![my\_xy\_projekt](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/my_xy_projekt/32/810062_2.png) [@my\_xy\_projekt](https://forum.arduino.cc/u/my_xy_projekt)\
**Post date:** [July 24, 2025, 5:10pm UTC](https://forum.arduino.cc/t/hallo-wieder-ein-neuling-am-start/1397573/19 "2025-07-24T17:10:58Z")

</div>

> [@scorpi71](#):
>
> avrdude: ser\_open(): can't open device ".\COM4": Das System kann die angegebene Datei nicht finden.

Dein Arduino ist nicht da....  
Einmal vom Rechner abziehen. Wieder anstecken.  
Dann unter WERZEUGE - PORT in der IDE den Arduino wieder anwählen.

PS: Achtung: Bitte setze sowas alles in Codetags. Das ist das \<code\> symbol oben in der Leiste.

---

<div class="post-metadata">

**Author:** ![scorpi71](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/scorpi71/32/1134115_2.png) [@scorpi71](https://forum.arduino.cc/u/scorpi71)\
**Post date:** [July 24, 2025, 5:17pm UTC](https://forum.arduino.cc/t/hallo-wieder-ein-neuling-am-start/1397573/20 "2025-07-24T17:17:34Z")

</div>

war mein Fehler, hatte externes Netzteil dran gemacht, dachte der Strom vom Rechner könnte zu wenig sein. Hier die Ausgabe vom Seriellen Monitor:

```arduino
�Start...
Neuer Zustand: 0
TASTE gedrückt!
Relais geschaltet - Zustand neu: 0Neuer Zustand: 1
Lauflicht OFF
Neue LauflichtLed: 0
Lauflicht OFF
Neue LauflichtLed: 1
Lauflicht OFF
Neue LauflichtLed: 2
blinklicht OFF
Neue BlinkLed ist 1Lauflicht OFF
Neue LauflichtLed: 3
Lauflicht OFF
Neue LauflichtLed: 4
Lauflicht OFF
Neue LauflichtLed: 0
Lauflicht OFF
Neue LauflichtLed: 1
blinklicht OFF
Neue BlinkLed ist 2Lauflicht OFF
Neue LauflichtLed: 2
Neue BlinkLed ist 0blinklicht OFF
Lauflicht OFF
Neue LauflichtLed: 3
Lauflicht OFF
Neue LauflichtLed: 4
Lauflicht OFF
Neue LauflichtLed: 0
blinklicht OFF
Neue BlinkLed ist 1Lauflicht OFF
Neue LauflichtLed: 1
Lauflicht OFF
Neue LauflichtLed: 2
Lauflicht OFF
Neue LauflichtLed: 3
Lauflicht OFF
Neue LauflichtLed: 4
blinklicht OFF
Neue BlinkLed ist 2Lauflicht OFF
Neue LauflichtLed: 0
Neue BlinkLed ist 0blinklicht OFF
Lauflicht OFF
Neue LauflichtLed: 1
Lauflicht OFF
Neue LauflichtLed: 2
Lauflicht OFF
Neue LauflichtLed: 3

```

[Next page](https://forum.arduino.cc/t/hallo-wieder-ein-neuling-am-start/1397573.md?page=2)
