Arduino Nano Taster mit mehreren Funktionen

Mir geht es wie allen hier, die sich bisher gemeldet haben. Ich verstehe die Beschreibung nicht.

Die Beschreibung von Funktion 1 ist ja noch nachzuvollziehen.

Funktion 2 ist aber komplett unverständlich.

Taster 11 - schaltet Relais 1 / 2 / 3 / 4

  • langes Drücken alle Relais an
  • kurz klicken: alle Relais an
  • mehrfaches klicken: Relais x + x an / aus (x ist der Platzhalter für Relais 1:8)

Warum soll langes Drücken und kurz klicken (Drücken?) das gleiche machen?

wenn x der Platzhalter für 1:8 ist, was bedeutet "Relais1:8 + 1:8 an/aus"?
Ist mit 1:8 das Relais 1 bis 8 gemeint? Das 8. Relais von der ersten Relaiskarte?
Wieso 1:8? Funktion 2 (Taster 11) soll doch nur 1 / 2 / 3/ 4 schalten..

Taster 12- synchrone funktion wie oben.

Wie oben Funktion 1 oder Funktion 2?
Warum sollen zwei verschiedene Taster die gleiche Funktionalität haben?

Funktion 3:
Taster 1 oder ein anderer bekommt teilweise die FUnktionen aus 2.

Welcher Taster jetzt genau, was für Funktionen aus Funktion 2, die schon wirr beschrieben ist. Warum überhaupt?

Soll das auch irgendwer mal irgendwann bedienen können?

Da hilft auch das Programmschnippselchen nicht zu verstehen, was Du wirklich willst.

Sind deine Relais LOW aktiv? Oder vielleicht sogar umschaltbar: 1 Kanal Relais Modul 5V High / Low Level Trigger einstellbar | Roboter-Bausatz.de

@noiasca @Kai-R habe die Beschreibung in Post 4 überarbeitet.
Habe mein bestes gegeben, damit es sauber definiert ist bzw beschrieben.
Ist das so besser?

@wwerner Relias sind nicht umschaltbar. Wenn keine Spannung drauf, dann sind diese LOW.
Sprich mit 5V sind die HIGH

Hier ist immer noch ein Widerspruch. Soll das Relais so lange an sein, wie der Taster gedrückt ist?

Was genau soll die Status LED anzeigen? Wozu eine weitere Relais Platine?

Wie sind die Taster angeschlossen?

Wie lange ist der "Startmodi"? Was ist das überhaupt?

Hast du einen Schaltplan (kein Fritzling)?

Fazit Immer noch viele Fragen offen.

sind das nun 4 Taster oder 1-8 --> acht?

Mehrfaches Klicken ist auch min. 1 mal kurz klicken. Das bedeutet, dass die Relais 1-4 auf jeden Fall ausgeschaltet werden (sollten sie denn an sein) wenn Relais 5&6 an- / ausgeschaltet werden sollen.

Wäre es nicht einfacher, für Relais 5/6 , Relais 7/8 sowie für alle Relais auch einen Taster vorzusehen und alles wird durch eine Lang/kurz Sequenz an- und wieder ausgeschaltet? Dann werden alle Taster gleich bedient.

Benötige einen zentralen Taster, sonst wird das zuviel.
Soll in einen VW T5 rein als Campingbeleuchtung.

Hast recht, habe ich übersehen. Funktion 1 sind 1-4

Nein Relais geht an wenn gedrückt und bleibt an. Gilt immer für alle. Die bleiben an oder aus, bis der Befehl wiederholt wird.

Taster schalten GND durch, Status LED ist, damit ich weiß was an ist, die Taster haben keine Beleuchtung.

Also wenn ich den Arduino beschreibe, gehen die Relais an, aus, an und bleiben an.
Habe ich aber im Setup ja eigt. auf LOW gestellt.

Naja.. nach Deiner Beschreibung sind es min. sechs Taster. Wenn es nur ein Taster sein soll nimm ein Display und einen Rotary Encoder. Dann wird die gewünschte Funktion einfach durch Drehen ausgewählt und durch einen Tastendruck aktiviert bzw. deaktiviert.

Dürfte die einfachste Bedienung sein.

Klingt auch nicht schlecht.
Hab mir grad mal ein paar Beispiele angesehen.
Kann man da dann auch anzeigen, was welchen Status hat also rolllierend, weil brauch ja ne dauerhafte Rückmeldung, wenn ich keine Status LED verbaue.

Sicher kann man das ...

Hier ist auch ein Beispiel:

Passt nicht so ganz zu dem was Du vor hast ... wäre aber eine von vielen Möglichkeiten...

Die Relais verhalten sich simultan zu den Zuständen der ansteuernden GPIOs. Den Zustand deiner GPIOs kannst du abfragen und in jeglicher Art dir visuell wiedergeben.

Versuche mal die Pins erst auf LOW zu setzen und dann auf Output zu setzen. Und schiebe den Teil mal ganz an den Anfang vom Setup.

