Tonuino mit NanoEVERY und HardwareSerial für den DF-Player

Ich habe jetzt mal den NanoEvery für den Tonuino eingesetzt. Erste Tests ergaben, dass der Bootvorgang des NanoEvery deutlich schneller abläuft als mit dem normalen Nano. Das hatte zur Folge, dass die Initialisierung des DF-Players bei Ansteuerung über SoftSerial (So wie in der originalen DEV-2) nicht hinterherkam und RX-Timeout ausgeben wurde. Diesem Problem konnte nur durch erhöhte Delay-werte im Setup beigekommen werden. Der NanoEvery bietet aber im Gegensatz zum NANO 4 UARTS, wovon 3 für die Steuerung des DF-Players über HardwareSerial genutzt werden können. Am Einfachsten kann man hier UART1 nutzen, der auf HardwareSerial-1 liegt (Serial1). Zu beachten ist nur, dass die Steueranschlüsse TX/RX zum DF-Player auf andere Pins umgelegt werden müssen.Der Anschluss TX der am Nano auf PIN D3 liegt, muss an PIN D1 des Every umgelegt werden und der Anschluss RX von D2 des Nano auf PIN D0 des Every. Im Code muss dann noch der SoftwareSerial auf HardwareSerial geändert werden.
Um die Platine nicht ändern zu müssen, habe ich eine Adapterplatte gebastelt, die zwischen den EVERY und den Steckplatz des Nano gesteckt wird. Hier werden alle PINS 1:1 durchgeschaltet, mit Ausnahme der Pins, die für HardwareSerial und SoftwareSerial benutzt werden. Diese Adapterplatte unterbricht die ursprünglichen Verbindungen des SoftwareSerial und legt die Die Pins vom HardwareSerial 1 (UART1) auf die entsprechenden Anschlüsse der Buchsenleiste, (D1 und D0 auf die Anschlüsse, wo vom Nano D2 und D3 lagen.).
Der Test verlief sehr gut. Im Setup kommt man beim Initialisieren des DF-Players schon mit 2 Sekunden aus. Die Gesamt-Startzeit des Tonuno bis zum Abspielen des Welcome-Sounds betrug ca 3 Sekunden ohne irgendwelche Fehlermeldungen.

Ich werde den kompletten Code auf meiner GitHub seite Always qeue hochladen.
Hier auszugsweise die Änderungen, die zur Umstellung auf HardwareSerial nötig waren.

Kurze Erläuterung im Einführungstext des Scetches:

   ==================== TonUINO - Klassik mit Nano EVERY =====================================================
    Nutzung in der Version Classic mit Einzelkomponenten, und mit Nano EVERY.
  - Für die Nutzung des NanoEVERY müssen in der Boardverwaltung die Arduino megaAVRboards installiert und ausgewählt werden.
  - als Board den Arduino Nano Every auswählen
  - Registeremulaton None(ATMEGA 4809) auswählen.
  - Für die Nutzung von HardwareSerial mit dem DF-Player die TX/RX Pins zum DF-Player umlegen auf D0 und D1
    in den Defines das Hardwareserial durch entfernen der Kommentarzeichen aktivieren.
  - Softwareserial ist aber auch noch nutzbar. Dazu die ursprüngliche Pinbelegung lassen und Hardwareserial nicht aktivieren.
  
   ===========================================================================================================

Ergänzungen in den Defines

// ---------------------- Arduino Every ---------------------------------------------------------------------------
#define EVERY                // Aufbau des TonUINO in der Klassikversion mit dem Arduino EVERY anstelle des Nano
 #ifdef EVERY
  #define Hardwareserial     // Nutzung von HardwareSerial (Serial1)anstatt SoftSerial. Pins müssen umgelegt werden.
 #endif                      // D0 RX, D1 TX 
// ___________________________________________________________________________________________________________________

Im Setup

  // ------------------------------------------------------------------------------------
#ifdef EVERY
   analogReference(INTERNAL2V5);          // Festlegung der Referenz EVERY
#endif
  // ------------------------------------------------------------------------------------
  // ---------------------------------------------------------------------------------------
  //*************** DFPlayer Mini initialisieren *******************************************
  mp3.begin();
  //mp3.reset();    // deaktiviert,erzeugt Knackgeräusch beim Start
