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.
@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
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.
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.
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.
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.
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();
}
//
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.
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"