Duo LED mit zwei Taster schalten

Hallo

brauche mal wieder Eure Hilfe.

Ich möchte mit einem Taster eine grüne Duo LED mit 2000 Millisekunden Zeitverzögerung einschalten.
Nach einer bestimmten Zeit soll mit einem zweiten Taster, eine rote Duo LED einschalten, mit einer
Zeitverzögerung von 2000 Millisekunden. In den 2000 Millisekunden Zeitverzögerung soll die Duo LED aus sein.
Der Sketch funktioniert nicht richtig. Die Reihenfolgen der Farben stimmen nicht.

Was habe ich mal wieder falsch gemacht.

Über eine Hilfe wäre ich Euch dankbar.

Gruß Jürgen

LED Grün / Rot Grün Rot Grün
II_______II_______I*************
Taster Grün 2000 ms 2000ms
II_______________________________________II

Taster Rot 2000ms
I**I
______

[code]
#include <MobaTools.h>

const byte led1 =  5;                      // Zwei Farben LED Pin Rot 
const byte led2 =  6;                      // Zwei Farben LED Pin Grün
const byte taster1 = A0;                   // Taster Rot
const byte taster2 = A1;                   // Taster Grün

MoToTimer Blinkzeit2;

void setup() 
{
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(taster1, INPUT_PULLUP );
  pinMode(taster2, INPUT_PULLUP );

  digitalWrite( led1, LOW );                     // Zwei Farben LED Pin Rot AUS
  digitalWrite( led2, LOW );                     // Zwei Farben LED Pin Grün AUS
}

void loop() 
{
  // -------- Schalten der Led Grün nach 2000 ms ------------------
  if ( !digitalRead(taster2) && !Blinkzeit2.running() )       // Zeit aufziehen und Led schalten
  {
    Blinkzeit2.setTime( 2000 );
    digitalWrite( led1, LOW );                     // Zwei Farben LED Pin Rot AUS
    digitalWrite( led2, LOW );                     // Zwei Farben LED Pin Grün AUS
  }
  if ( Blinkzeit2.expired() )                      // Zeit abgelaufen
  {
    digitalWrite( led1, LOW );                     // Zwei Farben LED Pin Rot AUS
    digitalWrite( led2, HIGH );                    // Zwei Farben LED Pin Grün EIN
  }
  // -------- Schalten der Led Rot nach 2000 ms ------------------
  if ( !digitalRead(taster1) && !Blinkzeit2.running() )      // Zeit aufziehen und Led schalten
  {
    Blinkzeit2.setTime( 2000 );
    digitalWrite( led1, LOW );                     // Zwei Farben LED Pin Rot AUS
    digitalWrite( led2, LOW );                     // Zwei Farben LED Pin Grün AUS
  }
  if ( Blinkzeit2.expired() )                      // Zeit abgelaufen
  {
    digitalWrite( led1, HIGH);                     // Zwei Farben LED Pin Rot EIN
    digitalWrite( led2, LOW );                     // Zwei Farben LED Pin Grün AUS
  }
}

[/code]

Hallo
tausche zum Testen

const byte led1 =  5;                      // Zwei Farben LED ( Grün -Rot )
const byte led2 =  6;

gegen

const byte led1 =  6;                      // Zwei Farben LED ( Grün -Rot )
const byte led2 =  5;

aus.
Oder gebe der LED-Hardware im Sketch beschreibende Namen:

const byte ledRot =  6;                      // Zwei Farben LED ( Pin rot )
const byte ledGruen =  5;                    // Zwei Farben LED ( Pin grün )

Somit vereinfacht sich die Fehlersuche.

Moin
oder ist das eine zwei-Pin DuoLed?

ja es handelt sich um eine zwei-Pin Duo LED

Hallo
wenn die Farben nicht stimmen, dann die LED in der Schaltung drehen

Die Reihenfolge stimmt nicht.
Wenn ich nur taster1 ( Rot ) betätige leuchtet die Duo LED eimal Rot und das nächste mal Grün.
Genau so verhält es sich mir taster2.

Das Verhalten ist zufällig, weil es Blinkzeit2.expired() doppelt gibt.

Ein Merker merkt sich die gewählte Farbe:

#include <MobaTools.h>

const byte led1 =  5;                      // Zwei Farben LED Pin Rot
const byte led2 =  6;                      // Zwei Farben LED Pin Grün
const byte taster1 = A0;                   // Taster Rot
const byte taster2 = A1;                   // Taster Grün

MoToTimer Blinkzeit;
bool rotGRUEN;

void setup()
{
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(taster1, INPUT_PULLUP );
  pinMode(taster2, INPUT_PULLUP );

  digitalWrite( led1, LOW );                     // Zwei Farben LED Pin Rot AUS
  digitalWrite( led2, LOW );                     // Zwei Farben LED Pin Grün AUS
}

void loop()
{
  // -------- Starten der Zeit für Grün ------------------
  if ( !digitalRead(taster2) && !Blinkzeit.running() )       // Zeit aufziehen und Led schalten
  {
    Blinkzeit.setTime( 2000 );
    rotGRUEN = true;
    digitalWrite( led1, LOW );                     // Zwei Farben LED Pin Rot AUS
    digitalWrite( led2, LOW );                     // Zwei Farben LED Pin Grün AUS
  }
  // -------- Starten der Zeit für Rot ------------------
  if ( !digitalRead(taster1) && !Blinkzeit.running() )      // Zeit aufziehen und Led schalten
  {
    Blinkzeit.setTime( 2000 );
    rotGRUEN = false;
    digitalWrite( led1, LOW );                     // Zwei Farben LED Pin Rot AUS
    digitalWrite( led2, LOW );                     // Zwei Farben LED Pin Grün AUS
  }
  // -------- Schalten der Leds nach 2000 ms ------------------
  if ( Blinkzeit.expired() )                      // Zeit abgelaufen
  {
    if ( rotGRUEN)
    {
      digitalWrite( led1, LOW );                     // Zwei Farben LED Pin Rot AUS
      digitalWrite( led2, HIGH );                    // Zwei Farben LED Pin Grün EIN
    }
    else
    {
      digitalWrite( led1, HIGH);                     // Zwei Farben LED Pin Rot EIN
      digitalWrite( led2, LOW );                     // Zwei Farben LED Pin Grün AUS
    }
  }
}

Hallo agmue,

herzlichen Dank. Die Schaltung funktioniert so wie ich mir es vorgestellt habe.

Jetzt muss ich nur noch den Sketch in meinen anderen Sketch integrieren und hoffe das ich dies hinbekomme.
Die fertige Schaltung soll ein Flügelsignal über Taster mit einem Servo steuern. Da die Rot Grüne scheiben
Defekt sind, brauche ich die Duo Led als Beleuchtung. Die 2000 ms sind nur zum testen. Die genaue Zeit muss ich noch ermitteln.

Nochmals Danke
Viele Grüße
Jürgen

Danke für die Rückmeldung, viel Erfolg!

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