Anleitung für 5 Tasten


#1

Hallo Leute,

ich wurde schon häufiger gefragt, wie wir bei uns die 5 Knöpfe statt 3 implementiert haben (Vorstellung MedionUINO). Hierzu jetzt eine kleine Anleitung, die auch nicht so erfahrenen Programmierern die Umsetzung ermöglichen soll. Ich werde meinen Code erstmal nicht hochladen, da dort viele weitere Änderungen drin sind, welche auch meinen speziellen Wünschen entsprechen. Nach Weihnachten werde ich mich mit Github auseinander setzen und dann vielleicht hochladen. So, jetzt geht’s los.

Wir beginnen mit der Verdrahtung der zusätzlichen zwei Taster. Am besten ihr verwendet die Anschlüsse neben den bereits verwendeten, das wären Pin A3 und A4:

Die Software-Änderungen sind nicht so schwierig. Diese versuche ich Schritt für Schritt zu beschreiben. Die entsprechende Stelle im Code müsst ihr euch selber suchen, sollte aber nicht so schwer sein. Dann den Code so wie angegeben anpassen. Änderungen sind chronologisch, von oben nach unten im Code. Bei Fragen einfach nachhaken.

Im Code müsst ihr nun als erstes diese Verdrahtung hinterlegen (die letzten beiden Zeilen sind neu):

#define buttonPause A0
#define buttonUp A1
#define buttonDown A2
#define buttonVolUp A3		   //Zusätzliche Buttons 
#define buttonVolDown A4       //Zusätzliche Buttons 

Falls ihr andere Pins verwendet habt, entsprechend hier angeben.

Dann die neuen Buttons hinzufügen, z.B. so wenn ihr Lautstärke und vor/zurück trennen wollt (die letzten beiden Zeilen sind neu):

Button pauseButton(buttonPause);
Button upButton(buttonUp);
Button downButton(buttonDown);
Button VolUpButton(buttonVolUp);           //Neuer Knopf für Lautstärke hoch
Button VolDownButton(buttonVolDown);       //Neuer Knopf für Lautstärke runter

Dann müsst ihr im Setup die Pullups der eben definierten Buttons setzen (die letzten beiden Zeilen sind neu):

// Knöpfe mit PullUp
pinMode(buttonPause, INPUT_PULLUP);
pinMode(buttonUp, INPUT_PULLUP);
pinMode(buttonDown, INPUT_PULLUP);
pinMode(buttonVolUp, INPUT_PULLUP);		     //Zusätzliche Buttons 
pinMode(buttonVolDown, INPUT_PULLUP);        //Zusätzliche Buttons 

Dann müsst ihr im Loop die zusätzlichen Knöpfe abfragen(die letzten beiden Zeilen sind neu):

// Buttons werden nun über JS_Button gehandelt, dadurch kann jede Taste
// doppelt belegt werden
pauseButton.read();
upButton.read();
downButton.read();
VolUpButton.read();		   //Zusätzliche Buttons 
VolDownButton.read();      //Zusätzliche Buttons 

Zum Schluss müsst ihr die Funktionen der Knöpfe anpassen, dafür müsst ihr diesen Code im Loop entfernen:

if (upButton.pressedFor(LONG_PRESS)) {
  Serial.println(F("Volume Up"));
  mp3.increaseVolume();
  ignoreUpButton = true;
} else if (upButton.wasReleased()) {
  if (!ignoreUpButton)
    nextTrack(random(65536));
  else
    ignoreUpButton = false;
}

if (downButton.pressedFor(LONG_PRESS)) {
  Serial.println(F("Volume Down"));
  mp3.decreaseVolume();
  ignoreDownButton = true;
} else if (downButton.wasReleased()) {
  if (!ignoreDownButton)
    previousTrack();
  else
    ignoreDownButton = false;
}

und mit diesem ersetzen:

if (VolUpButton.wasReleased()) {
  Serial.println(F("Volume Up"));        
  mp3.increaseVolume();                
}
  
if (upButton.wasReleased()) {      
  nextTrack(random(65536));						 
}

