Vorhandenen Sketch erweitern

hi,

Im Moment fehlt mir dazu eine geniale Idee, wie das mit einer kleinen Änderung am vorhandenen Programm oder mit einer kurzen, knackigen Neuprogrammierung mal eben auf die Schnelle hinzubekommen ist.

na klar, jurs, und wir kennen Dich und Deine programmierfähigkeiten ja auch nicht... :stuck_out_tongue:

gruß stefan

Nitri:
Eine Schaltstufe ist nur ´n Transistor, paar Widerstände fertig :slight_smile: Zwar gibt der Piezo keine verschiedene Frequenzen wieder. Dafür ist der schön laut.

Verstehe ich das jetzt richtig: Du hast einen 12V-Buzzer, der nur beim Anlegen von 12V schön laut piepst und steuerst den mit der "tone" Funktionan als wenn ein Lautsprecher angeschlossen wäre?

Normalerweise wird bei selbst klingenden Buzzern der Ton nur durch Anlegen einer Spannung eingeschaltet und er piept solange, bis er abgeschaltet wird. Und mit "tone" (Ausgabe einer pulsierenden Schwingung) werden Piezo-Sounder oder Lautsprecher (ggf. mit Audio-Verstärker) angesteuert. Wenn Du einen Buzzer mit der tone-Funktion ansteuerst, dürfte das ein ganz schön derber Klang werden.

Nitri:
Ja, der andere Code hat schon was und eine Versuchung wert eine zweite Kiste zu bauen :slight_smile: :slight_smile:

Es kamen ja noch Vorschläge, das die Zeit schneller abläuft, wenn der Code falsch eingegeben worden ist und ab der letzten Minute die Tonhöhe immer mehr ansteigt. Never change a running system :slight_smile: :slight_smile: Ich bin froh, dass das so wie es momentan ist, läuft. Auch wenn´s ein Teller Spaghetti ist ^^

Ich habe mit Deiner Programmlogik mal ein bisschen herumexperimentiert: Findest Du es eigentlich gut so, dass die Codeeingabe nach der vierten Ziffer automatisch als abgeschlossen angesehen wird?

Wenn da die Paintball-Spieler nach körperlicher Belastung und auf Adrenalin mit zittrigen Fingern auf der Keypad-Folientastatur tippen, wie oft gibt es da unbeabsichtigte "Doppelanschläge"? Wenn z.B. der Code "1234" eingegeben werden soll und bei der Eingabe der Ziffer 3 gibt es einen versehentlichen Doppelanschlag, dann nimmt Deine Programmlogik sofort "Code 1233 - WRONG CODE!". Es gibt keine Möglichkeit zur Korrektur einer Fehleingabe.

Sollte man es nicht viel lieber so vorsehen, dass die Eingabe mit der Doppelraute "#" abgeschlossen werden muss, so dass man nach der nächsten Ziffer immer erst noch "#" als Eingabebestätigung drücken muss. Und das Sternchen "*" als Korrekturmöglichkeit bzw. "Code verwerfen", womit man die bisher getippten Ziffern löschen/verwerfen und nochmal neu mit der Codeeingabe anfangen kann. So daß man dem Spieler als Code nicht 1234 gibt, sondern *1234# als Code verwendet?

Wenn der Spieler dann tippen sollte *1233 kann er sich immer noch überlegen als nächstes wieder * zu tippen und mit *1234# die Eingabe abschließen, ohne dass es überhaupt zu einer logischen Fehleingabe kommt?

Also ich finde es extrem fehlerträchtig, die Eingabe mit dem Tippen der vierten Ziffer als abgeschlossen anzusehen, ohne dass hinterher eine "Bestätigungstaste" gedrückt werden braucht, die keine Zifferntaste ist.

Denke mal an Geldautomaten mit vierstelliger Pin: Da mußt Du nach Eingabe der vierten PIN-Ziffer doch auch immer auf "Bestätigung" (oder "Korrektur") tippen, damit der Code ausgewertet wird und die Eingabe wird nicht automatisch mit Eintippen der vierten Ziffer als abgeschlossen angesehen. Sollte man das bei Deiner Box nicht von der Logik her genau so handhaben, um Fehlversuchen bei der Codeeingabe vorzubeugen?

Verstehe ich das jetzt richtig: Du hast einen 12V-Buzzer, der nur beim Anlegen von 12V schön laut piepst und steuerst den mit der "tone" Funktionan als wenn ein Lautsprecher angeschlossen wäre?

