2 LED Progrqmme gleichzeitig + Schalter

Hallo,
ich habe 2 verschiedene Blink Programme die ich gerne gleichzeitig laufen lassen würde.
Natürlich verschiedene pins.

Jetzt eine weitere Frage zu diesem Thema.
Ich möchte beide LED mit einem eigenen Schalter Ein/ Aus Schalten können. Unabhänig voneinander natürlich.
Ich kenn mich zwar ein bisschen aus aber so gut bin ich doch nicht :slightly_frowning_face:
Wäre toll wenn ihr mir helfen könnt

Hab ein Arduino Uno R3 SMD :smiley:

Schau dir das Beispiel blinkWithoutDelay an. Dort werden die Basics für dein Problem gut erklärt

Durch gelesen und nicht verstanden :neutral_face:

Dann zeig mal deinen Sketch den du versucht hast, anhand des Beispiels nachzubilden.

Das ist das Problem. Ich verstehe es eben nicht :neutral_face:

Ich verstehe es eben nicht

Was meinst du mit "es" ?

{
  unsigned long currentMillis = millis();
 
  if(currentMillis - previousMillis > interval) {
    // save the last time you blinked the LED
    previousMillis = currentMillis;  

    // if the LED is off turn it on and vice-versa:
    if (ledState == LOW)
      ledState = HIGH;
    else
      ledState = LOW;

    // set the LED with the ledState of the variable:
    digitalWrite(ledPin, ledState);
  }
}

Was verstehst du nicht ?
Lies den Kommentar, der zusätzlich im Beispiel steht.

Dann such in der Reference nach
{}
unsigned long
millis()
if
...

Du kannst dir auch allgemeine Einführungen in C / C++ zu Gemüte führen.
Das wird etwas schwieriger, weil das überhaupt nicht mehr Arduino-spezifisch ist, und jede generelle Anleitung für C zwangsläufig sehr allgemein gehalten ist und es dir überlassen bleibt, was davon hier anwendbar ist... :wink:

Aber konkrete Fragen kannst du auch hier stellen.

DounatMonster:
Durch gelesen und nicht verstanden :neutral_face:

Falls Du es noch nicht wußtest: Programmieren lernt man nur durch Programmieren!

"Durchlesen und verstehen" ist dabei allenfalls eine Hilfestellung.

Falls es Dir hilft, hier ein Code, der mit 6 Buttons 6 LEDs ein- und ausschalten kann, die alle mit einem völlig unabhängigen Blinkrhythmus blinken.

Um das entweder auf 2 zu reduzieren oder auf noch mehr Buttons/LEDs zu erweitern, braucht an dem Programm nur die Array-Deklaration mit buttonPin-, ledPin-, und ledDauer-Festlegung geändert werden.

Das Programm kann wahlweise mit externen PullDown-Widerständen an den Buttons oder mit den eingebauten PullUp-Widerständen verwendet werden, je nachdem wie die Konstante BUTTONMODE gesetzt ist.

#define BUTTONMODE INPUT_PULLUP  // INPUT oder INPUT_PULLUP
#define BOUNCETIME 5 // Prellzeit in Millisekunden

struct buttonLed_t{byte buttonPin; byte ledPin; unsigned int ledDauer; byte lastButtonState; boolean blinkerEingeschaltet; unsigned long blinkerLetzteSchaltung; boolean blinkState;};

buttonLed_t buttonLeds[]={
  {2,8, 500}, // Button an Pin-2, LED an Pin-8, Blinkdauer 500ms
  {3,9, 600},
  {4,10,700},
  {5,11,800},
  {6,12,900},
  {7,13,900},
};

#define BLINKERNUM (sizeof(buttonLeds)/sizeof(buttonLeds[0]))

void setup() {
  Serial.begin(9600);
  for (int i=0; i<BLINKERNUM; i++)
  {
    pinMode(buttonLeds[i].buttonPin,BUTTONMODE);
    pinMode(buttonLeds[i].ledPin,OUTPUT);
    digitalWrite(buttonLeds[i].ledPin,LOW);
  }
}

void loop() {
  byte state;
  for (int i=0; i<BLINKERNUM; i++) // For-Schleife für alle Buttons und LEDs
  {
    state=digitalRead(buttonLeds[i].buttonPin);
    if (BUTTONMODE==INPUT_PULLUP) state=!state;
    if (state!=buttonLeds[i].lastButtonState) // Button-Status hat gewechselt
    {
      if (state==HIGH) // Button wurde gedrückt ==> umschalten ein/aus
      {
        buttonLeds[i].blinkerEingeschaltet= !buttonLeds[i].blinkerEingeschaltet;
        buttonLeds[i].blinkerLetzteSchaltung=millis();
        if (buttonLeds[i].blinkerEingeschaltet) buttonLeds[i].blinkState=true;
        else buttonLeds[i].blinkState=false;
      }
      buttonLeds[i].lastButtonState=state;
    }
    if (buttonLeds[i].blinkerEingeschaltet) // blinkState umschalten nach Zeitablauf
    {
      if (millis()- buttonLeds[i].blinkerLetzteSchaltung >= buttonLeds[i].ledDauer)
      {
        buttonLeds[i].blinkerLetzteSchaltung=millis();
        buttonLeds[i].blinkState= !buttonLeds[i].blinkState;
      }
    }
    // Blinkstatus am ledPin setzen
    digitalWrite(buttonLeds[i].ledPin, buttonLeds[i].blinkState);
  }
  // Es folgt eine Ausgabeschleife auf Serial
  for (int i=0; i<BLINKERNUM; i++)
  {
    Serial.print(digitalRead(buttonLeds[i].ledPin));
  }
  Serial.println();
  delay(BOUNCETIME); // Entprellen der Buttons
}

Falls Serial-Debugging nicht benötigt wird, kannst Du alle "Serial" Befehle aus dem Programm entfernen, sie sind für den reinen Ablauf nicht notwendig.