Auschalten über Lautstärketasten

Hallo,

ich habe eine Idee die ich gerne umsetzen will und wollte fragen ob das jemand schon gemacht hat, bzw. mir etwas helfen kann.

Aktuelle Situation ist, dass mein TonUNINO keinen separaten Ein Aus Schalter hat.
Ich wollte alle unnötigen öffnungen und extra Knöpfen vermeiden (weshalb ich auch induktiv lade).
Deshalb habe ich einen Pololou Switch eingebaut, der mit dem Pause Button eingeschalten und über den Time out ausgeschalten wird.

Das möchte ich erweitern und zwar um ein manuelles Ausschalten über einen langen Druck beider Lautstärke Taster.
Der Arduino hat ja schon den D7 Ausgang am OF des Pololu angeschlossen um über den time out den Pololu zu deaktivieren. D7 soll jetzt extra noch über die Lautstärke Tasten angetriggert werden.

Hat das schon mal jemand so oder so ähnlich umgesetzt?

Ich hab mal einen Ansatz.

Ich würde folgende Abfrag in loop setzen

if (upButton.pressedFor(LONG_PRESS) & & (downButton.pressedFor(LONG_PRESS) ) {
digitalWrite(shutdownPin, HIGH) ;
delay(500);
}

Ich hab nun eine Lösung.
Allerdings verwende ich nun die Pause Taste um die Box ein und Auszuschalten.

Hier meine Anpassungen:

void loop() {
  do {
    checkStandbyAtMillis();
    mp3.loop();

    // Modifier : WIP!
    if (activeModifier != NULL) {
      activeModifier->loop();
    }

    // Buttons werden nun über JS_Button gehandelt, dadurch kann jede Taste
    // doppelt belegt werden
    readButtons();

    // admin menu
    if ((pauseButton.pressedFor(LONG_PRESS) || upButton.pressedFor(LONG_PRESS) || downButton.pressedFor(LONG_PRESS)) && pauseButton.isPressed() && upButton.isPressed() && downButton.isPressed()) {
      mp3.pause();
      do {
        readButtons();
      } while (pauseButton.isPressed() || upButton.isPressed() || downButton.isPressed());
      readButtons();
      adminMenu();
      break;
    }

    if (pauseButton.wasReleased()) {
      if (activeModifier != NULL)
        if (activeModifier->handlePause() == true)
          return;
      if (ignorePauseButton == false)
        if (isPlaying()) {
          mp3.pause();
          setstandbyTimer();
        }
        else if (knownCard) {
          mp3.start();
          disablestandbyTimer();
        }
      ignorePauseButton = false;
    } else if (pauseButton.pressedFor(LONG_PRESS) &&
               ignorePauseButton == false) {
///////////////////////////////Original//////////////////////////////////
//      if (activeModifier != NULL)
//        if (activeModifier->handlePause() == true)
//          return;
//      if (isPlaying()) {
//        uint8_t advertTrack;
//        if (myFolder->mode == 3 || myFolder->mode == 9) {
//          advertTrack = (queue[currentTrack - 1]);
//        }
//        else {
//          advertTrack = currentTrack;
//        }
//        // Spezialmodus Von-Bis für Album und Party gibt die Dateinummer relativ zur Startposition wieder
//        if (myFolder->mode == 8 || myFolder->mode == 9) {
//          advertTrack = advertTrack - myFolder->special + 1;
//        }
//        mp3.playAdvertisement(advertTrack);
//      }
//      else {
//        playShortCut(0);
//      }
//     ignorePauseButton = true;
/////////////////////////////Original//////////////////////////////////
//
/////////////////////////////////////Eigener Code//////////////////////////////////
     while (digitalRead(buttonPause) != LOW) {
         
      }
     delay(100);
      
     ignorePauseButton = true;
     shutDown();
  
/////////////////////////////////////Eigener Code//////////////////////////////////
  }


///////////////////////////////////////// Eignener Code   ///////////////////////////////////
void shutDown ()
{
   digitalWrite(shutdownPin, HIGH);
   delay(500);
}

Oh, sorry, da war ich zu langsam.
In meiner Fork habe ich es auch so gemacht.

Kein Grund zum Entschuldigen.
Ich hab ja selbst zun ziel gefunden.

Hi zusammen,
ich hatte nach einer Lösung (Pololu OFF an D7) gesucht, neben der Timeout-Funktion, den TonUINO auch über Langes Drücken der PAUSE Taste auszuschalten.
Mit eurem Code oben bin ich leider nicht wirklich weiterkommen.
Folgend meine Lösung. Vielleicht kann die ja jemand gebrauchen.
Die aktuelle DEV Version von Thorsten wurde nur minimal geändert.

// uncomment the below line to enable five button support
//#define FIVEBUTTONS

// mod by ManfredFFM
// uncomment the below line to enable shutdown via pauseButton when not playing (e.g. by Pololu-Switch or Mosfet)
#define LONGPAUSESHUT

    if (pauseButton.wasReleased()) {
      if (activeModifier != NULL)
        if (activeModifier->handlePause() == true)
          return;
      if (ignorePauseButton == false)
        if (isPlaying()) {
          mp3.pause();
          setstandbyTimer();
        }
        else if (knownCard) {
          mp3.start();
          disablestandbyTimer();
        }
      ignorePauseButton = false;
    } else if (pauseButton.pressedFor(LONG_PRESS) &&
               ignorePauseButton == false) {
      if (activeModifier != NULL)
        if (activeModifier->handlePause() == true)
          return;
      if (isPlaying()) {
        uint8_t advertTrack;
        if (myFolder->mode == 3 || myFolder->mode == 9) {
          advertTrack = (queue[currentTrack - 1]);
        }
        else {
          advertTrack = currentTrack;
        }
        // Spezialmodus Von-Bis für Album und Party gibt die Dateinummer relativ zur Startposition wieder
        if (myFolder->mode == 8 || myFolder->mode == 9) {
          advertTrack = advertTrack - myFolder->special + 1;
        }
        mp3.playAdvertisement(advertTrack);
      }
      else {
// mod by ManfredFFM
#ifdef LONGPAUSESHUT    
        sleepAtMillis = 1;
#endif
// endmod 
        playShortCut(0);
      }
1 Like

Hi zusammen,
um manchmal einen Konflkt mit dem Adminmenü zu vermeiden (wenn zuerst die Pause Taste und dann UP und Down lange gedrückt werden) folgend noch eine Änderung:

// mod by ManfredFFM
#ifdef LONGPAUSESHUT 
        if (!(upButton.pressedFor(LONG_PRESS)) && !(downButton.pressedFor(LONG_PRESS))) {
        sleepAtMillis = 1;
        }
#endif
// endmod 

Gruß an Alle und Danke für das Super Projekt,
Manfred