Mit Taster Seiten durchschalten

Moin Leute,

ich hab hier ne kleine Wetterstation die mir 6 verschiedene Temps raus gibt.

Da ich aber nur 2 gleichzeitig anzeigen möchte, hab ich mir einen counter gebaut, der die Seiten (Variable "page") automatisch nach x-Sekunden durchschaltet.

Jetzt hab ich mir, damit ich nicht von Seite 1 zu Seite 3 30 Sekunden warten muss z.b, einen Taster eingebaut.

Allerdings weiss ich nicht genau wie ich das mit dem Taster und digitalRead realisieren soll, dass er die Variable "page" immer nur +1 macht. Weil beim betätigen zählt er ja sau schnell hoch.

void buttonRead()
{
  tasterStatus = digitalRead(tasterPin);

  if (tasterStatus == HIGH)
  {
    stopCount = true;
  }
  if (tasterStatus == LOW)
  {
    unsigned long currentMillis5 = millis();
    if (currentMillis5 - previousMillis5 >= interval5) {
      stopCount = false;
      previousMillis5 = currentMillis5;
    }
  }
  if ((tasterStatus == HIGH) && (page == 1))
  {
    unsigned long currentMillisButton = millis();
    if (currentMillisButton - previousMillisButton >= intervalButton) {
      page = 2;
      Serial.print("Page: ");
      Serial.println(page);
      previousMillisButton = currentMillisButton;
    }
  }
  if ((tasterStatus == HIGH) && (page == 2))
  {
    unsigned long currentMillisButton = millis();
    if (currentMillisButton - previousMillisButton >= intervalButton) {
      page = 3;
      Serial.print("Page: ");
      Serial.println(page);
      previousMillisButton = currentMillisButton;
    }
  }
  if ((tasterStatus == HIGH) && (page == 3))
  {
    unsigned long currentMillisButton = millis();
    if (currentMillisButton - previousMillisButton >= intervalButton) {
      page = 1;
      Serial.print("Page: ");
      Serial.println(page);
      previousMillisButton = currentMillisButton;
    }
  }
}

Das ist mein bisheriger versuch das zu realisieren. Allerdings wenn ich den Taster jetzt für "intervalButton" eingestellte Zeit gedrückt halte, wechselt er automatisch durch.. 1.. 2...3.. 1..2.. usw.

Aber da ich ja noch andere Funktionen einbauen will, dass wenn ich z.b. den Taster für 5 Sekunden gedrückt halte, mir was ganz anderes gezeigt wird.

Ich bräuchte da mal einen Denkanstoß.

Bisher hab ich an eine Merkervariable gedacht, aber dann muss man ja wieder pro Seite ne ewig lange if schreiben.

Der komplette Sketch wäre hier hilfreich.

Dein Problem könnte an der fehlenden Entprellung der Tasten liegen.

meisterQ:
Allerdings weiss ich nicht genau wie ich das mit dem Taster und digitalRead realisieren soll, dass er die Variable "page" immer nur +1 macht. Weil beim betätigen zählt er ja sau schnell hoch.

Kennst Du das Beispielprogramm "StateChangeDetection" zur IDE?

Wenn nicht, schau's Dir an!

Für interaktive Programme, die beim Drücken eines Tasters etwas machen sollen, ist es im allgemeinen völlig sinnlos, den aktuellen Zustand (losgelassen oder gedrückt) eines Tasters abzufragen, sondern es kommt darauf an, die Zustandsänderung (Übergang vom losgelassenen in den gedrückten Zustand abzufragen.

Zum Beispiel mit der Technik, wie es im StateChangeDetection Beispielprogramm der IDE gezeigt wird.

Für praktische Anwendungen macht man sich eine Funktion, die von der loop() Funktion aus ständig abgefragt wird und z.B. einen boolean Rückgabewert liefert, falls ein Tasterzustand sich von "losgelassen" auf "gedrückt" geändert hat.

Die Programmlogik für die loop-Funktion ist dann einfach

void loop()
{
if (buttonPressed()) page++;
}

Ah jurs. Das ist meine Lösung!

Kannte den Beispielcode nicht... Da bin ich wohl blind gewesen.

@Hotsystems, danke auch für deine Antwort. Habe den Taster allerdings entprellt.

Und der gesammte Sketch beläuft sich auf 13 Tabs mit rund 2000 Zeilen Code. Wäre schwer den zu posten!