LED soll nur dann leuchten wenn durch Taster der Wert 2 erreicht wird

Hallo Freunde,

ich möchte mit den Tastenklicks bestimmte Werte generieren, die mit der Variable COUNT addiert werden.
Sobald COUNT den Wert 2 erreicht soll die LED eine Sekunde leuchten.

Aber meine LED leuchtet nie?

const int button1Pin = 2;
const int button2Pin = 3;
const int button3Pin = 4;
const int button4Pin = 5;
const int ledPin = 13;
int count;

void setup()
{
pinMode(button1Pin, INPUT);
pinMode(button2Pin, INPUT);
pinMode(button3Pin, INPUT);
pinMode(button4Pin, INPUT);
pinMode(ledPin, OUTPUT);
}

void loop()
{
int button1State, button2State, button3State, button4State;
int count == 0;

button1State = digitalRead(button1Pin);
button2State = digitalRead(button2Pin);
button1State = digitalRead(button3Pin);
button2State = digitalRead(button4Pin);

if (count >= 2)
{
digitalWrite(ledPin, HIGH);
delay(1000);
count == 0;
}
else
{
digitalWrite(ledPin, LOW);

if (button1State == LOW)

{
count = count + 0,2;
}

if (button2State == LOW)

{
count = count + 0,5;
}

if (button3State == LOW)

{
count = count + 1;
}

if (button4State == LOW)

{
count = count + 2;
}
}

}

Da steckt nicht nur ein Fehler im Code!

count = count + 0,2; count == 0; count = count + 0,5; ....

const int button1Pin = 2;
const int button2Pin = 3;
const int button3Pin = 4;
const int button4Pin = 5;
const int ledPin =  13;
int count = 0;

void setup()
{
 pinMode(button1Pin, INPUT_PULLUP); // probably better unless you have
 pinMode(button2Pin, INPUT_PULLUP); // external pullups
 pinMode(button3Pin, INPUT_PULLUP);
 pinMode(button4Pin, INPUT_PULLUP);
 pinMode(ledPin, OUTPUT);
}

void loop()
{
 int button1State = digitalRead(button1Pin);
 int button2State = digitalRead(button2Pin);
 int button3State = digitalRead(button3Pin);
 int button4State = digitalRead(button4Pin);

 if (count == 20)
 {
   digitalWrite(ledPin, HIGH);
   delay(1000);
   count = 0;
 }
 else
 {
   digitalWrite(ledPin, LOW);
   if (button1State == LOW)
   {
     count += 2;
   }
   if (button2State == LOW)
   {
     count += 5;
   }
   if (button3State == LOW)
   {
     count += 10;
   }
   if (button4State == LOW)
   {
     count += 20;
   }
 }
}

wenn Du count null setzt dann kontrollierst ob count 2 ist wird es nie 2 sein. Grüße Uwe

Die Taster müssen entprellt werden

z.B. hiermit: https://github.com/thomasfredericks/Bounce2

Sonst drückst du einmal und es werden mehrere Impulse ausgelöst.

Ein delay von 200ms hat im Grunde das Gleiche wie Entprellen gebracht :slight_smile:

GENAU DAS PRELLEN war der Grund, warum es bei jeder Taste zum Leuchten der LED kam…

Sogar bei der Taste die nur 1/10 des Werts hatte löste sie aus, weil diese Taste mehr als 10 Mal!!! prellte!!!

Hätte ich nicht geglaubt… aber zum Glück gibt es den Serial Monitor…

Es ist auch die Geschwindigkeit, nicht nur das Prellen.

Solange du die Taste gedrückt hältst, wird hochgezählt und die Schleife läuft höllisch schnell.

Habe ich dir aber schon versucht in Englisch näherzubringen.

Also Bounce2 benutzen (das entprellt) und mit rose() oder fell() arbeiten um nur die Kanten zu erhalten.

Till123: weil diese Taste mehr als 10 Mal!!!! prellte!!!

Vollkommen normal. Daran sollte nichts überraschen. Wobei 20-50ms wahrscheinlich reichen.