Hallo,
genau das hatte ich mir auch soeben gedacht das es stören könnte.
Delay? Um Himmelswillen, bloss nicht. Dann wäre der Aufwand mit millis für die Katz.
Das bekommste hier nebenbei frei Haus geliefert.
Zum Verständnis warum, weshalb und wie:
Theseus erklärt millis()
http://forum.arduino.cc/index.php?topic=400102.msg2752141#msg2752141GuntherB - BlinkwithoutDelay - Die Nachtwächtererklärung
http://forum.arduino.cc/index.php?topic=423688.0Hier der geänderte Code. Ich verwende Pullup und muss dann immer nochmal vorm posten umarbeiten. Müssen deine Taster auf High reagieren? Ich hoffe ich habe nichts vergessen. Es reagiert nur auf erneuten Tastendruck. Rasselt also nicht mehr durch.
unsigned long Gewicht = 20;
struct Taster
{
byte pin;
bool read = false;
bool oldRead = false;
bool state = false;
};
Taster taster2;
Taster taster3;
void setup() {
taster2.pin = 2;
taster3.pin = 3;
pinMode(taster2.pin, INPUT);
pinMode(taster3.pin, INPUT);
Serial.begin(115200);
}
void loop() {
update_Taster();
if (taster2.state) {
Gewicht++;
taster2.state = false;
}
if (taster3.state) {
Gewicht--;
if (Gewicht < 20) {
Gewicht = 20;
}
taster3.state = false;
}
anzeige(Gewicht);
}
void update_Taster ()
{
static unsigned long last_ms = 0;
unsigned long ms = millis();
taster2.state = false;
taster3.state = false;
if (ms - last_ms >= 40) {
last_ms = ms;
taster2.read = digitalRead(taster2.pin);
taster3.read = digitalRead(taster3.pin);
if (taster2.read && (!taster2.oldRead) ) {
taster2.state = true;
}
if (taster3.read && (!taster3.oldRead) ) {
taster3.state = true;
}
taster2.oldRead = taster2.read;
taster3.oldRead = taster3.read;
}
}
void anzeige (unsigned long gewicht)
{
static unsigned long altesGewicht = 0;
if (gewicht != altesGewicht)
{
Serial.print(F("Gewicht: "));
Serial.print(gewicht);
Serial.print("g");
Serial.print("\t\t");
Serial.print((gewicht/1000.0), 3);
Serial.println("kg");
altesGewicht = gewicht;
}
}
Wenn es läuft, mach das Beste daraus. Verstehe den Ablauf.
Edit:
wegen "der Erhöhung", probiere es aus, spiele rum, damit lernt man auch, teste auch größere Werte und merke was sich in der Bedienung verändert. Danach kannste den neuen Code testen.
Edit 2:
mal wieder was "vergessen", die Zeilen 31 und 39 können raus, dass rücksetzen auf false macht die update_Taster Funktion schon