OneButtonLibrary _ HoldButton

Hi Arduino Spezies,

da ich Anfänger bin versuche ich mich weiter zubilden. Ich habe von YouTobe versucht aus der OneButtonLibrary das Thema hold Button nach zu installieren. Mein System ist mit Arduino Uno.
Ich bekomme folgende Fehler Info bei isButtonPressed();

ich habe folgendes mit exterenen Widerstand programmiert.

#include <OneButton.h>

int modus = 0;
int buttonPin = 11;
boolean button_Zustand;
boolean button_Vor_Zustand;
long zeit;

OneButton button = OneButton(buttonPin, false); // mit externen Widerstand

void setup()
{
Serial.begin(9600);
while (!Serial);
Serial.println("Programm start");

button.attachDoubleClick(doubleclick);
button.attachClick(oneclick);

}
void loop()
{
button.tick();
isButtonPressed();
delay(10);
}
void isButtonPressed();
{
button_Zustand = digitalRead(buttonPin);
if (button_Zustand = HIGH && button_Vor_Zustand == LOW)
{
zeit = millis();
}
if (button_Zustand == HIGH && ((millis() - zeit) % 1000) < 20 && millis() - zeit > 500)
{
Seriel.println("Gedrückt");

}
button_Vor_Zustand = button_Zustand;
}
void oneclick()
{
Serial.println("einmal");
}
void doubleclick()
{
Serial.println("doppel");
}

void halten()
{
Serial.println("gehalten");
}

Was mache ich falsch? hat jemand einen Tipp für mich.

Mit freundlichen Grüssen aus DD

Code bitte in Code Tags </> posten.

Welche Fehler bekommst Du?

Wozu die OneButton Bibliothek? Wenn Du den Taster mit digitalRead abfragst, ist die Bibliothek überflüssig. Wenn schon, dann müßtest Du button.irgendwas abfragen.

Hast Du Dir schon mal die Beispielprogramme zum Umgang mit Schaltern angeschaut (Debounce...)?

Ich weiß viele Wege führen nach Rom. Man hatte mir im Forum für mein Problem die OneButton Bibliothek empohlen. Jetzt habe ich mich damit befasst. Irgend wo muss ich mal ansetzen. Um mein Projekt mit mehreren Tasten schalten Relais. Soll für später ein kleine Wohnungsteuerung werden. Kleine Rentnerbeschäftigung. Stehe am Anfang mit der ganzen Programmierung. Die Taster sollen unterschiedliche Funktionen haben. deshalb die OneButton Bibliothek.

Den Fehlercode hatte ich als Image im Anhang!
'isButtonPressed' was not declared in this scope

Das Semikolon hinter dem Funktionsnamen muss weg.

"void isButtonPressed"

Danke für die Info. das ist ein klasischer Anfängerfehler. Hatte noch einen Fehler drin. den habe ich aber slbst entdeckt.
Danke nochmal.

OpaDD:
Danke für die Info. das ist ein klasischer Anfängerfehler. Hatte noch einen Fehler drin. den habe ich aber slbst entdeckt.
Danke nochmal.

Na prima, dann geht es ja voran. :wink:

Es geht voran, aber mit neuen Problemen.
Ich habe das Sketch mit Teilen aus dem ersten Teil erweitert mit der Hoffnung das ich die zwei weiteren Button aktivieren kann. Der Sketch hat sich ohne Problme laden lassen, aber nur Button sieht man im Monitor.
Button1 und Button 2 sind ohne aktivität. Bestimmt wieder ein Anfängerfehler.
Was mache ich jetzt wieder falsch?

#include <OneButton.h>

int modus = 0;
int buttonPin = 11;
int buttonPin1 = 10;
int buttonPin2 = 9;
boolean button_Zustand;
boolean button_Vor_Zustand;
long zeit;

OneButton button = OneButton(buttonPin, false); // mit internen Widerstand
OneButton button1 = OneButton(buttonPin1, false);
OneButton button2 = OneButton(buttonPin2, false);

