Hallo und guten Abend,
vorab noch einmal vielen Dank für die Unterstützung.
Ich hatte mich mit beiden Methoden einmal auseinandergesetzt und hat mich mit dem Sketch von uxomm mal beschäftigt, weil ich es einfach verstehen will.
Angepasst an meinen Aufbau hat die Variante mit dem Dauerlicht auch hervorragende funktioniert.
Dann dachte ich in meiner Naivität, dass ich die Blinkfunktion mal schnell einpflege und fertig. Naja, dachte ich.
Ich bekomme jetzt bei dem void langerDruckStopp() { bei jedem „break“ einen Meckerbalken und Void doubleclick ebenfalls.
Ich komme hier nicht mehr weiter.
Habt Ihr einen Tipp, wo ich so kapital versage?
Danke im Voraus…
/* LED1 LED2
Grundzustand: aus aus
Klick 1: an aus
Klick 2: aus an
Klick 3: an an
Doppelklick: aus aus
Button (Taster) nach GND
*/
#include "OneButton.h"
const byte buttonPin = A5; // den eigenen Gegebeheiten anpassen
const byte led1pin = 8; // den eigenen Gegebeheiten anpassen
const byte led2pin = 12; // den eigenen Gegebeheiten anpassen
byte myLedState;
// Setup a new OneButton
// The 2. parameter activeLOW is true, because external wiring sets the button to LOW when pressed.
OneButton button(buttonPin, true);
// In case the momentary button puts the input to HIGH when pressed:
// The 2. parameter activeLOW is false when the external wiring sets the button to HIGH when pressed.
// The 3. parameter can be used to disable the PullUp .
// OneButton button(PIN_INPUT, false, false);
// Timer Rückstellung
unsigned long timer = 0;
void setup() {
Serial.begin(9600);
// enable the leds
pinMode(led1pin, OUTPUT);
pinMode(led2pin, OUTPUT);
// link the singleclick function to be called on a single click event.
button.attachClick(click1);
// Funktion bei langen Drückendes Taters
button.attachLongPressStart(langerDruckStart);
//button.attachLongPressStop(langerDruckStopp);
// link the doubleclick function to be called on a doubleclick event.
button.attachDoubleClick(doubleclick);
}
void loop() {
// Abfrage Taster:
button.tick();
delay(10);
switch (myLedState) {
case 0:
digitalWrite(led1pin, LOW);
digitalWrite(led2pin, LOW);
break;
case 1:
digitalWrite(led1pin, HIGH);
digitalWrite(led2pin, LOW);
break;
case 2:
digitalWrite(led1pin, LOW);
digitalWrite(led2pin, HIGH);
break;
case 3:
digitalWrite(led1pin, HIGH);
digitalWrite(led2pin, HIGH);
break;
}
}
// this function will be called when the button was pressed 1 time
void click1() {
myLedState++;
if (myLedState > 3) myLedState = 3;
Serial.print("click ");
Serial.println(myLedState);
}
void langerDruckStart() {
// warten bis die LED 1 oder 2 dauerhaft leuchtet
int i = 0;
// zweimal blinken, danach LED 1 und/oder2 blinken bis doubleclick
// bis der Taster losgelassen wurde
while (i < 2)
{
digitalWrite(led1pin, HIGH);
delay(50);
digitalWrite(led1pin, LOW);
delay(200);;
i ++;
}
}
void langerDruckStopp() {
switch (myLedState) {
case 0:
if(millis()-timer > 500){
digitalWrite(led1pin, HIGH);
digitalWrite(led2pin, LOW);
}
if(millis()-timer > 1000){
digitalWrite(led1pin, LOW);
digitalWrite(led2pin, LOW);
timer=millis();
}
if(timer>millis()){
timer=0
break;
case 1:
if(millis()-timer > 500){
digitalWrite(led1pin, LOW);
digitalWrite(led2pin, HIGH);
}
if(millis()-timer > 1000){
digitalWrite(led1pin, LOW);
digitalWrite(led2pin, LOW);
timer=millis();
}
if(timer>millis()){
timer=0
break;
case 2:
if(millis()-timer > 500){
digitalWrite(led1pin, HIGH);
digitalWrite(led2pin, HIGH);
}
if(millis()-timer > 1000){
digitalWrite(led1pin, LOW);
digitalWrite(led2pin, LOW);
timer=millis();
}
if(timer>millis()){
timer=0
break;
}
}
// this function will be called when the button was pressed 2 times in a short timeframe.
void doubleclick() {
myLedState = 0;
Serial.println("doubleclick");
}