Ich versuche einem Kollegen bei der Programmierung einer Wortuhr zu helfen. Aufbau und elektrisches ist erledigt und funktioniert insofern soweit, dass die Uhrzeit angezeigt und auch aktualisiert wird.
Was aber nicht so reagiert, wie eigentlich erwartet, ist, dass die Tasterfunktion(en) zwar erkannt werden, sprich die Zählerwerte verändern sich, aber die entsprechende Funktion wird erst nach einer gewissen Zeit übernommen.
Gedacht wäre, dass wenn der entsprechende Taster betätigt wird, die Funktion gleich und/ oder für eine gewisse Zeit ausgeführt wird. Die Taster Inputs sind mit 10k auf GND gelegt, da die Taster bei Betätigung "high" sind
Die jeweilige Reaktion erfolgt aber erst nach ca. 1 Minute...
Der Game Button ist noch nicht funktional, da soll dann später mal noch dazukommen, irgendwelche Animationen oder so..
Die Serial.Print am Schluss und das delay dienen zur Kontrolle der Werte, delay damit das im Serialmonitor
wegen der Scroll Geschwindigkeit auch lesbar wird, kommt dann schlussendlich weg.
Die verwendeten Teile und die Matrix sind im Sketch Header aufgeführt. Nicht erschrecken, die Worte der Uhr sind in berndeutschem Dialekt, wir kommen aus der Schweiz..
Kann uns da wer einen Tipp geben, wo der Fehler liegen könnte, wir stehen auf dem Schlauch.
Besten Dank!
Wir wünschen allen eine besinnliche Weihnachtszeit, trotz den momentanen Umständen, und hoffen, ihr und eure Familien bleiben gesund!
Grüsse Tom und Ueli
Den Code kann ich leider nur als Anhang einfügen, Fehlermeldung wegen mehr als 9000 Zeichen.
@HotSystems: als txt angehängt, eben, über 9000 Zeichen.
@Tommy56: hatte ich als erstes schon ausprobiert, ändert nichts. Reaktion ist dieselbe, erfolgt immer erst verzögert.
Das jeweillige hochzählen der Zählvariablen erfolgt innerhalb eines Durchgangs. Auch wenn ich das delay weglasse,
ist es dann zwar schwer zu lesen, aber wenn ich das AutoScroll im Serial Monitor auslasse kann ich die Änderung des Zustandes beim nächsten Durchgang sofort sehen. Das verwirrt mich eben. Die Abfrage der Taster erfolgt im Loop ja immer vor den Anzeigeaufrufen.
Gruss Tom
if (button_color_count == 0) white();
if (button_color_count == 1) red();
if (button_color_count == 2) green();
if (button_color_count == 3) blue();
if (button_color_count == 4) yellow();
if (button_color_count == 5) orange();
if (button_color_count == 6) ultrapink();
if (button_color_count == 7) cyan();
if (button_color_count == 8) hotmagenta();
if (button_color_count == 9) colrandom();
Ich würde das mit einem 10x4 Array machen. 10 Farben und je 4 Werte RGBW pro Farbe.
if (millis() - debounce_time > debounce_delay); //button check
delay(10); //additional debounce delay due to press button type
Eigentlich genügt das delay(10) fürs entprellen des Tasters. Da braucht es keine 0,3S millis() fürs entprellen.
Ca 75 Byte über die Serielle Schnittstelle mit 9600 Baud schicken dauert auch ca 75mS.
Hallo
uwefed, ja, der Code kann sicher optimiert werden, da werden wir sicher noch was tun.
Wie im Topicstart schon angemerkt, die Serialmonitor Ausgabe wird auskommentiert, wenn alles funktioniert, dann brauchen wir sie nicht mehr, höchstens zum debuggen.
Die Reaktion auf die Taster muss auch nicht innerhalb von ms erfolgen, nur halt auch nicht erst nach mehreren Sekunden.
Die Betätigung wird ja sofort erkannt, nur die Ausführung ist extrem verzögert, das ist das, wo wir in Moment nicht dahinter kommen
Hallo
wir haben trotz Feiertagen noch ein bisschen versucht, hinter das Problem zu kommen, aber ohne wirklichen Erfolg.
Unter Anderem den Code umgestellt (Loop am Schluss) Aufrufe im Loop anders in der Reihenfolge, aber leider keinen Erfolg.
Nur die Farbauswahl allein, ohne Anzeige der Zeit geht sofort.
Der Code ist noch nicht vereinfacht, sprich das Array haben wir noch nicht umgesetzt, zuerst soll die Struktur an sich funktionieren, optimieren können wir dann immer.
Hat wirklich niemand einen kleinen Tipp?
Anfangen würde ich mit clock_display(). Da fällt mir auf, dass am Ende mm1 = mm bei jedem Aufruf (sprich: In jeder loop()) gesetzt wird. Damit wird die Anfangsbedingung für die Zeitanzeige recht selten erfüllt sein: