Moba Tools + mittels 2 gedrückter Enschalter LED ansteuern

Hallo Miteinander,

könnt ihr mir kurz mit meinem Sketch weiterhelfen ?

Ich würde gerne wenn ich Taster3 und Taster 4 gleichzeitig gedrückt habe die LED 2 einschalten.
In meinem Sketch schaltet scich jedoch LED 1 und 3 ein wenn ich beide Taster gedrückt habe.
Was muss ich hier korrigieren ?

#define MAX8BUTTONS
#include <MobaTools.h>

enum { Taster3, Taster4 } ;
const byte tasterPins[] = { 46, 47 };
MoToButtons taster( tasterPins, sizeof(tasterPins), 20, 500 );


const int LED_1 = 10;
const int LED_2 = 11;
const int LED_3 = 12;


void setup() {
  pinMode (LED_1, OUTPUT);
  pinMode (LED_2, OUTPUT);
  pinMode (LED_3, OUTPUT);

  digitalWrite(LED_1, LOW);
  digitalWrite(LED_2, LOW);
  digitalWrite(LED_3, LOW);
}

void loop() {

  taster.processButtons();

  if (taster.pressed(Taster3))
  {
    digitalWrite(LED_1, HIGH);
  }
  if (taster.released(Taster3))
  {
    digitalWrite(LED_1, LOW);
  }


  if (taster.pressed(Taster4))
  {
    digitalWrite(LED_3, HIGH);
  }
  if (taster.released(Taster4))
  {
    digitalWrite(LED_3, LOW);
  }


  if (taster.pressed(Taster3) && taster.pressed(Taster4)) {    //wenn beide Taster gedrückt sind sollte LED 2 angehen
    digitalWrite(LED_2, HIGH);
  }
  if (taster.released(Taster3) && taster.released(Taster4))  {
    digitalWrite(LED_2, LOW);
  }

}

LG
Christian

Hallo Christian,
die Methode 'pressed' ist ein Ereignis ( eine Flankenerkennung ). Wenn Du das kombinieren wolltest, müsstest Du die Tasten innerhalb eines loop Durchlaufes gleichzeitig drücken können. Das wirst Du niemals schaffen.
Für das, was Du willst, ist es besser den 'state' das Tasters abzufragen, also den statische Zustand gedrückt oder nicht.
Z.B. so:

#define MAX8BUTTONS
#include <MobaTools.h>

enum { Taster3, Taster4 } ;
const byte tasterPins[] = { 46, 47 };
MoToButtons taster( tasterPins, sizeof(tasterPins), 20, 500 );


const int LED_1 = 10;
const int LED_2 = 11;
const int LED_3 = 12;


void setup() {
  pinMode (LED_1, OUTPUT);
  pinMode (LED_2, OUTPUT);
  pinMode (LED_3, OUTPUT);

  digitalWrite(LED_1, LOW);
  digitalWrite(LED_2, LOW);
  digitalWrite(LED_3, LOW);
}

void loop() {

  taster.processButtons();

  if (taster.state(Taster3) && taster.state(Taster4)) {    //wenn beide Taster gedrückt sind sollte LED 2 angehen
    digitalWrite(LED_2, HIGH);
    digitalWrite(LED_1, LOW );
    digitalWrite(LED_3, LOW );
  } else {
    digitalWrite(LED_2, LOW);   // Wenn nicht beide gedrückt, Led2 aus, und Led1 / 3 entsprechend Tasterzustand schalten.
    digitalWrite(LED_1, taster.state(Taster3) );
    digitalWrite(LED_3, taster.state(Taster4) );
  }

}

Hallo MicroBahner,

vielen Dank für deine Korrektur, so funktionert es nun perfekt.

LG
Christian