Vielleicht kannst du hieraus Nutzen ziehen:
Tutorial-Erstellen-einer-Arduino-Bibliothek
Werbung
Vielleicht kannst du hieraus Nutzen ziehen:
Tutorial-Erstellen-einer-Arduino-Bibliothek
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 |
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 |
"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.
ich würde alle Einzel-Variablen in einen struct type packen,
dann mehrere Variablen von dem struct type davon im aktuellen Sketch erzeugen,
und dann eine beliebige dieser struct-Variablen an eine spezielle Funktion aus der Lib by reference übergeben, die die Einzelwerte ändert,
zB so
Code:#include "structlib.h" // das folgende steht in der structlib.h /* #pragma once typedef struct { // struct type int var1=0; int var2=0; int var3=0; } myBtnStruct; void modifyStruct(myBtnStruct & Btn) { // erhält eine Variable vom struct type by reference und gibt deren Werte geändert zurück Btn.var1=1; Btn.var2=2; Btn.var3=3; } */ void setup() { Serial.begin(115200); delay(1000); Serial.println(); Serial.println("Serial() started"); myBtnStruct btn1, btn2, btn3; // erzeuge mehrere Variablen vom struct type // vor Funktionsaufruf Serial.println(); Serial.println(btn1.var1); Serial.println(btn1.var2); Serial.println(btn1.var3); Serial.println(); // nach Funktionsaufruf modifyStruct(btn1); Serial.println(); Serial.println(btn1.var1); Serial.println(btn1.var2); Serial.println(btn1.var3); Serial.println(); } void loop() { }
Geändert von HaWe (06.05.2020 um 17:42 Uhr) Grund: vereinfacht
OhMann - irgendwie komme ich nicht weiter mit dem Verständniss um Bib.
Um den Sketch klein zu halten, möchte erste einmal alle Funktionen aus einem Sketch in jeweilige Bib verteilen.
Nun bekomme ich dauernd Fehlermeldungen, wenn ich aus einer Bib eine Sketch-Funktion aufrufen möchte.
Geht das gar nicht?
Später wollte ich von einer Bib aus eine andere Bib aufrufen usw.
Ist eine Bib überhaupt dafür gedacht?
Wie bereits geschrieben, steht im Netz leider nur sehr oberflächliches zu Bibliothken.
__________________________________________________ _
| Sprache: C | Teensy 3.2 | Arduino 2.x | Status: EwigerAnfaenger |
nein, das geht nicht, denn das .h/.cpp file der Library weiß ja nichts von deinem Sketch, also wie soll eine Library eine Sketch Funktion kennen?Nun bekomme ich dauernd Fehlermeldungen, wenn ich aus einer Bib eine Sketch-Funktion aufrufen möchte.
Geht das gar nicht?
- anders herum geht es ntl schon.
sagen wir so: ja, das geht, wenn man es richtig macht.Später wollte ich von einer Bib aus eine andere Bib aufrufen usw.
Ist eine Bib überhaupt dafür gedacht?
Die Funktionen etc der Library müssen nur sehr allgemein gehalten sein und in sich abgeschlossen sein.
Daher kann die Lib auch nicht auf globale Var. aus dem Sketch zugreigen.
Anders herum schon? Könnte ich dann eine Lib aus "globalen Variablen" für den Sketch verwalten?
... nicht sonderlich mächtig...
Das würde bedeuten, wenn in 2 unterchiedlichen Lib ein und die gleiche LED angesteuert werden soll, müsste der Pin in jedem Lib separat deklariert werden. Oder?
Ganz schön aufwendig (und Fhelerbehaftet).
Wie?
__________________________________________________ _
| Sprache: C | Teensy 3.2 | Arduino 2.x | Status: EwigerAnfaenger |
Lesezeichen