Parameterübergabe, hier geht es nicht.

Problem mit Parameter Übergabe Ich will die OneButton Bibliothek nutzen. Anbei mal ein Beispiel aufs Minimalste runtergebrochen. Beim Doppelklick wird dann entsprechend doubleklick aufgerufen und der Code dort drinnen abgearbeitet. Klappt. logisch und soweit klar. Nun möchte ich aber doubleklick einen Wert übergeben, um ihn dann über switch...case auswerten zu können. Irgendwie bekomme ich das aber nicht hin. Es gibt permanent einen Fehler. Ich brauche als Newbie mal Hilfe bitte!

include "OneButton.h"

OneButton button(4, true);

void setup() { button.attachDoubleClick(doubleclick); }

void loop() { button.tick(); }

void doubleclick() {

}

Letztlich muss ich vier Drehencoder auswerten und zwar jeden mit Klick und Doppelklick. Das wären nach der Beispielsbibliothek dann 8 verschiedene Aufrufe. Ich möchte das eben bestmöglich vereinfachen und alles unter einem zusammenfassen, mit Übergabe der Parameter für Drehencoder-Nummer und ermitteltem Zustand. Bin nicht so der Freund von Spaghetticode...

Geht nicht. attachDoubleClick() hat als Parameter einen Zeiger auf eine Funktion ohne Parameter. Da kannst du dann keine Funktion übergeben die eine andere Signatur hat. Dazu kommt dann dass bei attach() nur die Funktion angegeben wird. Da wird noch kein Wert übergeben. Der eigentliche Aufruf ist intern in der Library.

Du kannst aber globale Variablen verwenden.

Serenifly: Geht nicht. attachDoubleClick() hat als Parameter einen Zeiger auf eine Funktion ohne Parameter. Da kannst du dann keine Funktion übergeben die eine andere Signatur hat.

Du kannst aber globale Variablen verwenden.

Hm, muss man dann gff. die Bibliothek anpassen oder wie? Kann man die OneButton Library so erweitern, dass sie der übergebenen Funktion dann eben von sich aus parameter mitgibt? Alles andere nützt mir ja nichts. Denn ob es sich um einen Klick oder Doppelklick handelt, wird ja erst bei Auslösen der Funktion ermittelt. Ich kann ja imho nicht im loop irgendwas abfragen, ob nun das eine oder andere ausgelöst wurde, oder?

thehassle: Kann man die OneButton Library so erweitern, dass sie der übergebenen Funktion dann eben von sich aus parameter mitgibt?

Dann braucht du aber auch irgendeinen anderen Mechanismus um den Werte die übergeben willst mal zu setzten. Da bei attach() wird eben nur die Funktion festgelegt. Da werden noch keine Argumente übergeben. Egal wie man es macht.

Serenifly: Dann braucht du aber auch irgendeinen anderen Mechanismus um den Werte die übergeben willst mal zu setzten. Da bei attach() wird eben nur die Funktion festgelegt. Da werden noch keine Argumente übergeben. Egal wie man es macht.

Gut, dass ist mir jetzt auch viel zu kompliziert langsam. Dann muss ich wohl oder übel den Spaghetti Code bauen... Schade..

Hmmm, aber es gibt doch bestimmt eine Möglichkeit, dass die Bibliothek so angepasst wird, dass man ihr zwei weitere Argumente übergibt, die sie dann quasi weiterreicht an die aufzurufende Funktion?!??!

  • Funktionszeiger anpassen
  • Variablen anlegen
  • Setter-Methoden für Variablen schreiben, oder eventuell in attachDoubleClick() übergeben wenn sie sich danach nicht mehr ändern
  • Funktionsaufrufe ändern

Da werde ich noch etwas üben müssen. Also erstmal Spaghetti-Code, dann irgendwann mit mehr Wissen optimieren. Thanks!

Spaghetti-Code ist das nicht unbedingt. Die Daten sind nicht gekapselt, aber du springst auch nicht wirr im Code herum oder hast eine völlig unübersichtliche oder nicht vorhandene Struktur. In einem großen Projekt und wenn man strikt OOP programmiert sollte man das natürlich nicht machen, aber auf dem Arduino ist das in einem gewissen Rahmen ok.