Forum: Mikrocontroller und Digitale Elektronik Arduino Programmierung


You were forwarded to this site from EmbDev.net. Back to EmbDev.net
von Rudolf G. (rudolf_g537)


Angehängte Dateien:

Lesenswert?

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...

von Stefan F. (Gast)


Lesenswert?

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.

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

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
von Stefan F. (Gast)


Lesenswert?

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

von Falk B. (falk)


Angehängte Dateien:

Lesenswert?

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.

von Rudolf G. (rudolf_g537)


Lesenswert?

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.

von Falk B. (falk)


Angehängte Dateien:

Lesenswert?

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.

von Joe L. (joelisa)


Lesenswert?

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
von Falk B. (falk)


Lesenswert?

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ö.

von Joe L. (joelisa)


Lesenswert?

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
von Joe L. (joelisa)


Lesenswert?

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!

von Rudolf G. (rudolf_g537)


Angehängte Dateien:

Lesenswert?

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.

von Ingo L. (corrtexx)


Lesenswert?

Ich ziehe meinen Hut vor dir, richtig gute Arbeit und vor allem die 
Motivation dahinter. Alle Achtung!

von Val D. (valeri_d)


Lesenswert?

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!

von Rudolf G. (rudolf_g537)


Angehängte Dateien:

Lesenswert?

Danke nochmal an eure Antworten. Im Anhang der Schaltplan der ganzen 
Geschichte.

von Rudolf G. (rudolf_g537)


Lesenswert?

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.

von Falk B. (falk)


Lesenswert?

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.

von Rudolf G. (rudolf_g537)


Lesenswert?

Es tut mir Leid bin halt nicht so der Profi, habe erst im Rentenalter 
damit angefangen und komme aus der Analog Technik.

von Rudolf G. (rudolf_g537)


Lesenswert?

Hallo, habe im Arduino Forum gesucht und nichts passendes gefunden
wie man das macht Dauersignal zu Impuls im Arduino Programm zu machen...

von Christoph M. (mchris)


Lesenswert?

Du musst eine "Flankendetektion" machen d.h.

1. Taster einlesen
2. mit altemTastenzustand vergleichen
3. gerade gelesener Tastenwert in der Variablen "altemTastenzustand" 
abspeichern.

von Christoph M. (mchris)


Lesenswert?

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

von Falk B. (falk)


Lesenswert?

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
    }

von Rudolf G. (rudolf_g537)


Lesenswert?

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
von Gerald B. (gerald_b)


Lesenswert?

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.

von Rudolf G. (rudolf_g537)


Angehängte Dateien:

Lesenswert?

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.

von Joe L. (joelisa)


Lesenswert?

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 ...

von Hugo H. (hugo_hu)


Lesenswert?

Rudolf G. schrieb:
> ich bin 70 und Arbeite Ehrenamtlich im Altenheim

Rudolf G. schrieb:
> da meine Oma (95)

Wen genau willst Du veralbern?

von Alexander (alecxs)


Lesenswert?

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

von Rudolf G. (rudolf_g537)


Lesenswert?

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.

von Andre M. (andre1597)


Lesenswert?

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
Noch kein Account? Hier anmelden.