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.

1 „Gefällt mir“

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:

1 „Gefällt mir“

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
1 „Gefällt mir“

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
2 „Gefällt mir“

Oleee es geht, hab vielen Dank! :smiley:

Hallo allen,
ich merke: ich werde alt.
Und wo ich mich früher einfach eingelesen habe, entstehen nun große Löcher.

Ich habe gerade eine AiO (nicht + ) verbaut, in eine BluetoothBox mit 4 Tasten. Über die IDE dann erstmal die 3 Button Variante zum Laufen bekommen. Den ButtonPause noch auf A3 und nun sacke ich vor Erschöpfung zusammen.
Ach nein, das darf ich nicht. Wird ja ein Geschenk, ganz plötzlich ist das halbe Jahr rum und Montag soll es auf dem Tisch stehen.

Nun aber noch mein Anliegen, ich hätte gerne eine Änderung, dass ich die Kiste (neben dem StandByTimer) auch per Doppel (oder Dreier) druck auf dem nun freien A0 ausschalten kann.

In der Box des großen Bruders ist eine eigene Ladeelektronik, die mit DoppelDruck abgeschalten wird, hier möchte ich es gefühlt nachbauen.

Vielen Dank euch allen.

Ich hab dich mal in ein Thema in die AiO-Kategorie verschoben. Das grundsätzliche an und aus ist hier ja schon beschrieben. Das mit dem Doppeldruck fehlt noch, das ist nicht ganz so einfach, weil die Bibliothek kein Doppeldruck anbietet. Du kannst dich vermutlich hieran orientieren

1 „Gefällt mir“

… Ich werde wohl einfach über long press abschalten

1 „Gefällt mir“

Vielen Dank, funktioniert.

1 „Gefällt mir“

Tja, zu früh gefreut…
Ich habe getestet, ob es funktioniert, dass er nach einem langen press abschaltet. Ja, es funktioniert.
Ich habe aber nicht getestet, ob er nach einem kurzen Druck nicht abschaltet. Dies funktioniert nicht, auch nach kurzen Druck wird abgeschalten.

So wie es hier ja steht, wird der Taster losgelassen, schalte ab.
Wie sage ich ihm, dass er nach einem LongPressWasRelease abschaltet?

… indem ich einfach bei den anderen LongPress im Code abgucke, danke @raznz_snasna

 if (powerButton.pressedFor(2000))
        {
          digitalWrite(shutdownPin, LOW);
        }
    // Ende der Buttons
1 „Gefällt mir“

Wie es so oft passiert. „hey das ist ja toll, so etwas möchte ich auch. ja genau mit diesem Gehäuse“.
Also mache ich einfach nochmal genau das gleiche, gleiche Box, gleiche Lötarbeiten, gleicher Akku, gleicher…ach nein, eine AiO PLUS. Nagut, wird schon.
Gleiche Codeanpassung, gleicher Funktionstest, Ätsch…

Das wurde dann wohl nichts.


/*
   _____         _____ _____ _____ _____
  |_   _|___ ___|  |  |     |   | |     |
    | | | . |   |  |  |-   -| | | |  |  |
    |_| |___|_|_|_____|_____|_|___|_____| All-in-One Plus
    TonUINO Version 2.2

    created by Thorsten Voß and licensed under GNU/GPL.
    Information and contribution at https://tonuino.de.
*/
// uncomment the below line to enable five button support

// #define FIVEBUTTONS
#define buttonPower A0
#define buttonPause A3
#define buttonUp A2
#define buttonDown A1
Button powerButton(buttonPower);
Button pauseButton(buttonPause);
Button upButton(buttonUp);
  pinMode(buttonPower, INPUT_PULLUP);
  pinMode(buttonPause, INPUT_PULLUP);
#endif
 if (powerButton.pressedFor(2000))
        {
          digitalWrite(shutdownPin, LOW);
        }
    // Ende der Buttons

Über einen Druck auf Power schalte ich die Box an, die elektrische Verbindung funktioniert also.
Ein LongPress schaltet aber nicht ab. Im Monitor kommt (natürlich) keine Rückmeldung, da ja nichts dazu programmiert ist.

Seht ihr was ich hier falsch gemacht habe?

Ließt du den Button auch aus?

Also hast du hier ein powerButton.read ?

1 „Gefällt mir“

Ach was würde ich nur ohne euch tun…
Danke dir

Moin! Falls das noch akut ist mit dem Doppelklick?!
Hier ein Fork der JC_Button Bibliothek, der das unterstützt:

Vielen Dank, aber nicht nötig bzw. Schon umgewöhnt

1 „Gefällt mir“