Sketch erweitern

Hallo zusammen,
ich bin an meinen ersten Arduino Projekten und möchte gerne einen sketch um ein paar funktionen erweitern, momentan funktioniert der Sketch so das ich wenn ich das erste mal den Taster drücke LED1 für eine bestimmte Zeit angeht, wenn ich ihn ein zweites mal drücke LED2 für eine bestimmte Zeit angeht.

jetzt soll der Sketch um folgendes erweitert werden:

Wenn Taster 1. mal gedrückt:

LED1 - für 1000MS an 

LED3 - blinkt für 1000MS, soll nach 1000MS blinken auf HIGH bleiben



Wenn Taster 2. mal gedrückt

LED2 - für 2000MS an 

LED3 - blinkt für 2000MS, danach soll sie auf LOW bleiben

ich hoffe es ist logisch was ich meine :slight_smile:

anbei der Code den ich bis jetzt hab, er funktioniert auch, jedoch leuchtet/blinkt noch keine LED weil ich nicht weiß wie ich den Taster nochmal abfragen kann. :frowning:

Würde mich über hilfe sehr freuen.

#include <Bounce2.h>
#define NUM_BUTTONS 4

// Pins in Array ablegen 
const byte btnpin[] = {A0, A1, A2, A3}; 
const byte ledApin[] = {6, 8, 10, 12};
const byte ledBpin[] = {7, 9, 11, 13};

bool toggle[NUM_BUTTONS];
bool btnflag; // Flanke Taster gedrückt

// mehrere Instanzen von Bounce in einem Array anlegen
// siehe Beispiel aus der Lib 
Bounce * button = new Bounce[NUM_BUTTONS];

void setup() {
  // put your setup code here, to run once:

  for (int i = 0; i < NUM_BUTTONS; i++) {
   // pins einstellen
    button[i].attach(btnpin[i], INPUT_PULLUP);
    button[i].interval(20);
    pinMode(ledApin[i], OUTPUT);
    pinMode(ledBpin[i], OUTPUT);
  }
  Serial.begin(9600);

}

void loop() {
  // put your main code here, to run repeatedly:
  for (int i = 0; i < NUM_BUTTONS; i++) {
    button[i].update();

    btnflag = button[i].fell();
    if (btnflag) {
      toggle[i] = !toggle[i]; // Wert toggeln
      //Serial.print(toggle[i]);Serial.println(i);
    }
    timer(i, btnflag, toggle[i]);
  }
  
}

void timer(int gruppe, bool flag, bool tog) {
  // Speicher für die Zeiten hier static damit sie nicht
  // verloren gehen.
  uint32_t static altzeitA[NUM_BUTTONS];
  uint32_t static altzeitB[NUM_BUTTONS];

  if (flag) { // starten 
    Serial.print("starten Gruppe "); Serial.print(gruppe); 
    if (tog) { // LED A
      altzeitA[gruppe]=millis();
      digitalWrite(ledApin[gruppe], HIGH);
      Serial.println(" LED A");
    }
    else { // LED B 
      altzeitB[gruppe]=millis();
      digitalWrite(ledBpin[gruppe], HIGH);
      Serial.println(" LED B");
    }
  }
  // Zeit abgelaufen LED A
  if (millis() - altzeitA[gruppe] >= 1000){
    digitalWrite(ledApin[gruppe],LOW);
}

// Zeit abgelaufen LED B 
  if (millis() - altzeitB[gruppe] >= 2000){
    digitalWrite(ledBpin[gruppe],LOW);
}
}

das ganze soll dann natürlich für 4 LEDs funktioniern,

z.B. soll A0 - an pin2 die led ansteuern. 
A1 - an pin3 
& so weiter..

LED3 - blinkt für 1000MS, soll nach 1000MS blinken auf HIGH bleiben

Und was genau heißt "auf HIGH bleiben" ?

war alles was wir in
https://forum.arduino.cc/index.php?topic=704200.msg4733123#msg4733123

geschrieben haben umsonst?

beschreibe die Logik besser:

Schreibe klare Logiktabellen!
Weniger Text mehr Logik und Grafik!
Dein Controller kann mit Freitext auch nichts anfangen.

HotSystems:
Und was genau heißt "auf HIGH bleiben" ?

einfach nur das sie dauerhaft leuchten soll

noiasca:
war alles was wir in
LED soll erst Blinken und dann an Bleiben - #45 by simons_arduinoprojects - Deutsch - Arduino Forum

geschrieben haben umsonst?

beschreibe die Logik besser:

Schreibe klare Logiktabellen!
Weniger Text mehr Logik und Grafik!
Dein Controller kann mit Freitext auch nichts anfangen.

Moin Noiasca, auf keinen Fall, es hat funktioniert, wie ich es jetzt kombinieren kann ist nur mein Problem.

Vielleicht hast du ja gleich eine Lösung für mich :slight_smile:

Das mit der Tabelle hab ich schon wieder verdrängt vielen Dank für den Tipp, hier ist sie:

Status                                        zu tun                                 verlassen bei           nächster Status
------------------------------------------------------------------------------------------------------------------
AUS                                            button lesen                       button gedrückt       BLINKEN
BLINKEN + LED1 1000MS AN      LED2 blinken + LED1 an     Zeitablauf 1sec         LED2 EIN
LED2 EIN                                    button lesen                       button gedrückt       BLINKEN
BLINKEN + LED3 2000MS AN      LED2 blinken + LED3 an     Zeitablauf 2sec         LED2 AUS

ich hoffe so ist es logischer was passieren soll.

simons_arduinoprojects:
einfach nur das sie dauerhaft leuchten soll

Dann schreibt man das auch "einfach" so, da unter deiner Beschreibung etwas anderes zu verstehen ist.

Auch weil eine Led je nach Beschaltung durch HIGH oder LOW zum Leuchten gebracht werden kann.