Fast :slight_smile: Die "tone" Funktion gibt ein Signal aus. Ich habs nicht gemessen, aber ich denke mal 5V. Der Buzzer gibt seine volle Leistung erst bei 12V ab. Also habe ich sowas mit eingebaut. Anstatt dem Relais habe ich ein Niederohmigen Wiederstand und den Piezopieper eingebaut. Eleganter und sicherer wär es mit Optokoppler. Denn wenn mal der Transistor den Geist aufgibt, gehen 12V in den Digitalausgang vom Uno rein. Und das verkraftet das Board bestimmt nicht^^

Normalerweise wird bei selbst klingenden Buzzern der Ton nur durch Anlegen einer Spannung eingeschaltet und er piept solange, bis er abgeschaltet wird. Und mit "tone" (Ausgabe einer pulsierenden Schwingung) werden Piezo-Sounder oder Lautsprecher (ggf. mit Audio-Verstärker) angesteuert. Wenn Du einen Buzzer mit der tone-Funktion ansteuerst, dürfte das ein ganz schön derber Klang werden.

Ich könnte das Schaltverhalten träger machen, so das Der Piezo nicht dieses "trillernde" Geräusch abgibt :slight_smile: Zur Zeit hört es sich an wie eine Krähe. Ich warte noch auf eine Bestellung eines serial LCD Displays. Vielleicht baue ich noch eine zweite Kiste nach dem Motto "besser, schöner, toller" :slight_smile: :slight_smile: Da kommt dann auch das Mp3 Modul und Optokoppler rein.

Hier mal ein kurzes Video mit Ton https://www.youtube.com/watch?v=P7DuGKUAlBk

Das mit der "Entertaste" ist natürlich ne gute Idee. Zudem man ja auch Handschuhe anhat, ausser Puste ist, durch die Maske vielleicht ´n bissel verschwommen sieht und, und, und. Aber ich kann das nicht programmieren. Ich bin froh, wenn ich Texte auf dem Dislplay ausgebe und LED´s zum blinken bekomme. Die Tastatur, die ich hier benutze, ich schon ein bissel besser, mit richtigen Kunststofftasten. Solch Folientastatur hat mir nicht gefallen. Aber das "" ist doch schon die Aufforderung um den Code ein zu tippern. Kann man die Taste "" doppelt belegen um das man bei Falscheingabe, die falsche Zahl weglöscht? Denn das geht ja zur Zeit nur mit der "#" Taste. Oder halt so, das man die "#" Taste gedrückt halten muss umd die Eingabe abzuschließen :slight_smile:

Ja, doppelt belegen geht natürlich. Du kannst erst * oder # drücken um die Eingabe zu starten. Dann * zum Löschen und # zum Bestätigen. Man muss sich nur merken in welchem Zustand man ist.

Ja, doppelt belegen geht natürlich. Du kannst erst * oder # drücken um die Eingabe zu starten. Dann * zum Löschen und # zum Bestätigen. Man muss sich nur merken in welchem Zustand man ist.

Ich glaub, das geht nicht gut^^ Also das mit dem merken. Das gibt in der Aufregung sicher ein Heidendurcheinander :slight_smile:

Ich meinte im Programm. Nicht der Bediener :slight_smile:

Nitri:
Ich könnte das Schaltverhalten träger machen, so das Der Piezo nicht dieses "trillernde" Geräusch abgibt :slight_smile: Zur Zeit hört es sich an wie eine Krähe.

Das "hört sich an wie eine Krähe" kommt von der falschen Ansteuerung. Ein "Buzzer" wird korrekt so angesteuert:

  • Buzzer mit Strom versorgen
  • Buzzer piept (in einer einzigen bauartbedingten Tonhöhe)
  • Strom abschalten

Ein Sounder/Lautsprecher wird dagegen mit einem Aduiosignal variabler Frequenz angesteuert und kann Töne unterschiedlicher Frequenz erzeugen.

Dein Buzzer wird bei Dir tatsächlich wie ein Lautsprecher angesteuert und macht deshalb das raue Geräusch statt eines sauberen Sinustons.

Nitri:
Das mit der "Entertaste" ist natürlich ne gute Idee. Zudem man ja auch Handschuhe anhat, ausser Puste ist, durch die Maske vielleicht ´n bissel verschwommen sieht und, und, und. Aber ich kann das nicht programmieren. Ich bin froh, wenn ich Texte auf dem Dislplay ausgebe und LED´s zum blinken bekomme. Die Tastatur, die ich hier benutze, ich schon ein bissel besser, mit richtigen Kunststofftasten. Solch Folientastatur hat mir nicht gefallen. Aber das "" ist doch schon die Aufforderung um den Code ein zu tippern. Kann man die Taste "" doppelt belegen um das man bei Falscheingabe, die falsche Zahl weglöscht? Denn das geht ja zur Zeit nur mit der "#" Taste. Oder halt so, das man die "#" Taste gedrückt halten muss umd die Eingabe abzuschließen :slight_smile:

