Ich werde das auch gleich auf Github fixen, so dass da auch wieder alles ok. ist.
Das musst du insgesamt für 4 Buttons machen. Button 2 bis 5 jeweils bei Longpress.
was not declared in this scope ist meistens ein Hinweis darauf, dass vorher irgendwo eine Klammer zu viel ist.
Nur mit Ausschnitten ist das suchen helfen da schwierig.
vielleicht hilft das.
Ich habe bisher mit dem rotary Encoder nichts gemacht, deshalb bin ich mit der Programmierung nicht so vertraut. Aber die Fehlermeldung weist darauf hin, dass die Variable EncoderValue nicht deklariert ist. @marco-117 hat in seinem Fork den Rotaryencoder integriert. Vielleicht hat er noch einen Tipp für dich.
Muss ich bei Gelegenheit Mal testen, @marco-117 s fork unterscheidet sich sehr stark von deinem, hatte ich zuerst versucht die Codeschnipsel von dort zu nehmen hat aber nicht geklappt.
moin @Thomas-Lehnert, ich hab da nochmal eine Frage zum Ausschalten der Box.
Und zwar hab ich bei mir einen Pololu verbaut, habe ich das richtig verstanden, das ich die Box dann auch über einen Taster ausschalten kann? oder ist das nur so gedacht das die Box nur über den Standbytimer ausgeht und über Pololu eingeschaltet wird?
Beim Pololuswitch wird die Box nur über den Standby-Timer ausgeschaltet. Wenn du sie zusätzlich über eine Taste Ausschalten willst, brauchst du eine extra Taste. Diese geht von 5V auf den Off Anschluss des Pololuswitch. Es muss aber mit Zwei Dioden eine Entkopplung zum Arduino gemacht werden um den Prozessor nicht zu beschädigen. Schaltung schick ich dir morgen.
Mein Gedanke war eher wie bei @marco-117 s affenbox-fork das über die Software zu lösen, da in Unserer Box zu wenig Platz für noch mehr Komponenten ist xD.
Wenn es da keine Möglichkeit gibt, dann bleibt’s beim 5min standBy Timer.
Das geht auch über Software. Da würde sich anbieten, Play/Pause und Zurück als Tastenkombination mit Longpress. Vor und Zurück sind ja schon zum Ein oder Ausschalten der LEdAnimation belegt. Über die Tastenkombination Shutdown aufrufen, das wär’s.
Moin @Thomas-Lehnert ich bin mir nicht sicher ob ich das richtig verstanden habe was du mir vorgeschlagen hast. Ich Versuche immernoch ein generelles Verständnis für das Programmieren aufzubauen, daher habe ich mir versucht was zu basteln.
Das ganze sieht dann so aus:
static const uint16_t LONGER_PRESS = 2000;
Void ShutDown()
{
.
.
.
#ifdef HW_PowerOff
digitalWrite(ShutDownPin, LOW); // Ausschalten!, Low Pegel zum Rücksetzen des Einschalt-Flip-Flop
delay(500);
digitalWrite(ShutDownPin, HIGH); // Ausschalten!, High Pegel für Pololu Switch
delay(500);
digitalWrite(ShutDownPin, LOW); // Widerholung!, Low Pegel zum Rücksetzen des Einschalt-Flip-Flop
delay(500);
if (ButtonTwo.pressedFor(LONGER_PRESS))
{
shutDown();
}
#endif
.
.
.
.
Meine Idee war über einen längeren Tastendruck die Box auszuschalten. Ist das wie im Code eine Möglichkeit oder hab ich da absoluten Humbug produziert.?
Es ist ein bisschen schwer zu erkennen, was du wie genau einfügen willst. Du machst die Klammer von Shutdown nicht zu. So ist nicht zu erkennen, ob die Abfrage des Buttons innerhalb der Shutdownfunktion machst. Die Abfrage muss auf jeden Fall zu den anderen Buttonabfragen, damit sie ständig geprüft wird. Es bringt ja nix, wenn shutdown erst ausgeführt werden muss, damit geprüft wird, ob der Button gedrückt wurde.
Worauf du bei den Buttons grundsätzlich auch immer achten musst, ist, dass du abfängst, dass mehrere Dinge aufgrund des einen Buttondrucks passieren. Der Longpress für 1 Sekunde passiert ja bevor die 2 Sekunden um sind.
In diesem Thema Ausschalten über Lautstärketasten sind einige Beispiele, wie man das mit den Buttons auch machen kann. Auch mit Kombinationen, sodass man das Problem, das 2 Dinge passieren umgehen kann
Prinzipiell ist dein Ansatz möglich. Du musst die Abfrage für den longerPress aber mit in die Buttons Routine einarbeiten, und zwar direkt hinter der Abfrage für den Longpress. Und direkt das Shutdown aufrufen. In der Poweroff Funktion brauchst du im Scetch nichts ändern. Ich würde den longerPress auch auf wenigstens 5 Sekunden festlegen um ein unbeabsichtigtes abschalten bei Longpress zu verhindern. Aber ganz unproblematisch ist das trotzdem nicht. Besser wäre ein longerPress in zweitastenkombination, z.B. zurück+Pause.
Schau dir Mal in meinem Code an wie die ab und Einschaltung der Led-animation als Kombination von vor und zurück Taste gemacht ist. Auf diese Weise kannst du auch den Shutdown programmieren auch in Verbindung mit longerPress.
Hallo @ClausiusMaximus
So, ich habe das mal ausprobiert. Folgender Code funktioniert über Longpress Pause+Zurück Tasten.
readButtons(); // Tasten auslesen
// ********************* Ausschalten des Tonuino über Longpress Play und Zurück *****************
if ((ButtonOne.pressedFor(5000) // 2 Tastendruck 5 sekunden zum Ausschalten
|| ButtonThree.pressedFor(5000))
&& ButtonOne.isPressed()
&& ButtonThree.isPressed()
&& !(ButtonTwo.isPressed()))
ShutDown();
// ***************** Adminmenu über longPress 3 Tasten aktivieren **************************
.
.
.
Du musst auch keine Variable für LongerPress deklarieren, sondern kannst die Zeit in ms direkt in die Klammer bei pressedFor() schreiben. Es wird zwar kurzzeitig die Leiser Funktion mit gestartet, aber das spielt keine Rolle, weil ja eh abgeschaltet wird.
Hi @Thomas-Lehnert, vielen Dank für die Hilfe und die Mühe, Ich hab Tatsächlich heute morgen bevor du den Code geschrieben hast mir was in die button abfrage programmiert.
das ganze sieht so aus.
Testen konnte ich das ganze jetzt erst und ich bin erstaunt es Funktioniert ^^
Für mich reicht der Longer_press volkommen, da ich keine LED animation definiert hab.
nächstes ziel ist evtl. ein ausschalt Sound als Shortcut zu definieren, aber das muss zur Zeit nicht sein, da ein Lichtwellenleiter mir anzeigt ob das System an oder aus ist ^^.