Signal von Hardware Buttons umwandeln

  • Hallo,

    im Rahmen meiner Abschlussprüfung muss ich ein Abfragetool für Mitarbeiter erstellen. Die html habe ich soweit fertig und auch schon mit php verknüpft. Nun müssen noch 5 Hardware Buttons hinzukommen. Man kann zwischen 1 und 5 abstimmen (1 sehr schlecht - 5 sehr gut) und wenn ein Button gedrückt wurde, soll eine Statistik erscheinen, welche beim gedrückten Button um 1 hochzählt. Sprich Person 1 drückt Button 3 (Spalte 3 wird um 1 hochgezählt), Person 2 drückt Button 2 (Spalte 3 bleibt bei 1 und Spalte 2 wird um 1 hochgezählt). Hoffe das ist verständlich. Nun mein Problem: Ich habe keine Ahnung wie ich das physische Signal der Buttons dazu bringen kann in der DB um 1 hochzuzählen. Ich habe vor das ganze mithilfe Raspberry Pi 3 B+ durchzuführen bin aber auch für andere Vorschläge offen.

    Ich hoffe mir kann jemand weiterhelfen ich bin für jegliche Hilfe dankbar. Auch wäre ein Vorschlag bezüglich eines geeigneten Programms schon sehr hilfreich.

    Ich freue mich auf eure Antworten und bedanke mich im Vorraus.^^

  • Bei Deiner eigentlichen Problemstellung kann ich leider nicht helfen.

    Wichtig ist bei so einer Geschichte, dass die Buttons entprellt werden. Das kannst Du entweder per Software machen oder (mein Favorit) per Hardware.

    Beispiel: Taster entprellen


    Ansonsten kann es Dir passieren, dass mehr Tastendrücker gezählt werden, als tatsächlich getätigt wurden.

    Am Oskar sieht das dann so aus:


    [IMG:https://mezdata.de/isp/080_entprellen-mit-ff/graph/prellen5.gif]

  • Dass du keine tiefergehende Antwort bekommst, liegt womöglich daran, dass schwer zu verstehen ist, was du bisher gemacht hast. Offenbar ein Websystem? Steht da irgendwo im Flur ein PC mit einem Webserver drauf und da läuft ein Browser mit dem die Leute dort ihre "Abfrageinfomationen" eingeben? Warum kann man dann nicht einfach die angeschlossene Tastatur nehmen und die Tasten 1-5 drücken?
    Ein Online-System kanns ja kaum sein... du willst ja sicher nicht zahlreiche Kästchen mit 5 Buttons an Mitarbeiter in aller Welt verschicken...

    Wie erkennt das System, WELCHER Mitarbeiter die Taste 3 gedrückt hat?

    Wieso willst du es mit einem Pi machen, wenn du doch das "Tool" schon fertig hast? Warum hast du das Ganze nicht komplett auf einem Pi gemacht?


    Wenn du das Projekt genauer beschreibst, ist es leichter, dir dazu was zu sagen.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Im Rahmen meines Abschlussprojektes brauche ich einen gewissen Hardwareteil. Ich baue selbst ein kleines Tablet mit einem RaspPi und einem Touch Display. Das Gehäuse dafür werde ich mithilfe eines 3D-Druckers drucken. Das Abfrageprogramm selbst ist eine html Datei, welche ich mit einem php Server verknüpft habe. Der Webserver selbst ist lokal und wird über xampp betrieben. Und die Buttons muss ich nehmen, da es von meinem zuständigen Meister so gewünscht ist. Es ist nicht nötig, zu wissen welcher Mitarbeiter wie abgestimmt hat, der Sinn der Sache ist, dass es ein anonymes Abfragetool sein soll, wo man beispielsweise abstimmen kann wie es einem geht oder ob man sich wertgeschätzt fühlt.

    Hilft das weiter oder wirft das mehr Fragen auf?

    Schonmal Danke :)

  • Ich versteh immer noch nicht den Aufbau des Systems.

    Dein Pi soll das Eingabeterminal sein?

    Es geht nur um so ne Art Umfrageergebnis? Wie willst du verhindern, dass jemand wild hundertmal auf die 5 drückt?

    Hardwarebuttons sind eine Anforderung - sonst könntest du es doch auch auf der Toucj-Oberfläche programmieren?

    Die Eingaben werden von einem Webserver verarbeitet?

    Eine HTML-Datei ist kein Programm... das versteh ich überhaupt nicht.

    Wo läuft der Webserver? Wie ist das System verteilt?

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Ja der Pi ist das Eingabe Terminal. Und da wird niemand wild drauf herum hämmern weil das im kleinen Kreis unter den Mitarbeitern vor einer Besprechung benutzt wird. Ich habe auch schon eine Web Oberfläche designet aber so ist es nicht gewollt. Mein Meister will es eben mit Buttons. Und ja eine html Datei ist auch kein Programm aber ich wusste nicht wie ich es anders sagen soll. Bei der Verarbeitung der Daten bin ich noch nicht, da ich erst einmal herausfinden wollte wie ich das Signal der Buttons auswerten kann. Anbei die Oberfläche

  • Leider weiß ich jetzt immer noch nicht, wie dein System aufgebaut ist.

    Wo ist der Webserver???

    Warum überhaupt HTML?

    Wozu überhaupt ein Bildschirm? Ändern sich die Fragen ständig? Oder willst du nur das Ergebnis anzeigen?


    Generell:

    Wenn du auf dem Bildschirm in einem Browser eine HTML-Seite anzeigst, kannst du Taster drücken , so lange du willst... da tut sich nichts.

    Erst beim Aktualisieren der Seite werden geänderte Daten angezeigt. Egal wie du die Tastendrücke verarbeitest, du musst das Browserfenster direkt nach dem Drücken eines Tasters aktualisieren. HTML bietet dazu aber keine Möglichkeit.

    Mit Ajax müsste es gehen oder evtl. mit Javascript. Du müsstest also einen aktiven Programmteil in deine Webseite einbauen. Generell kann man die GPIOs mit Javascript ansprechen - insofern müsste es auch mit Javascript innerhalb deiner Webseite gehen.


    Die Frage wird öfter mal im Web gestellt. Leider ist oft (genau wie bei dir) nicht mal klar, ob die GPIOs am Server oder am Client hängen.

    Das hier könnte dir vielleicht helfen. Jedenfalls zeigt da jemand auf seiner Webseite den Zustand der Tasten an.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Warum sollte das nicht mit HTML gehen ?

    Beim Druck auf einen Button einen Zähler in einer Datei hochsetzen und die HTML alle 2-3 Sekunden refreshen lassen, den Inhalt der Datei(en) anzeigen lassen, fertig.

  • Warum sollte das nicht mit HTML gehen ? [...] alle 2-3 Sekunden refreshen lassen [...]

    Ja, wenn 2-3 Sekunden reichen und der Anwender dann nicht fünfmal auf den Button drückt, weil nichts passiert...

    Abgesehen davon, dass Refreshs alle paar Sekunden nicht das strukturell gebotene Mittel sind, um ein paar Tastendrücke jeweils morgens an 5 Tagen in der Woche zu messen.

    Ich würde das Ganze schon nicht als HTML machen... Python mit ein bisschen Grafikkram (TkInter, evtl. mit PySimpleGUI oder einem anderen einfachen Wrapper) sollte reichen.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Vielleicht möchte LU einfach mal mit den 5 Buttons anfangen:

    Jeder Button sollte entprellt sein, und kommt dann an jeweils einen (freien) GPIO des Raspis.

    Dann muss auf dem Raspi ein Programm laufen, welches die GPIOs abfragt (am besten mit interrupts) damit auch kurze drücker zuverlässig registriert werden. Das programm zaehlt dann in 5 Variablen für jeden Butten die anzahl der Drücker und schreibt das nach jedem drücken in eine Datei (am besten auf der Ramdisk /run/shm/).

    Ein Webserver bzw. cgi script (oder was auch immer) kann dann den aktuellen Zählerstand jederzeit aus dieser Datei auslesen und irgendwie passend anzeigen. Das wär doch schonmal was?

  • Eine HTML-Datei ist kein Programm... das versteh ich überhaupt nicht.

    in HTML gibt es Check Buttons, da könnte man einen Haken setzen und senden, gleichwohl kann der PI natürlich Tasten entprellen & auswerten und den ZählerStand in einer HTML Webseite aktualisieren, einfügen auf manuellen "refresh" oder automatisch "refreshen"


    gegen 5x drücken hilft das natürlich nicht

    Images

    lasst die PIs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr

  • Hallo,


    Ludi99 : dein Vorgehen ist ein bisschen komisch - du hast die Ergebnisdarstellung, ohne überhaupt Daten für ein Ergebnis zu haben?


    Egal, also:

    Du musst halt wie schon gesagt die Taster in den Raspi anschließen und mit der Programmiersprache deiner Wahl abfragen. Python mit gpiozero bietet sich an, geht aber auch anders. Und bei jedem Tastendruck schreibst du einen Wert. Eine "richtige" Datenbank ist eigentlich ein bisschen zu viel des guten, dass tut's auch mit einem simplen KV-Store oder eine JSON-Datei.

    Aber wenn's für's Lernen ist, dann nimm' ein RDBMS. Wobei du dann nicht eine Tabelle pro Taster hast, das ist "broken by desgin". Du hast für alles eine Tabelle, wo z.B. die Nummer des Tasters und der Zeitstempel, wann der Taster gedrückt wurde, geschrieben wird. So kannst du über alle Daten und zeitlich begrenzt aggregieren.


    Wenn deine Oberfläche in HTML "live" aktualisiert werden soll, musst du Websockets einsetzen, damit der Pi auf die HTML-Seite Daten "pushen" kann.


    Das konkrete Vorgehen hängt dann davon ab, a) welche Programmiersprache du einsetzen willst und b) wie du die Daten speicherst (also RDBMS , Datei, KV-Store etc.)


    Jetzt bis du dran :-)


    Gruß, noisefloor

  • Guten Morgen,

    ich bedanke mich erstmal für die ganzen Antworten von euch. :)

    Ich habe die Tabelle, welche die Statistik am Ende anzeigt bereits mithilfe von charts.js erstellt. Und ja ich hatte vor das ganze mithilfe von ajax umzusetzen. Und es geht nicht um Abstimmungen jeden morgen an 5 verschiedenen Tagen, sondern um eine Abstimmung im kleinen Kreis von 10-20 Mitarbeitern vor einer Besprechung. Umsetzung/Anzeige mithilfe LED's ist nicht möglich, da eine grafische Darstellung gefordert ist. Und leider habe ich in Python zum Beispiel keinerlei Wissen genauso wie in anderen Programmiersprachen weswegen ich mich für html entschieden habe.

  • Ja, das kommt ja vor. Jeder fängt mal an. Nur: in html kann man nicht alles programmieren. Du muesstest Dich also doch nochmal mit einer anderen Programmiersprache auseinandersetzen. Hilft nix. Aber das ist ja vielleicht der Lerneffekt?

  • Du muesstest Dich also doch nochmal mit einer anderen Programmiersprache auseinandersetze

    Also wird es mit html so wie ich mir das vorstelle nicht klappen? ist ärgerlich weil ich echt schon relativ weit bin

  • Hallo,


    HTML ist ein Markup, mit der du festlegst, wie eine Webseite aussieht. Mehr nicht. Da ist _keinerlei_ Programmlogik enthalten. HTML ist _keine_ Programmiersprache. Außerdem wird das HTML clientseitig, also im Browser gerendert.


    Wenn du chart.js einsetzt, dann muss doch zumindest JavaScript im Spiel sein. Und wenn du von AJAX redest auch. Wobei AJAX ja der "alte" Weg ist, heute macht man das über die JavaScript fetch-API.


    Bleibt aber noch der Punkt, die Hardware abzufragen, die Daten zu speichern und per API der Webseite bereit zu stellen.

    Wie gesagt, das geht in X Programmiersprachen, Python bietet sich auf dem Raspi im an. Wenn du JavaScript kannst, kannst du das ggf. auch mit Hilfe von node.js umsetzen. Kein Ahnung, ob es da Module gibt, die die GPIOs ansprechen können.


    Gruß, noisefloor