Meldung aus Library wie an den Sketch übergeben?

Hallo,

wie macht man das am Besten, wenn man eine Library erstellen möchte, die zu einem bestimmten Zeitpunkt eine Meldung an den eigentlichen Sketch "zurückgeben" soll? Es geht mir hierbei lediglich um die Art und Weise wie diese "Übergabe" stattfindet, nicht um die zeitliche Definition.

Wenn mir Einer ein kleines Beispiel mit einem einfachen Boolean aufzeigen könnte, wäre das total super.

Gruß Chris

Jetzt hab ich nicht ganz verstanden was Du machen willst.

Eine Bibliothek ist normalerweise kein Teil der so nebenher neben dem Sketch funktioniert. Normalerweise werden Funktionen der Bibliothek aufgerufen und die machen was oder geben Werte zurück.

Kannst Du Deine Idee genauer beschreiben?
Grüße Uwe

Ich möchte eine Bibliothek erstellen, die mir bestimmte Tasterzustände zurückgibt.

Z.B. möchte ich aus der Bibliothek eine Rückmeldung erhalten, wenn Taste 1 und Taste 5 für zwei Sekunden gedrückt gehalten werden.

Ich erhoffe mir dadurch, Spaghetticode im Sketch zu ersparen (weiss aber zugegebenermaßen noch nicht, ob der Weg über eine Bibliothek hierfür der richtige ist).

Gruß Chris

Wie Uwe sagte, du musst dafür eine Funktion aufrufen.

// lib

uint8_t button_pressed(uint8_t pin)
{

if(button = HIGH) return 1;
}

// ino
void loop(void)
{
if(button_pressed == HIGH) { /bla/ }
}

Wobei du in jedem Pfad was zurückgeben musst. Also auch 0 wenn nichts gedrückt wurde.

Kann sein dass sschultewolter diesen Pseudocode posten wollte:

// lib

uint8_t button_pressed(uint8_t pin)
{

     if(digitalRead(pin) == HIGH) return 1;
}

// ino
void loop(void)
{
if(button_pressed(3) == 1) { /*bla*/ }
}

Eigentlich ist boolean digitalRead(byte pin); ja schon die Library-Funktion die du suchst, oder ?
Oder soll sie auch gleich das Entprellen mit erledigen ?

Die wenigsten Libraries verwenden z.B. Timer um autonom und heimlich im Hintergrund was zu machen.
Das schafft eher Probleme im Zusammenspiel mit anderen Libraries als dass es hilft.
(Gibt natürlich Sachen die brauchen das. Taster gehören nicht dazu)

Danke Euch,

ich habe aufgrund geänderter Umstände vor, den Code doch anders zu strukturieren wie ich es bei Threaderstellung noch vor hatte.

Gruß Chris

Wie man Werte von Funktion zurück gibt musst du aber so oder so lernen. Das braucht man ständig.

Wenn man nur einen Wert hat nimmt man den normalen Rückgabewert einer Funktionen. Bei mehreren Werten übergibt man Referenzen auf Variablen als Parameter.

Serenifly:
Bei mehreren Werten übergibt man Referenzen auf Variablen als Parameter.

Meinst Du damit/ Ist das dann "Call by Reference"?

Gruß Chris

Ja, http://openbook.rheinwerk-verlag.de/c_von_a_bis_z/012_c_zeiger_006.htm#ixba4ebd71380af131599437ef037735ee

Ja. Eine Variante davon. Es gibt dafür Zeiger und Referenzen. Hier reichen Referenzen.

void loop()
{
   int var = 0;
   func(var);
}

void func(int& parameter)
{
   parameter = 5;
}

Einfach das & dazu schreiben. Nach dem Funktionsaufruf steht dann var auf 5

Dadurch kann man sehr einfach mehrere Werte von Funktionen zurückgeben.

Hallo Serenfly,

das ganze ohne einen Zeiger zu machen hat aber in meinen Augen einen entscheidenden Nachteil. Es muss ersichtlich sein, dass es sich hier um einen call-by-reference handelt, und nicht um einen call-by-value.

Meiner Meinung hat sschultewolter hier recht,

Bei dem Beispiel kann man dies sofort erkennen

void swap(int *x, int *y);
{...}

swap(&a, &b);

In Delphi kann man das generell nicht sehen:

BerechneKubik(wert);
procedure BerechneKubik(var Zahl: Double);

Somit sehe sogar ich in Sachen Lesbarkeit bei C einen Vorteil gegenüber Pascal.
Dies kann aber in C wieder ausgehebelt werden.

Wenn ich mich recht entsinne, gab es in ANSI-C nur Zeiger, keine Referenzen, die wurden erst später dazu erfunden ( C++ )

Zeiger sind für Anfänger / Gelegenheitsprogrammierer schon kompliziert. Referenzen sehen manchmal einfacher aus, sind es aber gerade dadurch eher weniger, finde ich.