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.
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.
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.
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;
}
}
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.
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.
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.
Volumebegrenzung nach oben und unten habe ich so umgesetzt, ebenso die Lösung für das Delay. Das Delay (150 wie von dir vorgeschlagen) vereinfacht die Handhabung deutlich und die Volumebegrenzung verhindert die Beschallung des gesamten Hauses.
Was meinst du genau? In der aktuellen DEV ist es schon lange per default so, daß long press nächster/vorheriger Titel und short press lauter/leiser ist. Zudem kann man das im Adminmenü wieder umdrehen.
Was im Code müsste ich ändern, damit es beim kurzen drücken direkt 2-3 Lautstärkestufen lauter oder leiser wird?
Ich habe einen kleinen Lautsprecher verbaut, da muss man sonst zu oft drücken bis man ein Ergebnis hat.
Ich würde nur ungern umstellen auf langen druck um die Lautstärke zu ändern
Ich hab es zwar nicht getestet, aber wenn du die Funktionen volumeUpButton() und volumeDownButtion() editierst, indem du mp3.increaseVolume(); 2-3 mal hintereinander aufrufst, müsste es klappen. Also z.b. so:
void volumeUpButton() {
if (activeModifier != NULL)
if (activeModifier->handleVolumeUp() == true)
return;
So kommst du aber ggf. unter mySettings.minVolume bzw. über mySettings.maxVolume (wenn auch nur einen tick, bei 2 steps, sonst eben mehr). Daher würde ich das eher so machen (ungetestet, ggf. muss hier mit ner temp Variable gearbeitet werden, aber das Prinzip sollte klar sein):
Es gibt noch einen Modifier (Feedback) der ebenfalls angepasst werden müsste, damit die Ansage stimmt. Bin aber grad nicht 100% sicher ob der überhaupt konfigurierbar ist. Im code ist er jedenfalls drin.