Tester gesucht (TonUINO 3.1)

Es gibt da doch folgende Wiedergabemodi:

hoerspiel   
album       
party       
einzel      
hoerbuch    
admin       
hoerspiel_vb
album_vb    
party_vb    
hoerbuch_1  
repeat_last

Ja, und der allerletzte ist es.
BTW: Hast du auch wirklich die letzte 3.1 geladen? Von welcher Homepage hast du denn das Upload gemacht?

Hallo,

danke für die Antwort, ich muss bei der neuen Version noch etwas durchsteigen. Hatte nur im Thread nach der Funktion gesucht, weil ich die vermisst habe. Habe vor Jahren zwei Boxen mit der 2.1er Version gebaut und jetzt noch mal eine Box, wo ich die neue Firmware über den webuploader TonUINO - Die DIY Musikbox (nicht nur) für Kinder
installiert habe.

Hm, hatte allerdings vorher auch mal die 2.1er draufgespielt, vielleicht war das ein Fehler. Die Audio Dateien habe ich eigentlich ausgetauscht, aber eventuell habe ich da doch die falschen Dateien kopiert oder ich hätte die sd Karte formatieren müssen.

Ich hänge den tonuino heute Abend mal an den debugger.

Gruß
David

Hallo,

War natürlich mein Fehler… Beim spielen habe ich tatsächlich die falschen mp3s von der 2.1er Variante verwendet. Mit den richtigen mp3s gibt es auch die von dir genannte Auswahl.

Ich habe die Funktion jetzt ausprobiert. Im laufenden Betrieb funktioniert der shortcut. Aber nach einem Neustart nicht mehr. Ist das so korrekt? Von der Funktion hatte ich mir erhofft, dass quasi auch ein Kaltstart ohne Karte möglich ist und dann eben das zuletzt gehörte wieder anfängt.

Gruß
David

Das wird ohne eigene Anpassungen wohl nichts.
Der Arduino speichert die letzte Karte im RAM, also im Kurzzeitgedächtnis, möchtest du etwas über den Stromausfall hinweg speichern, gehört das in den EEPROM, dieser wird aber schon recht umfangreich benutzt.

Ah, alles klar. Dann muss ich eher mal schauen, ob ich meinen damaligen Sketch noch zum laufen bringen kann, da hatte ich das auf jeden Fall drin. Mit dem neuen Code komme ich nicht mehr zurecht, da komme ich über die Standard Version nicht hinaus.

Gruß
David

Sorry, hatte nicht vorher Zeit, da ich am 3x3 Button Board gearbeitet hatte.
Hier ist nun mein Vorschlag zur Änderung im Code für die Regelung der Lautstärker per Poti.
Ist nicht ganz optimal, aber ich wollte die Änderungen nicht überall verteilen, sondern an einer Stelle haben.

In src/tonuino.hpp in der private Section der Klasse Tonuino (am besten nach der Funktion specialCard()) folgendes einfügen:

  static constexpr uint8_t volumePoti = A6;
  void checkVolume() {
    static int lastValue = 0;
    static uint8_t lastVolume = 0;
    int value = analogRead(volumePoti);
    if (abs(value-lastValue) > 5) {
      const uint8_t volume = map( value, 0, 1023, settings.minVolume, settings.maxVolume);
      if( volume != lastVolume){
        Mp3::Base& mp3base = mp3;
        mp3base.setVolume( volume );
        LOG(mp3_log, s_info, F("Volume: "), volume);
        lastVolume = volume;
      }
      lastValue = value;
    }
  }

Und dann in src/tonuino.cpp in der Funktion Tonuino::loop() nach dem Funktionsaufruf von checkStandby() folgendes einfügen:


  checkVolume();

Ich konnte das natürlich nicht testen, aber es sollte so laufen.

Das ist nicht schwer in der 3.1:

in der Datei src/tonuino.hpp die Funktion setCard() folgendermaßen ändern:

  void setCard  (const nfcTagObject   &newCard) { myCard = newCard; setFolder(&myCard.nfcFolderSettings); EEPROM_put(<address>, myCard.nfcFolderSettings);}

und in stc/tonuino.cpp in die Funktion Tonuino::setup() vor SM_tonuino::start() folgendes einfügen:

  EEPROM_get(<address>, myCard.nfcFolderSettings);

Du musst natürlich eine geeignete Adresse finden, die noch frei ist. Belegt sind die Adressen 0 bis 137.

2 „Gefällt mir“

Danke Boerge1 :pray:,

es funktioniert einwandfrei.

Vielen vielen Dank!!!

Hallo,

vielen Dank für den Hinweis, bzw. den Lösungsweg.

Ich habe mir noch mal den code angeschaut und versucht zu verstehen.

Mit der Adresse bräuchte ich noch Hilfe, die Adressen 0 bis 137 konnte ich bisher nicht im code gar nicht nachvollziehen. Muss ich ja evtl. auch nicht :). Würde es prinzipiell ausreichen anstelle von einfach eine 138 zu schreiben? Oder muss ich erst eine Variable definieren z.B.
int eelastcard = 138;
und dann eelastcard anstelle von schreiben?

Gruß
David

