Hallo an alle Arduino Spezialisten ich bin 70 und Arbeite Ehrenamtlich im Altenheim bei den Demenz Kranken für einige Stunden. Habe bereits einige Spiele aus Holz gebaut, welche gut angekommen sind. Jetzt habe ich, da ich mal Elektriker war mich mit Arduino beschäftigt und einige Spiele gemacht habe. Jetzt habe ich ein Klötchen Spiel gemacht was auch soweit mit Sound funktioniert aber ich bekome es nicht in der programmierung hin, das ein Ausgang, wenn alle Eingänge betätigt worden sind angesprochen wird als Abschlußsound... Meine programmierung im Anschluss...
Ich würde das so machen:
1 | uint16_t buttons_memory=0; |
2 | |
3 | // in der loop:
|
4 | |
5 | if (digitalRead(buttonPins[i]) == LOW) { |
6 | buttons_memory |= (1<<i) |
7 | ...
|
8 | if (buttons_memory==0b0111111111111111) { |
9 | // ABschluss-Sound abspielen
|
10 | }
|
11 | }
|
In der Variable buttons_memory soll sich das Programm merken, welche Tasten mindestens einmal betätigt wurden. Für jede Taste wird ein Bit auf 1 gesetzt. Wenn am Ende die Variable den Wert 0b0111111111111111 hat, weißt du, dass alle Tasten betätigt wurden.
Ich habe deinen Code jetzt nicht komplett durchgelesen und analysiert, aber ... Du verwendest mehrmals eine For-Schleife von 0...14 (<15) zur Initialisierung im Setup und zum Einlesen im Loop , obwohl du die SoftwareSerial mit den Pins 10 und 11 initialisiert hast. Das kann nicht gut sein ... Die offiziell nutzbaren Pins beginnen m.E. erst bei 2 und du "überfährst" die 10 und die 11 (mindestens).
:
Bearbeitet durch User
Frank E. schrieb: > obwohl du die SoftwareSerial mit den Pins 10 und 11 initialisiert > hast. Das kann nicht gut sein ... Ich sehe da keinen Konflikt, denn diese Beiden Pins nutzt er nicht für seine Taster. > Die offiziell nutzbaren Pins beginnen m.E. erst bei 2 Passt doch, er benutzt:
1 | // Pins, an denen die Taster angeschlossen sind
|
2 | int buttonPins[15] = {2, 3, 4, 5, 6, 7, 8, 9, 12, 14, 15, 16, 17, 18, 19}; |
Außerdem funktioniert es ja
> was auch soweit mit Sound funktioniert
Rudolf G. schrieb: > Hallo an alle Arduino Spezialisten > > ich bin 70 und Arbeite Ehrenamtlich im Altenheim bei den Demenz Kranken > für einige Stunden. > Habe bereits einige Spiele aus Holz gebaut, welche gut angekommen sind. > Jetzt habe ich, da ich mal Elektriker war mich mit Arduino beschäftigt > und einige Spiele gemacht habe. Jetzt habe ich ein Klötchen Spiel > gemacht was auch soweit mit Sound funktioniert Naja, dein Programm ist blockierend. Das KANN ausreichend sein, muss nicht. > aber ich bekome es nicht > in der programmierung hin, das ein Ausgang, wenn alle Eingänge betätigt > worden sind angesprochen wird als Abschlußsound... Ok, jetzt glaube ich zu verstehen, was du willst. Es soll je ein Sound für die 15 Tasten abgespielt werden, wenn diese betätigt wird. Wenn alle betzätigt wurden ist das Spiel gewonnen und es soll ein weiterer Sound gespielt werder. Richtig? > Meine programmierung im Anschluss... Du musst dir merken, welche Sounds schon gespielt wurden. Siehe Anhang.
Danke an alle für die Beiträge. Hallo Herr Falk, die Programierung habe ich nach ihrem Vorschlag geändert. Die Programzeile 79 habe ich auf myDFPlayer.play(2);geändert, da die sounds für Ansagetext und der gewonnenen Text im Hauptverzeichnis liegt, die restlichen Sounds sind im MP3 Ordner. Leider wird der gewonnenen Sound immer wieder in einer endlos Schleife abgespielt (Zeile 79, war mit ihrer progammierung auch das gleiche). Vieleicht könnt ihr mir da auch helfen. Mit besten dank im voraus.
Rudolf G. schrieb: > Leider wird der gewonnenen Sound immer wieder in einer endlos Schleife > abgespielt (Zeile 79, war mit ihrer progammierung auch das gleiche). > Vieleicht könnt ihr mir da auch helfen. Uuups ;-) Siehe Anhang.
Einzig mit
1 | buttonPressed[i] = true; |
wird es nicht hinhauen. Folgt hier nicht irgendwann ein
1 | buttonPressed[i] = false; |
(was ich übrigens im setup() sowieso machen würde), dann dudelt die Kiste für alle Ewigkeit...
:
Bearbeitet durch User
Joe L. schrieb: > Einzig mit buttonPressed[i] = true; > wird es nicht hinhauen. Doch, denn das Abspielen des Sounds macht der Taster, nicht buttonPressed[]. Damit wird nur gespeichert, welcher Button schon mal gedrückt wurde. Man kann die Tasten mehrfach drücken und bekommt mehrfach den Sound. > Folgt hier nicht irgendwann ein buttonPressed[i] > = false; > (was ich übrigens im setup() sowieso machen würde), Nö. In C sowie C++ (Arduino) sind alle globalen Variablen, welche nicht explizit initialisiert werden, GARANTIERT Null bzw. hier false. > dann dudelt die > Kiste für alle Ewigkeit... Nö.
Falk B. schrieb: > Joe L. schrieb: >> Einzig mit buttonPressed[i] = true; >> wird es nicht hinhauen. >> Folgt hier nicht irgendwann ein buttonPressed[i] >> = false; >> (was ich übrigens im setup() sowieso machen würde), > Nö. In C sowie C++ (Arduino) sind alle globalen Variablen, welche nicht > explizit initialisiert werden, GARANTIERT Null bzw. hier false. >> dann dudelt die >> Kiste für alle Ewigkeit... > Nö. Du hast das Problem mehr oder weniger elegant umschippert - mit deiner nachgeschobenen Uuups-Version durch Einführung des Zwangsresets nach einem "gewonnen Spiel". Dadurch folgt implizit der von mir vermisste buttonPressed[i] = false; (for (int i=0; i < 15; i++)). Ob 'implizip' oder 'explizit' ist zunächst mal egal. Ich persönlich halte es da eher mit Tim Peters' s Zen of Python: "Explicit is better than implicit." und "Readability counts." (vgl. https://peps.python.org/pep-0020/) Aber jeder wie er will ...
:
Bearbeitet durch User
Rudolf G. schrieb: > ich bin 70 und Arbeite Ehrenamtlich im Altenheim bei den Demenz Kranken > für einige Stunden. "Hut ab" - Rudolf! Sollte das Steckspiel_Sound_15Titel.ino wirklich so was wie dein Erstlingswerk sein - lass Dir versichern, dass du IMHO nicht viel falsch gemacht hast! "Hut ab" aber auch für deine Tätigkeit im Ehrenamt - besonders, da du dir ein so schwieriges Terrain ausgesucht hast. Leider gibt es zunehmend immer weniger Menschen, die sich für andere einsetzen und mit unentgeltlicher Arbeit bestimmte Bereiche des Lebens "am Leben" halten. Leider schläft das immer mehr ein: Kann ja nicht anders sein, bei den zunehmenden Heerscharen von bemitleidenswerten Selbst-Optimierern, die schon in jungen Jahren auf nichts anderes mehr schielen als auf "Rest-Lebenszeit". Jedenfalls - Willkommen im Club der Babyboomer!
Hallo an alle die mir geantwortet haben vielen Dank. Das Programm funktioniert super, jetzt muss ich noch 15 Sounds mir für die Menschen in der Abteilung aussuchen(kleine Liedchen u.s.w). Ansage und Gewonnen Sound habe ich schon mal gefertigt. Im Anhang Bilder der ganzen Geschichte und besten Dank nochmal an alle.
Ich ziehe meinen Hut vor dir, richtig gute Arbeit und vor allem die Motivation dahinter. Alle Achtung!
Ich schließe mich vielen an und sage auch meinen Respekt aus. Sie machen eine unglaubliche Sache. Ich finde es unglaublich tool, dass Sie auch mit 70 jung und kreativ sind, wie ein 20-jähriger. Ich habe meinen Kindern und allen Verwandten Ihren Beitrag vorgelesen. Alles Gute wünsche ich Ihnen!
Danke nochmal an eure Antworten. Im Anhang der Schaltplan der ganzen Geschichte.
Hallo Joe L. (joelisa), die Reedkontakte mit der RC beschaltung ist keine Tastenentprellung sondern ist für die Taster Nachbildung (ca.100 msec), da der Reedkontakt dauern durch den Magneten geschlossen ist. Der Sound würde dauern abgespielt werden. Deinen Programmier Hinweis werde ich mal überdenken und besten Dank nochmal.
Rudolf G. schrieb: > ist für die Taster Nachbildung (ca.100 msec), da der Reedkontakt dauern > durch den Magneten geschlossen ist. Der Sound würde dauern abgespielt > werden. In der Tat. Aber das ist unsinnig, das kann man in Software abbilden, ist einfacher und kostet keine Zusatzbauteile.
Es tut mir Leid bin halt nicht so der Profi, habe erst im Rentenalter damit angefangen und komme aus der Analog Technik.
Hallo, habe im Arduino Forum gesucht und nichts passendes gefunden wie man das macht Dauersignal zu Impuls im Arduino Programm zu machen...
Du musst eine "Flankendetektion" machen d.h. 1. Taster einlesen 2. mit altemTastenzustand vergleichen 3. gerade gelesener Tastenwert in der Variablen "altemTastenzustand" abspeichern.
Da wir im Arduino-Framework sind: Es gibt auch Libraries dafür, die das alles automatisch erledigen. z.B. https://github.com/ArduinoGetStarted/button/blob/master/examples/05.MultipleButtonAll/05.MultipleButtonAll.ino
Rudolf G. schrieb: > Hallo, habe im Arduino Forum gesucht und nichts passendes gefunden > wie man das macht Dauersignal zu Impuls im Arduino Programm zu machen... Man muss die Flanke detektieren. In deinem Fall reicht es aber, sich zu merken, ob ein Sound schon abgespielt wurde und muss dann die Taste ignorieren. Etwa so.
1 | if (digitalRead(buttonPins[i]) == LOW && buttonPressed[i] == false) { |
2 | buttonPressed[i] = true; |
3 | delay(50); |
4 | Serial.println(i); |
5 | myDFPlayer.playMp3Folder(i + 1); // spiele das MP3 der Nummer des Tasters nach von der SD-Karte |
6 | digitalWrite(pinLedPlay, HIGH); |
7 | delay(3000); |
8 | }
|
Danke für die schnelle Antwort, werde es bei meinem nächsten Projekt mit einem Arduino Mega ausführen, da ich mehr Ausführungen brauche wie jetzt im letzten Projekt...
:
Bearbeitet durch User
Der Mega ist aber hölleteuer. Schildere doch mal, was du vorhast, sicherlich kann man zusätzliche I/Os auch durch Tricks einsparen (analoge Inputs auch analog per R2R mit mehreren Tastern belegen), I2C Portexpander, Schieberegister usw.
Neues Projekt, da meine Oma (95) mit Plattenspieler, CD-Spieler und Cassetten nicht mehr zurecht kommt, habe ich ihr das ganze in eine Kiste gepackt. Also eine Juke Box (Musikbox) gebaut mit 30 Tasten, wo sie ihre Musik weiterhin anhören kann. Mit Arduino Mega habe ich das gemacht und extra Verstärker, alles in einem Gehäuse. Sie ist so begeistert, dass sie ihre Musik weiterhin hören kann.
Rudolf G. schrieb: > Also eine Juke Box (Musikbox) gebaut mit 30 Tasten, wo sie ihre Musik > weiterhin anhören kann. Hut ab! Ich mag diese Art von Projekte, besonders aber auch deine Gehäuse: Holz, wenn sorgfältig verarbeitet, kommt bei Alt und Jung einfach immer gut an. Einen nicht unähnlichen Player hat neulich eine Bekannte angeschleppt, für ihre Kindergarten-Gruppe. Nennt sich "Hörbert" (https://www.hoerbert.com/). Selberbauen ist natürlich besser, aber was mit am "Hörbert" besonders gefallen hat ist die Aussage: "hörbert besteht nur zu 2% aus Plastik. Seine robuste Konstruktion und seine Langlebigkeit schonen die Umwelt und die Ressourcen, die unseren Kindern erhalten bleiben sollen. Und im Fall der Fälle ist hörbert selbstverständlich reparierbar!" Und weiter in https://www.hoerbert.com/technik/: "... seine [hörbert's] inneren Werte stecken voller nützlicher Details. Wir verstehen hörbert als ein Gerät, das wirklich seinen Besitzern gehört. Und wer alles ganz genau über die Technik in hörbert wissen will, findet hier viele Details [...] – um die eigene Neugierde zu stillen, alle Funktionen auszureizen, oder als Grundlage für Tüftler und Maker für ihre Projekte." Ergo gibt es im Shop auch Schaltpläne, Ersatzteile und Bausätze ... --- Um noch mal den Hinweis von von Gerald B. aufzugreifen: "Der Mega ist aber hölleteuer. Schildere doch mal, was du vorhast, sicherlich kann man zusätzliche I/Os auch durch Tricks einsparen". Ich denke, dem solltest Du mal nach gehen, da wohl 'viele Tasten' bei deinen ganzen Projekten immer ein kleines Problem sind - und man ja nicht immer wieder 'von Vorne' anfangen will ...
Rudolf G. schrieb: > ich bin 70 und Arbeite Ehrenamtlich im Altenheim Rudolf G. schrieb: > da meine Oma (95) Wen genau willst Du veralbern?
Hugo H. schrieb: > Rudolf G. schrieb: >> ich bin 70 und Arbeite Ehrenamtlich im Altenheim > > Rudolf G. schrieb: >> da meine Oma (95) > > Wen genau willst Du veralbern? Off-topic https://www.oe24.at/welt/23-jaehrige-ist-die-juengste-oma-der-welt/19746446
Hallo an Hugo.H und Alexander natürlich möchte ich niemanden veralbern. Es ist meine Schwiegermutter, wir nennen Sie halt nur Oma. Beim nächstenmal muss ich aufpassen was ich Schreibe... Zum Arduino Mega, den habe ich als Arduino Mega2560 pro mini bestellt. https://de.aliexpress.com/w/wholesale-arduino-mega-2560-pro-mini.html?catId=0&initiative_id=AS_20230820224300&SearchText=arduino+mega+2560+pro+mini&spm=a2g0o.home.1000002.0 so hölleteuer ist er nicht. Der Hörbert Player ist für meine Schwiegermutter, da Sie sehr schlecht Sehen kann nichts. Mit freundlichen Grüßen Rudolf G.
Tolles Projekt, schade dass es so was nicht als fertiges Gerät zu kaufen gibt.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.