if (VolDownButton.wasReleased()) {
  Serial.println(F("Volume Down"));
  mp3.decreaseVolume();
} 
 
if (downButton.wasReleased()) {
  previousTrack();
}

Damit sollte es dann funktionieren. Viel Spaß beim Ausprobieren :star_struck:


Vorstellung MedionUINO
Vorstellung: ein BambUINO für unsere Tochter
#2

Ich glaube den Abschnitt mit dem „pinMode“ kann ganz weggelassen werden, weil das JS_Button schon übernimmt - bin mir aber nicht sicher.


#3

Das habe ich nicht geprüft. Hab lediglich die originale Software von Thorsten genommen und angepasst. So funktioniert es auf jeden Fall bei uns.


#4

Es schadet auch nicht. Daher Danke fürs teilen.


#5

Vielen Dank, gerade getestet, und Funktioniert.
Danke für die Detaillierte Anleitung :slight_smile:


#6

Keine Ursache. Es ist schön auch mal was an die Community hier zurückzugeben, nachdem wir schon sehr viel von den Beiträgen profitiert haben :wink:

Ein Vorteil der 5 Tasten ist übrigens, dass man deutlich mehr Funktionalität einbauen kann. So kann ich mit meinem neusten Code bei langem Drücken in 10er Schritten vor- bzw. zurückspulen, bei kurzem Drücken in 1er Schritten. Durch langes Drücken der Lautstärketasten aktiviere bzw. deaktiviere ich meine Sleep-Funktion. 1h bei VolDown und 2h bei VolUp. Kurzes Drücken schaltet die Lautstärke.

Werde die Anleitung dazu demnächst hier ergänzen. Das ist aber deutlich mehr Arbeit…

Mfg DS


#7

Toll!!!

Vielen Dank für die Erklärung!

Ich werde das auch mal testen.


#8

Super, danke, hat auf den ersten Anhieb funktioniert.

Hab meinem (bzw. dem für meine Tochter) auch 5 Tasten spendiert.
Gerennte Tasten für Lautstärke und Titel Vor/Zurück halte ich für wesentlich intuitiver als die Doppelbelegung.


#9

Ich muss ja gestehen dass die umgedrehte Belegung also lauter leiser bei kurzen und weiter zurück bei langem wirklich sehr gut funktioniert. Kann in der Beta bereits über das Adminmenü konfiguriert werden.


#10

@derschlambi Kannst du eventuell den 5 Tasten mod auch für die aktuelle dev (die ja irgendwann stable wird) anpassen?
Es wurde ja recht viel geändert (durch die admin und umdreh Funktion)
Das wäre sensationell.


#11

Am besten du baust es so ein, dass es konfigurierbar wird (mit defines oder so) dann kann ich das gerne in meiner Firmware auch drin lassen und in Zukunft selber warten


#12

Ja, auch ne gute Idee.
Es sind ja doch immer mehr (gefühlt) die auf 5 Tasten umbauen.
“Häkchen” setzen in der Firmware, beim Upload, wäre natürlich der Oberknaller


#13

Das liegt aber sicher zum Teil auch daran, daß momentan lauter und leiser schlecht(er) zugänglich sind obwohl es sicher deutlich öfter gebraucht wird als nächster Titel. Wenn man die Funktionen umdreht (wie es ja jetzt möglich ist) hat man leiser/play/lauter als Tasten. Nächster Titel (was ja dann hinter dem long press verborgen ist) nutzen kleine Kinder nach meiner Beobachtung kaum bis gar nicht. Was ich sagen will ist, die fünf Tasten lösen ein Problem was in meinen Augen gar nicht so groß ist… aber klar wer das lieber hat kann das natürlich machen. Das ist ja das schöne am TonUINO.


#14

@barni und @Thorsten
Ich werde mir das die nächsten Tage mal ansehen. Mal schauen wie sich das integrieren lässt.

@stephan

Die 5 Tasten bieten für mich auch den Vorteil von einfacherer Bedienung und mehr Flexibilität, siehe meinen Post weiter oben mit den Funktionen bei LongPress.

Was mir im Original nicht so gefällt, ist die Mehrfachausführung bei LongPress. Das hab ich bei mir deaktiviert. Das benötige ich nicht. Die wichtigsten Funktionen lassen sich mit einem Druck auslösen.

Ich sehe daher weiterhin einen großen Vorteil in der Version mit 5 Tasten und denke es macht Sinn, die Möglichkeit irgendwann in die Software konfigurierbar zu integrieren.


#15

Sehe ich auch so.

Meine kleine nutzt die zurück und weiter Tasten schon oft. (Bei Ihren Lieblingsliedern und bei Märchen)
Hatte bei mir festgestellt (Hatte die Funktion damals schon umgedreht, bevor ich auf 5 Tasten umgebaut habe) das der LongPress (also Lied weiter) direkt 5 Lieder/Tracks weiter vorgesprungen ist.
Das ist natürlich doof.
Habs im Code nicht anpassen können mangels skills und hab dann umgebaut.
Little Miss Sunshine findet es mit 5 Tasten jetzt auch besser.

Also die Option wäre super.
Danke @derschlambi leider reichen meine Programmierskills nicht aus das wieder einfach hinzubekommen, deswegen meine Hilfesuche hier :wink:


#16

Das sollte über eine #define #ifdefine abgefragt werden damit nicht alles durch den Compiler wandert (spart Speicherplatz) , dann kann man auch einfach alle Funktionen als Block hinterlegen ohne noch großes if Else oder case gedöns


#17

@barni

Das Umdrehen der Funtkion der Tasten ohne mehrfaches vor- oder zurückspulen ist nicht so schwer. Die Lösung habe ich hier schon gepostet:


#18

Ging auch nicht darum das es schwer ist sondern darum Speicherplatz zu sparen gibt ja dann schon 3 Versionen für die Taster wäre Unsinn die alle durch den Compiler zu jagen wenn man ungenutzte Sachen schon im Precompiler abfangen kann


#19

Nicht jeder benötigt die neue Version mit den vielen zusätzlichen Funktionen. Mich eingeschlossen. Manchen reicht die Anpassung der letzten stabilen Version. Und denen kann die Info hier helfen.

Unabhängig davon hab ich doch schon gesagt, dass ich mir die Integration in die neue Version anschaue und Thorsten dann den Code gebe. Mit #define natürlich.


#20

Hi leute. Wollte mal fragen,ob einer von euch super Codern mir das mal anhant der dev Version nahebringen…??? Leider bin ich nur bis
Zum Schluss müsst ihr die Funktionen der Knöpfe anpassen, dafür müsst ihr diesen Code im Loop entfernen:

if (upButton.pressedFor(LONG_PRESS)) {
  Serial.println(F("Volume Up"));
  mp3.increaseVolume();
  ignoreUpButton = true;
} else if (upButton.wasReleased()) {
  if (!ignoreUpButton)
    nextTrack(random(65536));
  else
    ignoreUpButton = false;
}
if (downButton.pressedFor(LONG_PRESS)) {
  Serial.println(F("Volume Down"));
  mp3.decreaseVolume();
  ignoreDownButton = true;
} else if (downButton.wasReleased()) {
  if (!ignoreDownButton)
    previousTrack();
  else
    ignoreDownButton = false;
}

und mit diesem ersetzen:

if (VolUpButton.wasReleased()) {
  Serial.println(F("Volume Up"));        
  mp3.increaseVolume();                
}
  
if (upButton.wasReleased()) {      
  nextTrack(random(65536));						 
}

if (VolDownButton.wasReleased()) {
  Serial.println(F("Volume Down"));
  mp3.decreaseVolume();
} 
 
if (downButton.wasReleased()) {
  previousTrack();
}

Leider ist das alles auf Grund der Tauschmöglichkeit der Buttons jetzt anders geschrieben und ich blicke nicht wie man das jetzt hinbekommt. Schlambi hatte ich schon ne pm geschickt,der antwortet aber leider nicht. Vielleicht kann mir ja jemand anderes helfen.gruß

Edit @stephan: Bitte bei code den Knopf </> “Vorformarierter Text” verwenden! Danke!