Ich bemühe mich nun seit Tagen, die Library MenuBackend vernünftig in mein Projekt einzubinden. Leider ist diese Bibliothek nicht sehr gut dokumentiert. Das ist sehr ärgerlich, weil sie meiner Meinung nach sehr leistungsfähig ist und sich der Verfasser ruhig zeigen kann.
Durch viele Versuche mit der Bibliothek habe ich mein Menü jetzt so abgebildet, wie ich es brauche. Eine Funktion konnte ich jedoch noch nicht realisieren: Ich möchte, dass das Menü nach 5 Sekunden Inaktivität des Benutzers, die dadurch erkannt wird, dass dieser keine der drei Tasten mehr gedrückt hat, in einen definierten Zustand, also zu einem bestimmten Menüpunkt wechselt! Besser wäre noch, wenn das Menü ganz verlassen würde. Gibt es dazu Ideen?
Da wohl die meisten die Bibliothek nicht kennen, wäre ein Link hilfreich. Und ein wenig Code der schon vorhanden ist auch.
Ansonsten würde ich vorschlagen Du legst Dir eine Variable an, in der die aktuelle Zeit (millis()) gespeichert wird und schaust in jedem Durchlauf von loop() ob millis() -5000 (5 sekunden) größer ist als der gemerkte wert. (wenn ja ist die Zeit abgelaufen und Du kannst Dein Menü entsprechend anpassen)
jedesmal wenn eine taste betätigt wird, speicherst du den aktuellen wert den millis() in dieser variable ab, um die Zeit von vorn zählen zu lassen.
Ob sich das in Deinem Sketch so einfach umsetzen läßt, können wir ohne Code aber nicht sagen.
Den Die genaueste Beschreibung zu dieser Bibliothek findest Du hier: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1273349195. Leider sind die mich interessierenden Themen dort nicht behandelt. Wahrscheinlich ist dort auch nicht die aktuellste Fassung vorhanden, ich habe nämlich eine neuere bei Wiring gefunden. Leider auch nicht viel besser dokumentiert.
Ich habe geglaubt, dass es noch andere gibt, die sich mit dieser Bibliothek beschäftigen und vielleicht schon ein bißchen weiter sind als ich.
Bei meiner Frage nach der Inaktivitätserkennung gings mir weniger um die Frage, wie ich das mit den fünf Sekunden mache, als vielmehr um die Frage, wie ich im Menü über mehrere Level springe, mir sind nämlich nur die Befehle moveLeft, moveRight, moveUp und MoveDown bekannt. Mit diesen erreicht man immer nur direkte Nachbarn eines Menüpunktes. Um zum Anfang oder zu einem bestimmten Eintrag zu springen, fehlt mir das Wissen.
Leider gelingt es mir nicht, den Code hier zu veröffentlichen, weil der das 9500 Zeichen Limit sprengt. Gibt es eine Idee, wie ich es sonst veröffentlichen kann?
MfG ArduStemmi!
Code in zwei Posts trennen?
Ich habe die Bibliothek in einem relativ umfangreichen Projekt im Einsatz. Tatsächlich ist die fehlende Dokumentation etwas gewöhnungsbedürftig, ich habe da auch schon viele Stunden mit verbracht.
Die von Dir gewünschte Funktion könnte man vermutlich über eine einfache Schleife realisieren. Zum Beispiel so:
while (menu.getCurrent().getName() != menu.getRoot().getName()) {
menu.moveLeft();
menu.moveUp();
}
Sauberer wäre vermutlich, vorher zu testen, ob denn da überhaupt Elemente existieren, aber das sollte eigentlich funktionieren.
Genaus habe ich es letztlich auch gemacht. Schade ist es trotzdem, denn ich glaube, dass die Bibliothek dass viel eleganter könnt. Nicht zu ändern. Ich schließe dann den Topic, bring eh' nichts Neues.