LCD: Display zickt

Hallo Leute,
Ich hätte eine Frage: ich habe versucht mir mit einem LCD Display eine Stoppuhr zu bauen. In meiner Schaltung, soll ein Taster dazu verwendet werden, um das Hochzählen der Zeit zu stoppen. Leider funktioniert es nicht. Wäre super wenn mir jemand helfen könnte anbei noch Bilder vom Aufbau und des Sketches

#include "LiquidCrystal.h"
 LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
 int zeit = 0;
 int anzahl_druecken = -1;
 int gestoppte_zeit = millis()/1000 - 5;
 byte taster_druecken = 0;
void setup() {
  Serial.begin(9600);
  pinMode(9, INPUT_PULLUP);
  pinMode(13, OUTPUT);
 lcd.begin(16, 2);
  lcd.setCursor(0, 0);
  lcd.print("Stoppuhr");
  delay(5000);
  lcd.clear();
}

void loop() {
lcd.setCursor(0, 0);
lcd.print("Zeit:");
lcd.setCursor(1, 1);
lcd.print(zeit);
delay(1000);
zeit = zeit + 1;
taster_druecken = digitalRead(9);
if(taster_druecken == HIGH){
  anzahl_druecken = anzahl_druecken + 1;
      }
Serial.println(taster_druecken);
switch (anzahl_druecken){
  case 0:
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("gestoppte Zeit:");
  lcd.setCursor(1, 1);
  lcd.print(gestoppte_zeit);
  delay(5000);
  break;
  case 1:
  lcd.clear();
  delay(1000);
  break;
  case 2:
  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print("Reseting ...");
  delay(2000);
  zeit = 0;
  break;
  
    }
if(anzahl_druecken == 2){
  anzahl_druecken = -1;

Hallo
Wie hast du denn den Taster angeschlossen ?

Zwischen dem Eingang Pin und GND , dann ist bei gedruckten Taster der Eingang Low

Bau dir doch ein paar serial.print() an den entsprechenden Stellen ein, damit Du den Ablauf erkennen kannst.
Die delay sind auch ganz blöde, da bekommst du ja die meiste Zeit nicht mit wenn du den Taster drückst
Suche nach der Verwendung von millis ()

Ohne testen kann sagen, das ding wird nicht kompilieren, oder der Sketch ist nicht komplett

Hallo,
ich habe den Taster wie folgt angeschlossen (es ist ein Taster mit zwei Pins auf jeder Seite): einen Pin an GND und einen an Pin 13der als Output fungiert, da ich den 5V Pin schon belegt habe. Auf der anderen Seite des Tasters habe ich an Pin 9 angeschlossen, den ich als Input definiert habe

Hallo,
kompiliert und hochgeladen, hat es ohne Probleme

Das sieht mir mal eher nach Kurzschluss aus. :wink:
Kannst du das mal als Schaltbild posten.
Hast du an Pins auch mal gemessen, welche dauernd verbunden sind ?

Im übrigen kannst du die 5Volt Pins auch mehrfach belegen. Einfach zusammen löten oder auch per Lüsterklemme bzw. Steckklemme.

Kann nicht sein, es fehlen zwei Schließende klammer, druck mall STRG +T in der IDE.

Solange du Deine Loop() in jedem durchgang für eine volle sekunde mit dem delay(1000); blockierst, kannst Du deinen taster so korreckt anschliessen wie Du willst, das kann niemals richtig funktionieren.

Machen wir doch, nur musst du uns auch dabei unterstützen.
Also poste die angeforderte Schaltung mit deinem Taster und das Bild des Aufbaus. Das fehlt noch.
Dann gibt es sicher noch weitere Hinweise.
So wie es aussieht, zickt nicht dein Display, sondern der Aucbau und dein Sketch.

Hallo,
dann schließe den Taster Doch mal so an

Dann versuch mal den Vorschlag. Die Ausgabe erfolgt auf dem Monitor. Das Beispiel ist jetzt ohne die LCD Anzeige , aber das kannst Du sicher an den Stellen ergänzen.

Wegen des schmutzigen Entprellens mit delay(10) kann der Messfehler 10ms betragen.

/* Anschluss Taster 
   GND -------[ ]----- pin9

Beispiel.  Stopuhr 
*/

const byte btnpin = 9;// Taster schaltet nach GND

bool btnstate;
bool lastbtn;
byte counter;
byte lastcounter = 1;

uint32_t startzeit;
uint32_t messzeit;



void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  pinMode(btnpin, INPUT_PULLUP);

}

void loop() {
  delay(10); // schmutziges entprellen Messfehler kann 10ms betragen
  btnstate = !digitalRead(btnpin); // !=invertiert einlesen

  if (btnstate == HIGH && lastbtn == LOW) {
    lastbtn = HIGH;
    counter ++;
    //Serial.print(counter); Serial.println(lastcounter);
  }

  if (btnstate == LOW) lastbtn = LOW;
  if (counter > 2) counter = 0;

  switch (counter) {
    case 0:
      startzeit = millis();
      if (counter != lastcounter) {
        Serial.println(" Reset.. Warte auf start");
        lastcounter = counter;
      }
      break;
    case 1:
      if (counter != lastcounter) {
        Serial.println("gestartet .. läuft");
        lastcounter = counter;
      }
      break;
    case 2:

      if (counter != lastcounter) {
        messzeit = millis() - startzeit;
        Serial.print("gestoppt " );
        Serial.print(messzeit); Serial.println("ms");
        lastcounter = counter;
      }
      break;
  }
}

Hallo,
Dankeschön für deine Hilfe, es funktioniert jetzt einwandfrei. Auch an alle anderen ein großes Dankeschön. Da ich noch ein Anfänger bin, was das Programmieren betrifft, könnte mir vielleicht jemand erklären, unit32_t bedeutet?

Viele Grüße

Mit uint32_t definiert man Variablen die positive (unsigned) Integerzahlen mit 32 Bit (4 Byte) aufnehmen können. Beim Arduino könnte man auch „unsigned long int“ schreiben.

Genauer uint32_t
u = unsigned
int = Ganzzahl
32 = 32 Bit groß (also 4 Byte)
_t = Typ

Diese Schreibweise hat Vorteile, wenn man mit verschiedenen MC arbeitet, bei denen z.B. ein int mal 16 Bit und beim anderen 32 Bit lang ist.

Gruß Tommy