Shutdown/Standby Timer nutzen

Guten Abend,
ich arbeite mit der Version von derda17 mit KY-040 Encoder, da ich hierrüber die Lautstärke so wie Play/Pause steuern möchte. (Link)

Jetzt möchte ich den Shutdown / Standby Timer nutzen.
Wird der Pin auf HIGH gebracht, wenn der Timer abgelaufen ist oder ist dieser auf High, wenn aktuell etwas abgespielt wird?
Ich bin sehr neu mit dem Thema Arduino beschäftigt. Ich bin erstmal mit die Standardversion angefangen wie aufgespielt und habe damit etwas rumgemacht und jetzt wollte ich das Projekt mal weiter machen. Leider verstehe ich vom Code nicht so viel da ich absoluter Neuling und kein Fachelektriker / Elektroniker, ITler oder ähnliches bin. Ich weiß, dass man sicht da reinarbeiten kann und dies habe ich schon mal bei der Phoniebox gemacht. Aktuell gefällt mir dieses Projekt sehr gut, da dies noch kompakter ist.

Im Timerbereich sieht der Code wie folgt aus:

Blockquote
void checkStandbyAtMillis() {
if (sleepAtMillis != 0 && millis() > sleepAtMillis) {
Serial.println(F("=== power off!"));
// enter sleep state
digitalWrite(shutdownPin, HIGH);
delay(500);

// http://discourse.voss.earth/t/intenso-s10000-powerbank-automatische-abschaltung-software-only/805
// powerdown to 27mA (powerbank switches off after 30-60s)
mfrc522.PCD_AntennaOff();
mfrc522.PCD_SoftPowerDown();
mp3.sleep();

set_sleep_mode(SLEEP_MODE_PWR_DOWN);
cli();  // Disable interrupts
sleep_mode();

}
}

Was ich habe:
Ich habe mir leider den falschen Pololu Switch gekauft. Ich habe Item#2811 gekauft Pololu Mini MOSFET Slide Switch with Reverse Voltage Protection, SV

Link zum Artikel
Link

Link zur Bedienungsanleitung mit Beschreibung
Link

Mein Ziel ist:
Ein automatisches Abschalten des Arduinos nach folgenden Einstellbaren (einmal in der Software reicht mir) Werten:

  • Nach einer gewissen Pausenzeit
  • Nach einer gewissen Zeit nach dem die Playlist geendet hat
  • Vielleicht weiteres, da gibt es ja schon was in der Software/programmierung

Überlegung:

Wenn ich das in der Bedienungsanleitung richtig verstanden habe kann ich den PIN 7 vom Arduino der beim Abspielen (Timer nicht abgelaufen) auf HIGH ist auf ON anschließen auf Pololu Platine. Die Platine lässt so lange hier das High Signal anliegt die Stromzufuhr aktiv. Wenn dann Low schaltet die Platine ab. Für das erneute Einschalten setze ich einen externen Taster ein und dieser aktiviert die Stromzufuhr und danach setzt der Arduino das Signal wieder automatisch auf HIGH am Pololu.

Ist mein denken so richtig?

Wo kann ich in der Software unter welchem Punkt was Einstellen? Irgendwie verstehe ich die Zeiten nicht und auch nicht wofür was gut sein soll an Hand der Programmierung.

Ich hoffe ich habe alles was weiterhelfen könnte. Sonst versuche ich es nachzutragen.

Grundsätzlich dürfte das auch mit Deinem Pololu-Switch gehen. Dessen Schiebeschalter muss halt auf off bleiben und im Code musst Du alle Abfragen/Wertänderungen des shutdownPin invertieren, d.h. von LOW zu HIGH und umgekehrt. Ausserdem brauchst Du eine andere externe Beschaltung für den Power-Taster. Wie wolltest Du den denn anschließen?

Hi
Danke für die Antwort. Dann muss ich Skript mal schauen. Den extra Taster für Ein und Aus kann man direkt am Pololu anschließen.

Ja, wenn Du einen extra Taster nehmen willst, ist das problemlos machbar. :grinning:

Hast Du Dir diesen Thread schon durchgeschaut?

Eigentlich kann die aktuelle DEV-Version schon mit dem Pololu (am besten LV) zusammenarbeiten.

@Dennis: hier soll aber ein ganz anderer Pololu-Switch verwendet werden, weder der empfohlene LV-Pushbutton-Switch noch dessen SV-Variante, sondern der SV-Slide-Switch. Dem fehlt der in der hier sonst empfohlenen Schaltung verwendete OFF-Pin, er hat nur den ON-Pin.

@Afrericks schreibt doch, er hätte den falschen gekauft :wink:

@Dennis
Ja das Thema kenne ich deswegen schreibe ich von Falschen.

Ich werde die Version nun wie oben mal anpassen und testen. Die DEV Version kann ich nicht einfach nutzen da ich den Ky-040 Encoder nutzen will.

Hi,
ich bin endlich dazu gekommen die Programmierung anzupassen. Habe alle Lows auf High und alle Highs auf Low. Leider läuft es noch nicht. Muss ich es mit einer Admin Karte bzw. im Admin menü aktivieren?

Kannst Du genauer beschreiben, was geht und was nicht? Welchen Code verwendest Du und wie sieht die Schaltung aus?

Der Code ist wie im ersten Beitrag geschrieben von derda. Ich habe mit der dev Version einen Vergleich gemacht. Es sind die Optionen von 5 Tastern herausgenommen und eingefügt der drehencoder.
Der Part mit dem timeshutdown ist drin.

Ich kann den Code selber nicht 100% verstehen haben nur einen Vergleich der beiden Versionen gemacht.

Nach dem ändern von low auf high und andersherum habe ich jetzt an P7 immer high anliegen. Es ist egal ob ich was abspiele (dann sollte high bleiben) oder pausiere oder die Playlist durch ist (dann sollte das Signal ja auf low gehen nach einer längeren Zeit).

Ich hoffe das hilft dir und somit auch mir.

Das ist si leider noch zu allgemein. Zunächst: funktionierte alles wie gewollt mit dem Drehgeber vor Erweiterung mit dem Pololu? Wenn ja, wie genau hast Du den Pololu angeschlossen? Kannst Du mal ein Bild schicken?

Hi
Der polu ist noch gar nicht angeschlossen. Ich messe die Spannung an dem Pin 7 gegen Masse. Hier fällt der pin nicht.

Der Rest funktioniert.

Ich habe auch versucht ins Adminmenü zu kommen aber dies gibt es scheinbar gar nicht in der version. Ich kann zumindest vor zurück und pause drücken aber da passiert nichts.

Ich kann keinen Link von @derda17 zu seiner Code-Variante finden. Habe ich falsch gesucht? Ohne den Code zu kennen, ist die Fehlersuche schwierig.

Aber wenn der Pololu noch gar nicht eingebaut ist und es vor den Codeanpassungen ging: wozu dann die Codeänderungen ohne den Pololu?

Ich denke, da liegt eine Verwechslung vor. Ich nutze im Wesentlichen die Dev Version aus dem Frühling und der ky040 liegt bei mir noch ungenutzt rum. Der Link in ersten Post zeigt auch nicht auf meinen git Branch

Hi,
ja sorry der Code code ist gar nicht von @derda17 sondern von @Ullergr
Link zumGit

Also der Code mit dem Drehgeber funktioniert soweit. Alle Taster funktionieren.

Was ich möchte ist dass der Pololu nach einer gewissen Zeit inaktivität den Adruino ausschaltet. Dafür muss ich auf dem Pololu ein HIGH Signal haben. Dieses schließt solange die Stromversorgung des Adruino bis es abfällt.

Bei dem Code gibt es das Problem, dass der Clickencoder mit den Pins 5,6 und 4 angesteuert wird, Pin4 aber gleichzeitig Busy-Pin ist. Leider ist das im Code nicht so leicht erkennbar: In Zeile 326 steht:

ClickEncoder encoder(pinA, pinB, STEPS);

wobei STEPS==4 ist. Tatsächlich steht bei dem Constructor der STEPS-Wert erst an vierter Stelle und an dritter Stelle (die mit diesem Aufruf auf 4 gesetzt wird) wird der Pin des Tasters definiert. Das wurde hier im Forum auch bereits diskutiert:

Da Du die Taster-Unterstützung des Drehgebers nicht über die ClickEncoder-Funktion umsetzt, sondern hierfür den Standard-TonUINO-Code verwendest, musst Du an dritter Stelle des Aufrufs einen anderen Pin einsetzen. Probier mal A0 (den Du ja wohl als Tast-Eingeng nutzt) oder einen ungenutzen Pin.

1 Like

Hi,
ich komme bei deiner Aussage nicht ganz nach.

Ich kann den Mittelkonpf des Encoders einmal über die Lib berücksichtigen oder über den Code des TonUino.

Was heißt Busy-Pin 4 bei dir? Der Encoder funktioniert soweit richtig. Auch Play/Pause funktionieren.

Pin 4 wird bei der TonUINO-Software als Busy-Pin verwendet und mit dem DFPlayer verbunden. Über diesen Pin weiss der Arduino, ob der DFPlayer gerade busy ist (also ein MP3 abspielt) oder nicht.

Der Mittelknopf des Encoders ist ein ganz normaler Knopf. Dieser wird in dem Code von @Ullergr genauso wie der dadurch ersetzte PAUSE-Button abgefragt. Alternativ könnte man die entsprechende Funktion von ClickEncoder verwenden.

Ich meinte, dass bei dem Code von @Ullergr mit der Zeile ClickEncoder encoder(pinA, pinB, STEPS); neben PinA und PinB (für den eigentlichen Drehgeber) nicht etwa eine Schrittweite des Encoders definiert wird, wie der Name STEPS suggeriert, sondern der Pin, an dem ClickEncoder den Mittelknopf erwartet. Der Konstruktor lautet nämlich so: ClickEncoder(uint8_t A, uint8_t B, uint8_t BTN = -1, uint8_t stepsPerNotch = 1, bool active = LOW);. Ein korrekter Aufruf wäre ClickEncoder encoder(pinA, pinB, -1, STEPS);. Aber wenn das bei Dir trotzdem funktioniert, ist das ja nicht nötig.

Zum Code von @Ullergr und dem shutdownPin: Welche Codestellen hast Du geändert für Unterstützung des anderen Pololu-Switches? Die Codezeilen 348 und 434?

1 Like

@Peer
Danke für die schnellen Antworten und sorry das ich so lange brauche. Bin sehr viel beschäftigt aktuell.

Also ich habe in der Zeile 348 jetzt LOW stehen.
434 steht jetzt HIGH

Das waren meine Änderungen.