Zeig doch bitte mal ein Link oder Foto zu deinem Relais.

Nicht das du aus Versehen Lastseitig am normally closed statt am normally open Ausgang bist. Dann gehen die Verbraucher mit Zündung des T5 an. Bei Low aktiv Relais gehen dann bei LOW vom Arduino deine Verbraucher aus.

Das hilft nicht!
Die Methode funktioniert nur wenn man mit HIGH am Pin starten möchte.

z.B. so:

digitalWrite(RELAY1_PIN, HIGH);
pinMode(RELAY1_PIN, OUTPUT);

Alternativ:

pinMode(RELAY1_PIN, INPUT_PULLUP);
pinMode(RELAY1_PIN, OUTPUT);

mir ist zwar auf Grund deiner Aussagen immer noch nicht klar ob deine Relaismodule HIGH oder LOW active sind, aber die Tastenlogik kann man z.B. so machen:

@davidmei schau mal drüber - die "Testfälle" aus #4 tun aus meiner sicht genau das.

Summary
/*
  https://forum.arduino.cc/t/arduino-nano-taster-mit-mehreren-funktionen/1291196/4

  2024-09-01 by noiasca
  code not in thread (not confirmed by TO so far)
*/
#include <OneButton.h>

// as simple helper class to toggle pins
class Output {
  protected:
    const uint8_t pin;   // pins are considered to be HIGH active
  public:
    Output(uint8_t pin) : pin(pin) {}

    void begin() {
      pinMode(pin, OUTPUT);
      digitalWrite(pin, LOW);
    }

    void off() {
      digitalWrite(pin, LOW);
    }

    void on() {
      digitalWrite(pin, HIGH);
    }

    void toggle() {
      digitalRead(pin) == LOW ? digitalWrite(pin, HIGH) : digitalWrite(pin, LOW);
    }
};

Output output[] {2, 3, 4, 5, 6, 7, 8, 9}; // create 8 outputs on specific pins

OneButton button[6];  // create 6 buttons, pins and modes will be set in setup

// the callbacks
void click0() {
  output[0].toggle();
}

void click1() {
  output[1].toggle();
}

void click2() {
  output[2].toggle();
}

void click3() {
  output[3].toggle();
}

void click4() {                        // kurz klicken: ersten 4 Relais aus
  for (int i = 0; i < 4; i++)
    output[i].off();
}

void long4() {                         // langes Drücken ersten 4 Relais an
  for (int i = 0; i < 4; i++)
    output[i].on();
}

void double4() {                       // mehrfaches klicken: zwei weitere Relais an / aus
  output[4].toggle();
  output[5].toggle();
}

void click5() {                        //  kurz klicken: alle Relais aus
  for (int i = 0; i < 8; i++)
    output[i].off();
}

void long5() {                        //  langes Drücken alle Relais an
  for (int i = 0; i < 8; i++)
    output[i].on();
}

void double5() {                      // mehrfaches klicken: letzten beiden Relais & Relais an / aus
  output[6].toggle();
  output[7].toggle();
}

void setup() {
  for (auto &i : output) i.begin();
  button[0].setup(A0, INPUT_PULLUP, true);
  button[1].setup(A1, INPUT_PULLUP, true);
  button[2].setup(A2, INPUT_PULLUP, true);
  button[3].setup(A3, INPUT_PULLUP, true);
  button[4].setup(A4, INPUT_PULLUP, true);
  button[5].setup(A5, INPUT_PULLUP, true);
  button[0].attachClick(click0);
  button[1].attachClick(click1);
  button[2].attachClick(click2);
  button[3].attachClick(click3);

  button[4].attachClick(click4);
  button[4].attachLongPressStop(long4);
  button[4].attachDoubleClick(double4);

  button[5].attachClick(click5);
  button[5].attachLongPressStop(long5);
  button[5].attachDoubleClick(double5);
}

void loop() {
  for (auto &i : button) i.tick();
}
//

This text will be hidden

Habe diese hier:
https://www.amazon.de/gp/product/B01M61VVGV/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1

okay super, dann Frage ich die ab und schreibe die in ne extra Zeile.

So geht es, danke. Aber damit habe ich immer 5V anliegen am Relais.
Heißt wenn ich es richtig verstehe, sind die Relais am Anfang high und bei schalten werden die LOW.

Dann sind deine Relais "Low-aktiv".

Das ist also Verwirrend bis falsch.
Trägt keinesfalls zur Klärung bei.

Relais können nicht HIGH oder LOW sein.
Da gibts kein Kraut für!
Sie sind aktiv/angezogen, oder inaktiv/abgefallen.
Und deine Relais Ansteuerung ist eben "Low-aktiv"

Deswegen die Frage ob NC mit NO verwechselt.

Das ist die zweite Seite.....

Mein Rat:
Erst den Eingang klären, dann den Ausgang.