Lautstärke langsamer ansteigen lassen


#1

Hallo zusammen,

Ich hätte eine Frage bezüglich der Lautstärke.
Ist es möglich irgendwo im Code die Geschwindigkeit zu ändern mit der bei einem langen Tastendruck
die Lautstärke lauter bzw. leiser wird.
Mein Kleiner und auch die Eltern auch haben da ein bisschen unsere Probleme.
Wenn es langsamer gehen würde wäre es viel einfacher zum einstellen.

Gruß Hansjörg


#2

in der DEV Version kannst du die Funktion von Lauter/Leiser und Vor/Zurück tauschen.
Ansonsten stimmt… da könnte man ein kleines Delay einbauen. Mal gucken.


#3

HI,
ich hatte dieselben Probleme bei meinen Benutzern. Man bekommt nicht sofort mit, wenn nach dem langen Druck die Lautstärke lauter wird, und wenn man es dann merkt, dann war es zu spät. Da das ein wenig “Userabhängig” war hab ich ein wenig rumgefummelt an den delays und die deshalb in Konstanten rausgezogen. Auch hab ich die Begrenzung eingebaut der Lautstärke. Da das den Originalcode ein wenig verändert hat, hier die Lösungsidee für alle, die ein wenig Programmieren können. @Thorsten Das kann gerne in den Master. Bei Rückfragen gerne direkt melden.
Dann hab ich noch eingebaut, dass man im Hörbuch Modus dann wieder an das erste Stück springt, wenn das Hörbuch auf “Pause” steht und man die “down” Taste lange drückt. Hier die Definitionen, an denen man dann “rumspielen” kann.

#define LONG_PRESS 450 
#define LONG_RESETPRESS 5000
#define VOLUME_DELAY 150
#define MAX_VOLUME  26
#define MIN_VOLUME 8
#define START_VOLUME 13
bool SystemPaused = false;
bool ignoreUpButton = false;
bool ignoreDownButton = false;

Hier der Code. Einfach nach den “Button” Funktionen suchen. Im Endeffekt ist die reine Anforderung “langsamer lauter werden” einfach zu erfüllen: Die Funktion “delay(100)” wartet einfach 100ms, was man nur an der richtigen Stellen reinpappen müsste. (Für alle, die den Originalcode nicht zu sehr ändern wollen).

if (pauseButton.wasReleased()) {
  if (ignorePauseButton == false)
    if (isPlaying()) {
      mp3.pause();
      SystemPaused = true;
    }
    else {
      mp3.start();
      SystemPaused = false;    
    }
  ignorePauseButton = false;
} else if (pauseButton.pressedFor(LONG_RESETPRESS) &&
           ignorePauseButton == false) {
  if (isPlaying())
    mp3.playAdvertisement(currentTrack);
  else {
    knownCard = false;
    mp3.playMp3FolderTrack(800);
    Serial.println(F("Karte resetten..."));
    resetCard();
    mfrc522.PICC_HaltA();
    mfrc522.PCD_StopCrypto1();
  }
  ignorePauseButton = true;
}

if (upButton.pressedFor(LONG_PRESS)) {
  if (mp3.getVolume() < MAX_VOLUME) {
    Serial.println(F("Volume Up"));
    mp3.increaseVolume();
    delay(VOLUME_DELAY);
    ignoreUpButton = true;
  }
} else if (upButton.wasReleased()) {
  if (!ignoreUpButton) {
//        nextTrack(random(65536));
//        currentTrack += 1;
    nextTrack(currentTrack);
    ignorePauseButton = true;
  }
  else
    ignoreUpButton = false;
}



if (downButton.pressedFor(LONG_PRESS) && (SystemPaused)) { 
   currentTrack = 0;
   _lastTrackFinished = 0;
   nextTrack(currentTrack);
   Serial.println(F("reset Current Track to 1"));
   ignoreDownButton = true;
   } else if (downButton.pressedFor(LONG_PRESS) && (!SystemPaused)) {
        
        if (mp3.getVolume() > MIN_VOLUME) {
          Serial.println(F("Volume Down"));
          mp3.decreaseVolume();
          delay(VOLUME_DELAY);
          ignoreDownButton = true;
        }
    }
    
if (downButton.wasReleased()) {
  if (!ignoreDownButton)
    previousTrack();
  else {
    ignoreDownButton = false;   
    SystemPaused = false;
  }
}

Viel Erfolg mit dem Code. Ich hoffe es hilft.


#4

Also am besten du tauscht die Funktion der Knöpfe. Kurz drücken Lautstärke, lang drücken Lied wechseln. Und beim lange drücken nur beim ersten mal den Titelwechsel ausführen und weiteres Drücken ignorieren. So ist es am elegantesten. Falls du Probleme hast, das selber zu kodieren, sag Bescheid. Ich tippe dir schnell die Lösung.


#5

Genau. Diese ganze Delay Sache ist sonst später irgendwann eventuell suboptimal.


#6

Ich überlege gerade den Standard umzudrehen (weiterhin über das Adminmenü änderbar).


#7

Ja, zuerst die Lautstärke fände ich gut


#8

Hallo zusammen,

Endlich zurück aus dem Weihnachtsstress werde ich die Tipps ausprobieren.
Vielen dank schon mal und ich werde berichten was bei meinem Sohn funktioniert hat.

Gruß Hansjörg


#9

Mit der Delay Funktion hat es wunderbar geklappt.
Danke für die Hilfe


#10

Würde ich befürworten. Hast du schon eine Idee wann du das umsetzen kannst?


#11

Kannst du mir behilflich sein, ich versuche es umzudrehen.
Habe bisher folgendes.

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

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

Nach dem Lonpress kommt nun allerdings noch ein Volume Up bzw. Down.


#12

Hey @blane,

das mit dem Volume Up und Down nach LongPress ist klar, da er das ja macht, wenn der Knopf losgelassen wird. Was du brauchst ist folgendes:

Definiere irgendwo am Anfang zusätzlich folgende beiden Variablen:

bool upButtonLongPressed = false;     
bool downButtonLongPressed = false;

Und dann änderst du die Knöpfe folgendermaßen:

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

Der Code macht folgendes:

Wenn LongPress gedrückt wird, wird jeweils nur 1 Lied vor oder zurück geschaltet. Sonst spult er ja ewig vor und zurück. Wenn du danach loslässt, passiert nix. Wird nur kurz gedrückt, dann wird die Lautstärke hoch oder runter gedreht.

Probiere es mal aus. Viel Erfolg!


Tauschen der Lautstärke Funktion
Anleitung für 5 Tasten
#13

Sehr gut, dass klappt. Danke dir.