POWER-Taster für das AIO-Board anschließen

Das AIO funktioniert super.

Aktuell wird der PLAY-Button auch zum Einschalten genutzt. Also eine Mehrfachbelegung Ein / Play / Pause / …
Es wäre jedoch einfacher dem Kind zu erklären, dass „Schalter 1“ für AN/AUS ist und „Knopf 2“ für Play/Pause.

Daher möchte ich gerne einen Schalter nachrüsten. Ich habe einen 4-poligen Schalter, der wie ein Knopf aussieht, einrastet und eine LED eingebaut hat. Muss ich den zwischen Akku und Board bauen, oder kann ich einen der PINs auf dem Board ansprechen? Dann wäre ja auch ein Akku-Laden bei ausgeschaltetem Schalter möglich.
Wird dazu der D7 genutzt von dem ich schon gelesen habe, oder ist das nur ein virtueller I/O für die Softwaresteuerung?

Ich bin noch Anfänger was die Hardwareseite betrifft.

Der Play/Pause Button ist hardware mässig für beide Funktionen zuständig, sprich Play/Pause & Einschalten. Du kannst dir natürlich z.B. an D6 (ebenfalls auf dem Button Board vorhanden) einen weiteren Taster anschließen und den in der Firmware zum Play/Pause Button machen. Das ändert aber nichts daran, daß der andere Button weiterhin mindestens das einschalten übernehmen muss, Play/pause kannst du ihm natürlich in der Firmware abgewöhnen. Was das ausschalten angeht ist natürlich eine andere Geschichte. Der Controller hält D7 high, damit die Platine an bleibt. Wenn der low geht, geht die Platine aus. Du kannst die Firmware natürlich so erweitern, daß man das durch lang drücken auf einer Taste triggern kann oder irgendwie sowas. Gedacht ist eigentlich daß sich die Box nach einer einstellbaren Zeit einfach selber abschaltet…

Hat super geklappt.

Hier die Zusammenfassung falls jemand nachbauen möchte:

Sehr einfache Version „Zusatz-Button“

Hardware

  • Ein Button an A0 zum „Aufwecken“ wie bisher (PBP/PBN am Button-Adapter)
  • Ein Button an D5 für Play/Pause (D5/GND an Hauptplatine - Info: Liegen nicht nebeneinander)

Software

Im Code bei der Button-Zuweisung für ButtonPause den neuen Anschluss D5 definieren. Das „Aufwecken“ über A0 benötigt keine Software-Anpassung.

#define ButtonPause D5            // Taste Play / Pause

Einfache Version „Zusatz-Schalter“

Wenn es ein richtiger Schalter bzw. einrastenden Button sein soll, dann muss (nur ein bisschen) mehr gemacht werden.

Hardware

  • Ein Schalter an A0 (PBP/PBN am Button-Adapter)
  • Ein Button an D5 für Play/Pause (D5/GND an Hauptplatine - Info: Liegen nicht nebeneinander)

Software

Im Oberen Bereich an dem die Buttons definiert werden

#define ButtonPower A0            // Schalter Ein / Aus
#define ButtonPause D5            // Taste Play / Pause

Etwas später im Bereich „Buttons“

//*********************** Buttons ************************
#define LONG_PRESS 1000
Button powerButton(ButtonPower);                // DAS HIER IST DIE NEUE ZEILE
Button pauseButton(ButtonPause);

Sehr weit unten im Bereich der Button-Behandlung zwischen dem Ende der Leiser-Taste und der 4ten/5ten Taste den neuen Bereich Shutdown durch Power-Schalter hinzufügen.

// *********** Ende Vol - Taste ********************************************

// ********** Shutdown durch Power-Schalter ***********************************
if (powerButton.wasReleased())
{
  // Hier könnte noch eine Verabschiedung abgespielt werden
  delay(1000);
  ShutDown();
}

// ********** 5 Tasten-Modus ***********************************************

Ich hoffe ich habe nichts vergessen. Falls doch, dann schreibt mir gerne :wink:

Hat zwar nicht direkt etwas mit dem Power-Schalter zu tun…aber falls der Schalter eine LED eingebaut hat, dann kann von der Hauptplatine einfach 3V3 oder 5V (Je nach Bedarf) und GND genutzt werden damit der Betriebs-Zustand direkt sichtbar ist.

Info: Wie unter Software-Shutdown bei geschlossenem PP/PBN möglich? beschrieben gibt es bei der Schalter-Variante ein kleines Problem. Der Shutdown funktioniert dann nicht mehr richtig.

Die Button-Variante hat das Problem nicht.


P.S.: Hinweis nur hier unten weil ich noch keine Editor-Berechtigungs-Stufe für die Überschrift im Forum habe.

Moin, ich hab das mal versucht im AIO Code aber irgendwie funktioniert es nicht, ich kann mit dem powerButton den AIO einschalten, aber nicht wieder ausschalten, der pauseButton funktionert korrekt.
Hat wer nen Tipp für mich was noch fehlt? Danke :slight_smile:

So sieht es bei mir aus:

#define buttonPower A0            // Schalter Ein / Aus
#define buttonPause D5            // Taste Play / Pause
#define buttonUp A2
#define buttonDown A1
#define busyPin 4
#define shutdownPin 7
#define openAnalogPin A7

#ifdef FIVEBUTTONS
#define buttonFourPin A4
#define buttonFivePin A3
#endif

#define LONG_PRESS 1000
Button powerButton(buttonPower);                
Button pauseButton(buttonPause);
Button upButton(buttonUp);

void readButtons() {
  powerButton.read();
  pauseButton.read();
  upButton.read();
  downButton.read();
#ifdef FIVEBUTTONS
  buttonFour.read();
  buttonFive.read();
#endif
}

if (buttonFive.wasReleased()) {
      if (isPlaying()) {
        if (!mySettings.invertVolumeButtons) {
          volumeDownButton();
        }
        else {
          previousButton();
        }
      }
      else {
        playShortCut(2);
      }
    }
#endif
 if (powerButton.wasReleased())
        {
          digitalWrite(shutdownPin, LOW);
        }
        // Ende der Buttons

Du hast eine Ergänzung vergessen

  pinMode(buttonPower, INPUT_PULLUP);
  pinMode(buttonPause, INPUT_PULLUP);
  pinMode(buttonUp, INPUT_PULLUP);
  pinMode(buttonDown, INPUT_PULLUP);
#ifdef FIVEBUTTONS
  pinMode(buttonFourPin, INPUT_PULLUP);
  pinMode(buttonFivePin, INPUT_PULLUP);
#endif
1 Like

Oleee es geht, hab vielen Dank! :smiley: