Display mit "gefakten" Titelnummern

Hallo liebe Tonuino-Gemeinschaft.

Ich sitze aktuell an meinem ersten Tonuino-Projekt.
Zunächst noch ohne Gehäuse habe ich alle Teile verlötet und getestet - es funktioniert alle wie es soll.

Der Tonuino ist nicht für unseren Sohn sondern soll uns im Schlafzimmer als Hörbuch-Anlage dienen. Das einzige Problem hierbei ist, dass diese Hörbücher sehr lang sind. Es gibt also ziemlich viele Titel in einem Ordner. Damit man schneller beim gewünschten Titel ist habe ich die Buttonfunktion schonmal getauscht und auch das Delay deutlich verkürzt um schneller durch die Titel navigieren zu können, was wunderbar funktioniert.

Sehr hilfreich beim Titel-finden wäre ein Display, dass mir die aktuelle Tracknummer anzeigt. Ich habe hier bereits alles zum Thema Display und Tonuino gelesen, was wohl nicht so ohne weiteres möglich ist.
Da ich noch am Anfang stehe ist das vielleicht eine blöde Idee, aber kann man nicht einfach die Titelnummer faken? Also kann ich nicht über eine Funktion beim Starten durch eine Karte 01 auf dem Display anzeigen lassen und bei Klick auf den Next-Button +1 dazuaddieren?
Oder bereits in der Funktion entsprechend die Titelnummern einfügen (001, 002, 003, 004,…) und bei Next-Klick eins weiterspringen?

Wäre einfach total hilfreich im Display zu sehen wie oft man bereits geklickt hat - alternativ kann mna natürlich auch mitzählen…aber man ist halt verwöhnt :slight_smile:

Viele Grüße und ein schönes Wochenende,
Jan

Basiert zwar auf meiner Firmware, aber unterstützt eine 7 Segment Anzeige für die Tracks über i2c. Habe es mangels Display aber nicht selbst getestet.

Wenn du lange auf Play drückst wird die Titelnummer angesagt. Ist zwar kein Display, aber zur Orientierung reicht es ja vielleicht.

2 „Gefällt mir“

Das weiß ich, ist leider keine wirklich praktikable Lösung.
Ich habe gerade hier im Forum etwas gefunden. Aufdiebruegge hat das vermutlich genauso umgesetzt wie es für mein Projekt passen würde:

Also schnelles Titelfinden mittels Drehregler und gleichzeitiges Anzeigen der Titel…wenn ich nur wüßte wie man sowas umsetzt :slight_smile:

So ein ssd1306 er Display läuft über i2c mit der Dev vom Tonuino. Wenn nicht viel Text und die Tracknummern sind ja vorhanden, dann kann das angezeigt werden.
Tonuino mit Display
Bild einfach weglassen ,dann ist noch Platz.

Ach, super, vielen Dank für den Hinweis. Werde mir gleich mal so ein Display bestellen und mich daran versuchen, hoffe es klappt.

Hatte es auch mal so zusammengebaut und mir den Ordner Inhalt und aktuellen Titel (also die Nummer) anzeigen lassen.
Hat mir keinen Mehrwert gebracht und ich habs wieder verworfen.

Edit: ne, Lautstärke und Titel war es. Habs in meinem dev tree noch drin, hat aber nur bei Lautstärke ändern angezeigt. Hab mich nicht weiter damit beschäftigt.

Habe vorhin mal als Test die kleinste Library

#include "SSD1306Ascii.h"
#include "SSD1306AsciiAvrI2c.h"
// 0X3C+SA0 - 0x3C or 0x3D
#define I2C_ADDRESS 0x3D
SSD1306AsciiAvrI2c oled;

eingesetzt und im setup initialisiert.

oled.begin(&Adafruit128x64, I2C_ADDRESS);
oled.setFont(Adafruit5x7);
oled.clear();
oled.set2X();
oled.println("TonUINO");
oled.set1X();
oled.println("by Thorsten Voss and");
oled.println("licensed  GNU/GPL.");
oled.set1X();

dann immer wenn nächster Track volumeUp Down kommt

  oled.clear();
  oled.set1X();
  oled.println("TonUINO");
  oled.println(" ");
  oled.set2X();
  oled.print("Track: ");
  oled.println(currentTrack);
  oled.set1X();
  oled.print("\nVolume: ");
  oled.set2X();
  oled.print(volume);

eingefügt. das klappt schon ganz gut und zeigt die Änderungen.
Die Library kann aber keine Sonderzeichen.

Ich habe jetzt folgendes Display hier:

https://www.amazon.de/gp/product/B07D9H83R4/

Ich habe deinen Code eingefügt, nur die Display-Auflösung angepasst da 128x32px.
Leider passiert gar nichts im Display - es ist einfach schwarz.

Ich bin mir unsicher, ob ich den code an die richtigen Stellen kopiert habe.
Also den LIbrary Code ganz oben, das sollte passen - Libraries sind ebenfalls installiert.

Den einen Block soll ich im setup initialisieren, also so?:

void setup() {
oled.begin(&Adafruit128x32, I2C_ADDRESS);
oled.setFont(Adafruit5x7);
oled.clear();
oled.set2X();
oled.println("TonUINO");
oled.set1X();
oled.println("by Thorsten Voss and");
oled.println("licensed  GNU/GPL.");
oled.set1X();

und den anderen hier?

void volumeUpButton() {
  if (activeModifier != NULL)
    if (activeModifier->handleVolumeUp() == true)
      return;

  Serial.println(F("=== volumeUp()"));
  if (volume < mySettings.maxVolume) {
    mp3.increaseVolume();
    volume++;
      oled.clear();
  oled.set1X();
  oled.println("TonUINO");
  oled.println(" ");
  oled.set2X();
  oled.print("Track: ");
  oled.println(currentTrack);
  oled.set1X();
  oled.print("\nVolume: ");
  oled.set2X();
  oled.print(volume);
  }
  Serial.println(volume);
}

Achja, und da das Display an 5V angeschlossen werden soll habe ich da Kabel hier noch zusätzlich zum SD-Reader angeschlossen - am Code muss ich hierbei nichts anpassen, oder?

Wäre nett wenn mir jemand sagen kann ob das prinzipiell richtig eingefügt ist.

Das wird warscheinlich richtig eingefügt sein.
Da wird die I2C Adresse noch nicht stimmen.
Wenn

Die könntest du erst einmal mit 0x3C testen.
Wenn das auch nicht hilft und die Adresse nicht auf dem Display vermerkt ist, schau dir mal das Beispielprogramm unter Nano → wire → i2c_scanner an.
Wenn du das lädst bekommst du auf der Konsole alle erkannten I2C Adressen angezeigt.
Die Adresse die du dann siehst muß zur Initialisierung dann an Stelle der Fragezeichen eingetragen werden.

#define I2C_ADDRESS 0x??

Danach solltest du was sehen.

Es gibt Displays, da musst du für die Hintergrundbeleuchtung noch einen extra kontakt anschließen. Möglicherweise ist das bei deinem Display auch der Fall.

Aber nicht bei OLED. Da wird nichts hinter leuchtet.

Nein, natürlich nicht. Ich hatte jetzt nicht geguckt um was für ein Display es sich handelt.

Ich gehe von der Adresse aus, da habe ich beim ersten auch Probleme gehabt.

Einziges Beispiel zu dem Display habe ich mit U8g2 Library gefunden. Am Display läßt sich die Adresse nicht umstellen so wie ich das sehe.
Von daher wird der Scanner ein Ergebnis liefern.

Oder man nimmt das Beispiel mit der anderen Lib.

Ganz herzlichen Dank für die vielen Hinweise.
Ich bin mittlerweile schon weiter gekommen. Als Grundlage habe ich das hier genommen, was wunderbar funktioniert:

Ich habe es jetzt schon soweit, dass der Track angezeigt wird wenn ich auf den Next-Button drücke. Seltsamerweise wird Track 1 als 0 gezählt, aber das ist verschmerzbar. Zurück geht auch, aber er springt beim ersten Klick immer erst noch einen Track weiter, und dann erst beim nochmaligen Drücken wirklich zurück.
Lautstärke geht auch super. Da ich Next/Lautstärke getauscht habe, wird das Volume beim längeren Drücken immer wieder initiiert - die Anzeige im Display passt sich ebenfalls immer sofort an. Es wird also runter- bzw. hochgezählt solange ich die Lautstärke ändere. Auch hier gibt es seltsames Verhalten - wenn die Lautstärke unter 10 sinkt so wird anstelle von 09 die 90 angezeigt.

Noch einiges was ich lernen muss, aber aktuell bin ich begeistert wie einfach das doch geht…und das überhaupt was geht :slight_smile:

1 „Gefällt mir“

Das ist deswegen weil die 0 von der 10 stehen bleibt und die 1 mit der 9 übeschrieben wird. Du musst dich selber darum kümmern, daß die Zahlen entsprechend mit 0 geprefixed werden wenn sie unter 10 sind oder eben das display clearen (würde ich nicht machen, weil flackern).

Ich habe herausgefunden wenn ich bei der Lautstärke noch ein oled.clear(); einfüge wird korrekt runtergezählt, also 10, 9, 8 usw.
Ich versuche jetzt erstmal ob ich primär eine saubere und fehelrfreie Trackdarstellung hinbekomme - das mit der Lautstärkeanzeige ist nice aber kein must-have

Da es immer nur auf einen Tastendruck oder den nächsten gespielten Track eine Änderung gibt würde ich ruhig das Display löschen, das flackert da ja nicht wirklich.
Ansonsten die Zeile immer auch mit Leerzeichen vollschreiben, das geht auch.

Das geht, sieht aber nicht so schön aus weil es dann wirklich ein wenig flackert.
Von der Darstellung habe ich es aktuell eigentlich perfekt, man sieht die Lautstärke nur wenn man diese verändert - wenn man Track vor/zurück drückt wird nur noch der Track angezeigt, die Lautstärkeanzeige darunter verschwindet dann…weil in dem Moment auch nicht mehr relevante Info.

Was ich nicht schaffe: Der erste Titel wird als „0“ angegeben - wo könnte ich das verändern? Und es ist so, dass ein wechsel von previous zu next und umgedreht immer noch 1x die zuvor ausgeführte Funktion im Display ausführt. Beispiel: Ich höre Titel 1 (Display - Titel: 0) und drücke 3 mal auf „next“. Lief 4 wird abgespielt, Dispaly zählt um 3 hoch (dann Titel 3)
Klicke ich dann aber auf „Previous“ dann wird zwar das korrekte Lied abgespielt, aber im Display wird nochmal eins hochgezählt, also Titel4. Beim nochmaligen Klick auf den Previous Button wird ab dann korrekt auch im Display immer eine Zahl abgezogen.

Ansonsten die Zeile immer auch mit Leerzeichen vollschreiben, das geht auch.

Wie genau meist du das? VOR die ausgegebene Zahlen fr die Lautstärke? Da ist mir nicht ganz klar