Die "const int Entprellzeit;" wäre etwas, was als Argument in den Konstruktor eines Objekts gehört.
Kenne ich - steht leider nichts von &Referenzen.
Klassen wäre mein nächster Schritt, nachdem Bibliothek sauber läuft.
__________________________________________________ _
| Sprache: C | Teensy 3.2 | Arduino 2.x | Status: EwigerAnfaenger |
Die "const int Entprellzeit;" wäre etwas, was als Argument in den Konstruktor eines Objekts gehört.
falls es dich interessiert, wie ich es gelöst habe (sicher noch suboptimal):
https://github.com/dsyleixa/Arduino/...es/ButtonClass
PS
ich habe alle Funktionen samt Code in das .h file geschrieben, nicht nur die Prototypen - das ist zwar nicht ganz regeltypisch, aber deutlich einfacher zu warten
Geändert von HaWe (29.04.2020 um 22:00 Uhr)
DANKE, genau hierrüber war ich mir unsicher; welche Var gehören in den Global-Bereich, in die Funktion als static und in die Objekte?
Ist es selbstverständlich, dass bei der Verwendung einer Bibliothek erst einmal dessen Parameter/const Variablen angepasst werden?
Oder muss ein Objekt so universell sein, dass das Objekt nicht angefasst/angepasst wird?
Bsp: LEDs werden angesteuert, steht sie Output-Zuordnung im Sketch oder im Objekt?
- - - Aktualisiert - - -
Moin HaWe - ist mir derzeit noch zu kompliziert...
__________________________________________________ _
| Sprache: C | Teensy 3.2 | Arduino 2.x | Status: EwigerAnfaenger |
"Objekte" sind Instanzen von "Klassen", und die haben eine vorgeschriebene Struktur in C++,welche Var gehören in den Global-Bereich, in die Funktion als static und in die Objekte?
"normale" prozedurale Funktionen kennen oder haben keine Objekte, C kennt überhaupt keine Objekte.
Betr. Klassen und davon instantiierte Objekte:
Alles, was an die Klassen und ihre dann instantiierte Objekte an Werten übergeben wird und was sie als (veränderte, berechnete) Werte zurückgeben, ist "public",
alles was nur intern für Umrechnungen benötigt wird, ohne dass von außen darauf zugegriffen werden soll, ist "private".
"static" in Klassen sind Werte, die auch zwischen den Objekt-Instanzen ausgetauscht werden.
ich bin mir daher nicht sicher, ob du wirklich überhaupt von "Objekten" sprichst, oder ob du etwas ganz anderes meinst.
Du brauchst für den Minicode keine "&Referenzen" (dieser Ausdruck existiert in der Form noch nicht einmal). Du benötigst hier gar keine Referenzen oder gar explizite Zeiger. Wenn Du der Meinung bist, hast Du eine Menge falsch gemacht.
MfG
- - - Aktualisiert - - -
Bei einem Objekt werden die Variablen in bestimmten Abschnitten deklariert.
Somit sind sie methodenübergreifend erreichbar.
Wenn Variablen in einer Methode deklariert und definiert werden, dann sollte
man dies nur tun, wenn die Variable nur innerhalb dieser Methode gebraucht wird.
Variablen, die ausschließlich nur in einer einzigen Methode benötigt werden:
Deklaration + Definition innerhalb dieser Methode.
Nicht öffentliche Variablen, die methodenübergreifend benötigt werden,
aber nicht außerhalb des Objektes:
Deklaration, innerhalb "class ...", wie ich schon am Beispiel zeigte, unter "privat"
Öffentliche Variablen, auf die auch außerhalb des Objektes zugegriffen werden soll:
Deklaration, innerhalb "class ...", wie ich schon am Beispiel zeigte, unter "public"
Zum schlechten Programmierstil gehört z.B.:
Variablen, die methodenübergreifend benötigt werden,
in einer Methode deklarieren und mit Referenz oder anderen Tricks an andere Methoden übergeben.
Nicht alles, was irgendwie möglich ist, ist auch sinnvoll, geschweige denn notwendig.
Was bestimmte Sonderfälle nicht einschließt. Davon kann hier aber keine Rede sein.
Hallo Leute.
Meine Entprellung() Funktion klappt prima innerhalb eines Sketch.
Hier benutze ich Referenzen mit einem Zeiger auf eine Var. (Bsp: int &KontZustandAlt).
Mein Vorteil ist die gleichzeitige Funktionsrückgabe mehrerer Parameter. Unsauber?
Klappt prima!
Schritt2 ist die Auslagerung der Funktion Entprellung() in eine Bibliothek. Hier komme ich scheinbar mit den Referenzen nicht weiter...
Daher meine Frage: kann man überhaupt mit Referenzen zw. Sketch und Bib. arbeiten?
Daher meine Zusatzfragen: mit static Var. und const Var. Auf welche Var. innerhalb des Sketch kann eine Bib. zu greifen?
Schritt3 wäre dann die Umwandlung von C-Bib. in eine C++-Standardbibliothek (habe ich fälschlich als Objekt oder Klasse bezeichnet).
Hier sehe ich mich aber noch lange nicht.
__________________________________________________ _
| Sprache: C | Teensy 3.2 | Arduino 2.x | Status: EwigerAnfaenger |
Danke! Möchte aber erst einmal meinen eigenen Weg finden.
Zum Thema Bibliotheken habe ich nur sehr oberflächliche Infos im Netz gefunden.
Veraltete, unpraktische Technik?
(Den Klassen widme ich mich, sobald ich Bib und dessen Var verstanden habe - ist vermutlich der praxisnaheste Weg)
Mich interessier primär, wie innerhalb einer Bib mit Variablen aus dem Sketch umgegangen wird.
Kann die Bib überhaupt auf globale Var aus dem Sketch zugreifen?
Oder auf static Var aus einer Funktion (innerhalb des Sketch), aus der die Bib aufgerufen wird?
Somit käm ich mit die Frage nach "Variable als Referenz" (int &Zustand) innerhalb einer Bib schon mal weiter.
derzeit Entprellung.h, Entprellung.cpp
HTML-Code:int Entprellung(int KontaktPin, unsigned long &StartZeit, int &KontaktZustandAlt, int &EntprellStatus);
__________________________________________________ _
| Sprache: C | Teensy 3.2 | Arduino 2.x | Status: EwigerAnfaenger |
1 globale Variable kann immer nur 1 Wert speichern, nicht verschiedene, und dasselbe gilt für jede lokale Variable.
kA wie du das mit Referenzen für verschiedene Buttons lösen willst.
Der einzige Weg geht mE über Strukturtypen, wobei du dann im Sketch davon je 1 als neue Strukturvariable pro Button im Sketch neu einzeln instanziierst.
Ein Objekt ist prinzipiell nichts anderes, nur dass noch zusätzlich Funktionen drin gekapselt sind.Code:// das gehört in die Lib typedef struct{ int var1; int var2; int var3; } myBtnStruct; // das gehört in den Sketch myBtnStruct btn1, btn2, btn3;
Ich halte daher deinen bisherigen Ansatz für mindestens suboptimal wenn nicht für sogar für nicht zielführend.
Lesezeichen