Hallo liebe Community,
meine Button reagieren nicht richtig ich mache da etwas falsch und ich habe keine Ahnung was?
Wenn ich den Code für einen Button ohne MUX teste geht alles so wie es soll:
#include "OneButton.h"
int dataPin_2 = 2;
OneButton button(dataPin_2, true);
void setup(){
Serial.begin(9600);
button.attachClick(singleClick);
button.attachDoubleClick(doubleClick);
}
void loop(){
button.tick();
}
void singleClick(){
Serial.println("singleClick() detected.");
}
void doubleClick(){
Serial.println("doubleClick() detected.");
}
Wenn ich 8 Buttons an eine 4051 MUX ohne die OneButton lib. nutze ist auch alles TOP!!!:
int multiBut_sA = 5;
int multiBut_sB = 6;
int multiBut_sC = 7;
int dataPin_2 = 10;
int butWert[8] = {0};
int butWertAlt[8] = {0};
int butNummer[] = {20,21,22,23,24,25,26,27};
void setup() {
pinMode(multiBut_sA, OUTPUT);
pinMode(multiBut_sB, OUTPUT);
pinMode(multiBut_sC, OUTPUT);
pinMode(dataPin_2, INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
butTest();
}
void butTest () {
for (int i = 0; i < 8; i++){
digitalWrite(multiBut_sA, HIGH && (i & B00000001));
digitalWrite(multiBut_sB, HIGH && (i & B00000010));
digitalWrite(multiBut_sC, HIGH && (i & B00000100));
butWert[i] = digitalRead(dataPin_2);
if (butWert[i] != butWertAlt[i]) {
Serial.print("But ");
Serial.print(butNummer[i]);
Serial.print(" ");
Serial.println(butWert[i]);
}
butWertAlt[i] = butWert[i];
}
}
Wenn ich hier jedoch versuche die Lib. einzubinden gehen mir clicks verloren!
Die Ausgabe ist korrekt wenn sie kommt.
#include "OneButton.h"
int multiBut_sA = 5; // select A
int multiBut_sB = 6; // select B
int multiBut_sC = 7; // select C
int dataPin_2 = 10; // Daten
int butWert[8] = {0};
int butWertAlt[8] = {0};
int butNummer[] = {20,21,22,23,24,25,26,27};
int Wert = {0};
int but = {0};
OneButton button(dataPin_2, true);
void setup() {
pinMode(multiBut_sA, OUTPUT);
pinMode(multiBut_sB, OUTPUT);
pinMode(multiBut_sC, OUTPUT);
pinMode(dataPin_2, INPUT_PULLUP);
Serial.begin(9600);
button.attachClick(singleClick);
button.attachDoubleClick(doubleClick);
}
void loop() {
butTest();
}
void butTest () {
for (int i = 0; i < 8; i++){
digitalWrite(multiBut_sA, HIGH && (i & B00000001));
digitalWrite(multiBut_sB, HIGH && (i & B00000010));
digitalWrite(multiBut_sC, HIGH && (i & B00000100));
butWert[i] = digitalRead(dataPin_2);
if (butWert[i] != butWertAlt[i]) {
but = butNummer[i];
Wert = butWert[i];
button.tick();
}
butWertAlt[i] = butWert[i];
}
}
void singleClick(){
Serial.print("Button");
Serial.print(" ");
Serial.println(but);
Serial.println("singleClick() detected.");
Serial.print("Status");
Serial.print(" ");
Serial.println(Wert);
Serial.println("");
}
void doubleClick(){
Serial.print("Button");
Serial.print(" ");
Serial.println(but);
Serial.println("doubleClick() detected.");
Serial.print("Status");
Serial.print(" ");
Serial.println(Wert);
Serial.println("");
}
Was mache ich falsch?