Das habe ich mich vor langer Zeit auch mal gefragt, ich denke das wird im 3.1 ähnlich sein, unabhängig davon wo es im Code steht

Unter diesen Umständen würde ich dann nicht gleich die 138 nehmen, sondern etwas Platz lassen oder am saubersten, die Struktur um deine Wünsche erweitern.

Edit : du kannst auch den EEPROM ab Byte 90 belegen wenn du dann darauf achtest diese Ordner nicht als Hörbücher zu verwenden

Die Adressen 0-99 werden für den Fortschritt für die Hörbücher verwendet. Die Adressen 100-137 werden für die Admin-Settings verwendet, da struct Settings genau 38 Bytes benötigt. Ich würde dann vielleicht die 150 nehmen. In die struct Settings würde ich es nicht integrieren, da du dann Probleme hast, wenn diese in der offiziellen Version erweitert wird. Außerdem würde man dann bei jedem Karte Auflegen die kompletten Settings neu schreiben.

Wenn du die Konstante vor die Funktion setCard() schreiben möchtest, würde ich folgendes schreiben:
static constexpr uint8_t eelastcard = 150;
schreiben, dann braucht das keinen RAM.

Habe die TNG Mal auf dem AIO+ getestet. Funktioniert soweit ganz gut.

Ist es irgendwie möglich die Änderung der Lautstärke bei Verwendung von 3 Buttons zu beschleunigen? Wenn man die Lautstärketaste gedrückt hält, dauert es gefühlt eine Ewigkeit bis man die gewünschte Lautstärke erreicht hat.

Was noch super wäre:

  • Möglichkeit die Empfindlichkeit des NFC Readers
    einzustellen

  • Integration einer Status LED über einen freien Pin
    (ähnlich wie im Affenbox Fork mit Fadingoption)

Ich würde auch gerne einen Poti (KY040) verwenden, aber am AiO Plus. So wirklich funktionieren tut es aber nicht, wenn ich den DT des Poti auf den Pin lege springt der Poti mir nur zwischen Lautstärke 5 und 25 :expressionless: Kann mir jemand einen Tipp geben?

Wahrscheinlich nur ein Tipp- oder Bezeichnungsfehler, vielleicht aber auch Grund für einen Fehler…
der KY404 ist kein?Potentiometer, sondern ein Drehgeber.

Daran könnte es liegen :sweat_smile:
@Boerge1 planst du einen Support für einen Drehgeber oder könntest mir helfen die Funktion einzubauen?

Ja natürlich. Gibt es schon einen Fork, der Drehgeber implementiert hat?

Der Affenboxfork hat das auf jeden Fall.
Die Suche nach KY040 hier im Forum führt auch noch zu
GitHub - Ullergr/TonUINO_KY040

Ich habe bis jetzt den Affenbox-Fork verwendet, dort hat es auf jeden Fall funktioniert.

Dem Wunsch schließe ich mich an. Am besten und flexibelsten wäre es über adressierbare LEDs, also Neopixel, WS2812b und Konsoren.
Aktuell gibt es hauptsächlich den Affenbox-Fork mit direkter Versorgung der LED über WS mit Pulsieren bei Pause durch PWM oder den Always-Quene-Fork mit Pixelring (aber mir persönlich zu wilder Animation).

Cool wäre ein Zwischending, also z.B. eine entspanntere Ring-Animation oder eine einzelne LED (also Ring/Stripe mit n=1 LEDs), die unterschiedliche Zustände anzeigen kann.
Dafür könnte man zum Beispiel eine solche Zuordnung treffen:

  • Tonuino startet und ist noch nicht bereit, eine Karte aufzulegen: rotes Pulsieren/Drehen bzw. bei Einzel-LED wechelnder Übergang rot/weiß
  • Tonuino ist hochgefahren und bereit für eine Karte: grünes Pulsieren bzw. wechelnder Übergang grün/weiß
  • Pause: blaues Pulsieren bzw. wechelnder Übergang blau/weiß
  • Tonuino spielt ab: bunter Farbwechsel; insbesondere bei Ring oder Stripe nicht zu wild, eher ganzen Ring in einer Farbe und beginnend von LED1 dann neue Farbe bis alle in der neuen Farbe sind und dann weiter mit der nächsten Farbe; beim Stripe evtl eine Farbe hin, nächste Farbe zurück
  • nur bei Ring oder Stripe: Lautstärke wird im Verhältnis (VolMax - VolMin / Anzahl LEDs) angezeigt, ggf. in rot wenn leiser gestellt wird und in grün wenn lauter gestellt wird
  • Defines für Typ (Ring oder Stripe), Anzahl LEDs, Offset für gedreht eingebaute Ringe, ggf. Animationsgeschwindigkeit

Wenn ich ein bisschen Luft mit meinen Gehäuse-Änderungen und Ideen hab, wollte ich mich selbst mal in die Programmierung der adressierbaren LEDs einfuchsen, mit dem Ziel das in den Affenbox-Fork zu integrieren. Weil hier aber scheinbar grade viel Motivation und vor allem mehr Kompetenz zugange ist, versuche ich es mal auf dem Weg. :innocent:

Für den Drehgeber KY040 und LED + NeoPixel Ring habe ich mal zwei Issues aufgemacht.

3 „Gefällt mir“