#ifdef UsbStick
  delay(5000);    // Fünf Sekunden warten bis der DFPlayer Mini initialisiert ist für Nutzung des USB-Stick
#endif

#ifndef EVERY
#ifndef UsbStick
  delay(3000);    // Drei Sekunden warten bis der DFPlayer Mini initialisiert ist ohne Nutzung des USB-Stick
#endif 
#endif 

#ifdef EVERY
  delay(2000);
 #endif 
 // ----------------------------------------------------------------------------------
 //************* Ordner des Speichermediums zählen *****************
#ifdef CountFolders
  numFolders = (mp3.getTotalFolderCount( ));  // Ordner zählen
#ifdef IgnoreWinSysInf
  numFolders = numFolders - 1;                // Der Windows Ordner SystemVolumeInformation wird von der Ordnerzahl abgezogen
#endif
 
  Serial.print("Ordner auf SD: ");
  Serial.println (numFolders);

  #ifdef EVERY
  #ifndef Hardwareserial
  Serial.println("RX-Timeout ignoriert!");
  #endif
  #endif
  Serial.println ();
#endif
  // ------------------------------------------------------------------------------------
  // *********** Start Shortcut "at Startup" - e.g. Welcome Sound ************************
#ifndef Wecker
   playShortCut(Welcome);     // Start Shortcut Welcomesound, falls konfiguriert
#endif

 // ----------------------------------------------------------------------------------
 //*************Wiederholung Ordner des Speichermediums zählen nur Every mit SoftwareSerial ***
#ifdef EVERY
#ifndef Hardwareserial
#ifdef CountFolders
  numFolders = (mp3.getTotalFolderCount( ));  // Ordner zählen
#ifdef IgnoreWinSysInf
  numFolders = numFolders - 1;                // Der Windows Ordner SystemVolumeInformation wird von der Ordnerzahl abgezogen
#endif
  Serial.print("Ordner auf SD: ");
  Serial.println (numFolders);
  Serial.println ();
#endif
#endif
#endif
  // ------------------------------------------------------------------------------------

Bei den Librarys folgendes ergänzen

// *************** Einbinden der Bibliotheken *****************************************************

#include <DFMiniMp3.h>
#include <EEPROM.h>
#include <JC_Button.h>
#include <MFRC522.h>
#include <SPI.h>
#ifndef Hardwareserial
#include <SoftwareSerial.h>
#endif
#ifndef AiO
#include <avr/sleep.h>
#endif
#ifdef LED_SR
#include <Adafruit_NeoPixel.h>
#endif
// ******************** DF-Player **************************************************
// DFPlayer Mini

#ifndef Hardwareserial
SoftwareSerial mySoftwareSerial(2, 3); // RX, TX   // Digitalpins zur Steuerung des DF-Players
#endif
uint8_t numFolders;                                // Anzahl der Ordner im Speichermedium
uint8_t numTracksInFolder;                         // Anzahl der Tracks im Ordner 
uint8_t firstTrack;                                // erster Track
uint8_t currentQueueIndex;                         // index in queue[] aktuelle Tracknr in der queue
uint8_t queueSize;                                 // Länge der queue
uint8_t queue[255];                                // max 255 tracks/folder. entries 0..254 and values 1..255 are used.
uint8_t volume;                                    // Lautstärke
// --------------------------------------------------------
   // Speichermedium entfernt
    static void OnPlaySourceRemoved(DfMp3_PlaySources source)
    {
      PrintlnSourceAction(source, "entfernt");
    }
};
#ifdef Hardwareserial
static DFMiniMp3<HardwareSerial, Mp3Notify> mp3(Serial1);
#endif
#ifndef Hardwareserial
static DFMiniMp3<SoftwareSerial, Mp3Notify> mp3(mySoftwareSerial);
#endif
// ************** Initialisierung der queue ******************

Die BatterieÜberwachung wurde ebenfalls umgesetzt, ist aber noch nicht bezüglich der Genauigkeit geeicht. Der Korrekturfaktor muss ggf. noch angepasst werden.

Der komplette Code ist auf GitHub ab jetzt verfügbar.

3 „Gefällt mir“