void setup()
{
Serial.begin(9600);
while (!Serial);
Serial.println("Programm start");

button.attachDoubleClick(doubleclick);
button.attachClick(oneclick);
button1.attachClick(oneclick);
button2.attachClick(doubleclick);
button2.attachPress(halten);
button2.setPressTicks(3000);
}
void loop()
{
button.tick();
isButtonPressed();
button1.tick();
button2.tick();
delay(10);
}
void isButtonPressed()
{
button_Zustand = digitalRead(buttonPin);
if (button_Zustand == HIGH && button_Vor_Zustand == LOW)
{
zeit = millis();
}
if (button_Zustand == HIGH && ((millis() - zeit) % 500) < 20 && millis() - zeit > 300)
{
Serial.println("Gedrueckt");

}
button_Vor_Zustand = button_Zustand;
}
void oneclick()
{
Serial.println("einmal");
}
void doubleclick()
{
Serial.println("doppel");
}
void halten()
{
Serial.println("gehalten");
}

Danke für Euer Verständnis.

OpaDD:
Was mache ich jetzt wieder falsch?

Du hast wieder keine Code-Tags für den Sketch verwendet.

Schaltfläche </> oder nachträglich mit [code] vor und [/code] nach dem Sketch, ohne den Stern*.

So kann man den schlecht lesen.

Und erkläre doch mal kurz, was du mit dem Sketch erreichen möchtest.

Ich möchte mit mehrer Button schalten. Das Ziel ist Button sollen mehrer Funktionen haben.
Das große Ziel ist ein Wohnungssteuerung. Z.B. Button soll Klick Funktion, Doppelkick und Dauerklick solle eine andere Funktion ausführen. Button führt Oneclick, doubleclick und gedrückt(Halten aus).
Button1 soll einfach Klick ausführen und Button2 soll mit Doppelklick und halten eine andere Funktion ausführen. So die Schaltung. Probe im Monitur zu sehen. Ich möchte sehen wie ich erstmal die 3 Button mitunterschiedlichen Doppelfunktionen steuern kann.
Der Sketch funktioniert jetzt wie ich es beschrieben habe. Ich habe die Fehler selbst entdeckt.
Button 2 war auf falschen Eingang und die Zeit zu halten war zu lange.
Jetzt geht es mit geplant weiter.

Geplant ist das ich verschiedene Taster mit Doppelfunktion ( Klick Taster Button schaltet Relais ein und nach einer bestimmten Zeit wieder aus(Treppehausschaltung) und halten soll Dauerlicht schalten und nochmals Taster halten Relais ausschalten. Diese Funktionen möchte ich für verschiedene Taster aktivieren können.
Das ist noch viel Arbeit. Ich habe Erfahrung mit Simatic S7. Da geht es einfacher. Aber so ein Steuergrät ist nicht preiswert und Teilweise auch zu groß.
So will ich es mit meiner Renterarbeit mit Arduino Uno probieren und wenn man Erfolg hat ist auch ganz schön.

Jetzt möchte ich eine Reihe Buttons zuschalten bringen. Da habert es schon.

Danke für Eure Verständnis.

OpaDD:
Jetzt möchte ich eine Reihe Buttons zuschalten bringen. Da habert es schon.

Ok, dein Problem sind aber die fehlenden Kenntnisse der Grundlagen.

Du gehst an eine Library ran, die du so nicht verstehst. Da solltest du erst mal einfache Schaltfunktionen mit einzelnen Tastern üben. Das hatte dir auch schon DrDiettrich geschrieben.

Wenn du mit mehreren Tastern umgehen kannst und damit Ergebnisse erzielst, solltest du erst auf eine Library umsteigen. Ohne diese einfachen Grundlagen wird es nichts.

Bringe per Taster (2 - 3 St.) Leds zum Leuchten.

Und setzte bitte den Sketch in Code-Tags.

Hast du dir mal die Beispiele angeschaut die mit der Library dabei sind?
Da wird ganz anders gehandelt.

Die Bibliothek erwartet Unterprogramme, die bei den Ereignissen eines Buttons (Click, DoubleClick, Press) aufgerufen werden. Diese Unterprogramme mußt Du jeweils selbst schreiben, und mit buttonX.attachXYZ(meinABC) anmelden.

Wenn ein Ereignis dazu führen soll, daß eine LED eingeschaltet wird, dann schreibst Du ein Unterprogramm, das genau das tut. Nennen wir es mal LED1ein(). Wenn dies bei einem Doppelklick auf Button2 passieren soll, dann kommt in setup() ein Aufruf
Button2.attachDoubleClick(LED1ein);
Dann wird anschließend bei jedem DoubleClick von Button2 dieses LED1ein() aufgerufen.
Entsprechend für alle weiteren Ereignisse und Buttons.

In loop() muß für jeden Button der zugehörige Automat (state machine) aufgerufen werden, also ButtonX.tick();
Das wars dann auch schon :slight_smile:

hust