Ein besseres Tastenfeld anstelle einer simplen Folientastatur ist natürlich keine schlechte Sache.

Und Doppelbelegungen von Tasten kann man natürlich immer nur dann machen, wenn die Funktion dabei eindeutig bleibt.

Ich habe mir nochmal die Original-Tastenlogik Deines Sketches angesehen: Du verwendest tatsächlich das Sternchen, um die Codeeingabe zu aktivieren. Vorher eingegebene Ziffern werden ignoriert. Und bis zur dritten Ziffer kann man den bis dahin eingegebenen Code tatsächlich noch korrigieren, indem man den eingetippten Code mit der Doppelraute löschen kann.

Also um den Code 1234 einzugeben, muss man bei Dir eingeben *1234

Allerdings ist der Gebrauch der Sternchen-Taste nicht konsistent: Wenn man nach der Aktivierung der Codeeingabe nochmals Sternchen eintippt, dann wird das Sternchen als Codebestandteil interpretiert und nicht die Codeeingabe neu begonnen. D.h. die fünfmalige Eingabe eines Sternchens führt zu "Wrong CODE" und nicht zur fünfmaligen Aktivierung einer neuen Codeeingabe.

Eigentlich nicht schlecht, aber ich sehe da zwei Problem:

  • Nach der dritten Stelle ist keine Korrektur mehr möglich.
  • die Sternchen-Taste wird nicht durchgängig für "Neue Codeeingabe beginnen" verwendet

Ist eigentlich die verdeckte Codeeingabe notwendig, mit der die tatsächliche Eingabe durch Sternchen verschleiert wird?

Als maximale Sicherheit gegen Falscheingaben des Codes würde ich vorschlagen:

  • Beginn der Codeeingabe mit Sternchen *
  • offene Codeeingabe ohne Verschleierung
  • Abschluß der Eingabe mit der Doppelraute #

So dass ein Code 1234 tatsächlich bei der Eingabe der Code *1234# ist.
Vorteil: Korrekturmöglichkeit bis zur Eingabe der letzten Ziffer, und durch kein "Doppelprellen" einer Taste mit Eingabe durch zittrige Hand ist eine Fehleingabe möglich. Bei Fehleingaben kann man einfach mit einem Sternchen jederzeit neu mit der Codeeingabe beginnen. Falls also z.B. falsch *1233 getippt wurde, tippt man einfach neu *1234# und der Code wurde komplett und richtig eingegeben. Also bei Fehleingabe einfach nochmal neu von vorne anfangen zu tippen, erst mit der Doppelraute wird die Eingabe komplett.

Also erstmal die Eingabe so gut es geht narrensicher machen, dann ggf. einen Zähler für die Anzahl der möglichen Fehlversuche noch zusätzlich implementieren. Wenn Du Probleme mit der Umsetzung hast, kann ich mir ja mal etwas überlegen, das ein wenig schöner und übersichtlicher umzusetzen als im vorhandenen Sketch.

Ich weiss wie Piezo und Lautsprecher funktionieren. Aber als ich den Lautsprecher drann hatte, wars definitiv zu leise. Mit dem Piezo nimm ich das "Krähengeräusch" in Kauf, dafür ist er erheblich lauter als der Lautsprecher :slight_smile: :slight_smile:

Könnte man das mit dem Code nicht so machen wie beim Bankautomaten? Zahleneingabe per Keypad, Korrektur und Bestätigung mit einem seperaten Taster?
Ist es möglich mein Soundmodul entsprechend der Eingaben mit an zu steuern? Wenn ich, z.B. die Zeit eingegeben habe und das Spiel beginnt, das dann eine gesprochene Meldung kommt "Bomb is armed! Game is beginning. Good Luck." oder wenn der Code richtig eingegeben wurde, das nach Enter drücken kommt "Bomb is defused".
Das Modul was ich hier habe, hat 5 ansteuerbare Kanäle. Jeder Kanal kann mit einem beliebigen Sound belegt werden. Die Kanäle werden mit einer Taste gegen GND geschalten (muss ich aber nochmal nach dem Schaltplan suchen)
Das ganze programmtechnisch umsetzen überschreitet bei weitem mein Laienhaftes programmierkönnen.

Gruß Frank