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
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 ()
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
Das sieht mir mal eher nach Kurzschluss aus.
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.
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.
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?
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.