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.
uiuiui, da hast du mich vollkommen falsch verstanden.
Es geht darum aus einer Funktion mehrere Werte zurück zu geben.
Hier werden in Kontak01() bei jedem Durchlauf, aktuelle Var-Werte für den Kontakt01 zwischengespeichert.Code:void loop() { if (Kontakt01 == 1){...mach was...} if (Kontakt02 == 0){...mach was...} } int Kontakt01(int KontPin) { //Prüfung; gibt 4 Zustand zurück; 0...Entprellt+LOW, 1...Entprellt+HIGH, 2...IN Entprellung, 3...keine Zustandsänderung static unsigned long StartZeit = 0; static int KontZustAlt = digitalRead(KontPin); static int EntprellStatus = digitalRead(KontPin); return Entpreller(KontPin, StartZeit, KontZustAlt, EntprellStatus); } //Kontakt-Entprellung; gibt 4 Zustände zurück; 0...Entprellt+LOW, 1...Entprellt+HIGH, 2...derzeit in Entprellung, 3...keine Zustandsänderung int Entpreller(int KontPin, unsigned long &StartZeit, int &KontZustAlt, int &EntprellStatus) { int KontZustNeu = 0; if((KontZustNeu = digitalRead(KontPin)) == EntprellStatus) { return 3; } //...usw... }
Die 3Stk "&Var" werden durch Entpreller() berechnet, dann die neuen Werte wieder in Kontakt01 gespeichert --- bis zum nächsten Durchlauf...
Somit muss für jeden Eingangs-Kontakt/Taster eine eigene Funktion, als Zwischenspeicher(!), bestehen Kontakt01..0n() --- der einzige Wehrmutstropfen.
Funktioniert aber sehr gut!
--2--
A| Nun möchte ich erst Entpreller() in eine Bib verschieben. Daher meine nervigen Fragen nach &Var (Referenz-Variablen).
Und ob ich von einer Bib aus auf zB. die global Var zB. "KontPin" zugreifen kann.
B| Danach bekommt jeder Kontakt0n() eine eigene Bib.
C| Danach wollte ich mich mit Klassen, Objekten, Methoden beschäftigen. Sozusagen als Erweiterung und Verbesserung einer C-Bib.
__________________________________________________ _
| Sprache: C | Teensy 3.2 | Arduino 2.x | Status: EwigerAnfaenger |
sry, deine Konstruktion verstehe ich nicht, ich würde es ganz anders machen - da muss dann jemand anders 'ran![]()
Wie wäre dein Prinzip um meherer Kontakte gleichzeitig auf Zustandsänderung, Entprellung und neuem Zustand (ohne delay) zu überprüfen?
Hierbei wird bei jedem loop-Durchlauf,
1. auf Zustandsänderung geprüft; if((KontZustNeu = digitalRead(KontPin)) == EntprellStatus) return 3;
2. wenn sich der Kontaktzustand ändert, wird das bei jedem loop-Durchlauf neu geprüft
3. sollte sich der Kontaktzustand innerhalb von 5ms ändern, wird die Startzeit resetet
4. sollten dann >=5ms keine Zustandänderungen passieren, wird je nach Zustand 0(LOW) oder 1(HIGH) zurück gegeben.
5. und das für beliebig viele Kontakte und ohne delay()
PS: Entprellzeit = 5ms ist eine globale Variable und als Beispiel zu verstehen
__________________________________________________ _
| Sprache: C | Teensy 3.2 | Arduino 2.x | Status: EwigerAnfaenger |
Lesezeichen