Hallo,
eigentlich wolltest Du doch kurz und lang drücken als Unterschied haben, dann fehlt Dir erst mal eine zeitliche Komponente. Der Arduino ist so schnell das er wenn Du den Taster drückst dein Zähler ratzfatz auf 1000 angkommen ist. Da kann man Ihn mit einem delay() erst mal ausbremsen wenn der Taster gedrückt wird. Ich hab Deinen Sketch mal ein bisschen umgebaut. Eigentlich ist das was ich da gemacht habe völliger Quatsch, funktioniert aber für deinen Fall.
ich hoffe Du verstehst die Funktion. ich hab ein paar Serielle print mit eingebaut damit Du den Ablauf auf dem Monitor verfolgen kannst und ein paar Kommentare dazu gebaut.
Wenn Du es richtig machen willst solltest Du delay() nicht verwenden und auf millis() umbauen. Dazu Nachtwächter Erklärung suchen. Einfacher ist es eine Lib zu verwenden um zeitliche Abläufe zu realisieren
Heinz
int led = 13; //LED ist an Pin 13
int tast = 12; //Taster ist an Pin 12 schaltet gegen GND
int b = 0;
void setup() {
pinMode(led, OUTPUT);
pinMode(tast, INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
// solange der Taster gerückt wird zähler erhöhen
while (digitalRead(tast) == LOW) { // Solange der Taster gedrückt ist, wird b, 1 addiert.
b = b + 1;
delay(100); // system ausbremsen
Serial.println(b);
}
// wenn der Taster nicht gedrückt ist zäher abfragen
Serial.println(b);
if (b <= 3 && b>0 ) { //falls taster kurz gedrückt wurde
Serial.print("kurz");
digitalWrite(led, HIGH);
delay(2000);
digitalWrite(led, LOW);
b = 0; //b wird wieder auf 0 zurückgesetzt
}
if (b >= 3) { //falls taster lang gedrückt wurde
Serial.print("lang");
digitalWrite(led, HIGH);
delay(9000);
digitalWrite(led, LOW);
b = 0; //b wird wieder auf 0 zurückgesetzt
}
}