Ich habe 2 Tasten (Taste_hoch und Taste_runter), welche ich beim Drücken gerne zählen möchte.
Der Sketch zum zählen funktioniert nun soweit.
Ich würde jetzt gerne den Zählbereich festlegen => d.h der Zähler soll nie unter 2 bzw. über 9 zählen (in meinem Sketch beginne ich von 3 aus zu zählen).
my_xy_projekt:
Erst wenn die Taste losgelassen wird, wird der Zaehler angezeigt. Ist das so gewollt?
Ansonsten ist das eine Frage, für die es sicher hunderte Lösungen gäbe.
1000 Dank, deine Verbesserung vom Code funktioniert super
Das der Zähler erst beim loslasen der Taste zählt stört mich nicht weiter, was wäre denn zu machen, damit schon beim Drücken hochgezählt wird ?
LG
Christian
christian_auer_11:
Das der Zähler erst beim loslasen der Taste zählt stört mich nicht weiter, was wäre denn zu machen, damit schon beim Drücken hochgezählt wird ?
Auch da gibt es hunderte Möglichkeiten....
Eine wäre die folgende.
Wenn Den Code so nimmst, kannst Du in Zeile 36 am Ende die Klammer entfernen UND in Zeile 37 die // entfernen.
Den Effekt merkst Du bei gedrückter Taste.
Das "Repeat" stellst mit der Variable tick ein. Die ist gleichzeitig Dein "debounce".
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
const int Taster_hoch = 6;
const int Taster_runter = 7;
const unsigned int maxZaehler = 9;
const unsigned int minZaehler = 2;
const int tick = 300; // Wert in ms
unsigned long lastmillis;
bool lastread = false;
int Zaehler = 3;
void setup()
{
// lcd.init(); // initialize the lcd
lcd.backlight();
// lcd.begin(20,4);
Serial.begin(115200);
pinMode(Taster_hoch, INPUT_PULLUP);
pinMode(Taster_runter, INPUT_PULLUP);
}
void loop()
{
lcd.setCursor(0, 0);
lcd.print("Zaehler");
lcd.setCursor(0, 1);
lcd.print(Zaehler);
lcd.setCursor(0, 2);
lcd.print(Zaehler * 1000); // Zeitwert in ms
if (millis() - lastmillis > tick)
// && digitalRead(Taster_hoch) && digitalRead(Taster_runter))
lastread = false;
if (!digitalRead(Taster_hoch) && !lastread && Zaehler < maxZaehler)
{
Zaehler++;
lastmillis = millis(); lastread = true;
}
if (!digitalRead(Taster_runter) && !lastread && Zaehler > minZaehler)
{
Zaehler--;
lastmillis = millis(); lastread = true;
}
Serial.println(Zaehler);
}