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.