Funktion in eine Library umwandeln (MCP3550)

Hallo,

ich habe meine Funktion nun fertig. Kann eigentlich so jeder verwenden. Nur möchte ich noch versuchen das alles in eine Library umzuwandeln. Wie geht das? Was muß man beachten usw.?

MCP3550_50_009.ino (4.83 KB)

Schau mal hier im Playground, da ist das schön von Anfang bis Ende erklärt: Arduino Playground - Library Tutorial

Grüße

Helmuth

Hallo,

gut, Danke. Ich guck meistens nur immer bei Reference nach. Playground habe ich vernachlässigt. Ich versuche es mal danach. :slight_smile:

Das ist nichts anderes als Klassen in C++. Wenn du danach googelst findest auch Anleitungen.

Hallo,

Danke. Gut zu wissen ...

Hallo,

muß doch nochmal fragen, weil das nicht so ganz genau da steht, was ich so lese. Die verwendeten Namen für Variablen in der "private Zone" ist völlig unabhängig von dem was man in der "public Zone" bzw. im Hauptsketch so verwendet? Ich kann die Namen demnach doppelt verwenden? Auf der anderen Seite müßte das schon so sein. Sonst müßte man jede Library durchsuchen welche Variablennamen schon Verwendung finden. :roll_eyes:

Das ist keine "Zone". C++ spart sich lediglich die Zugriffsmodifikatoren für jede Variable einzeln festzulegen. In vielen anderen Sprachen musst du vor jede Variable oder Methode "private" oder "public" schreiben (wobei natürlich ein Default Wert existiert). In C++ kannst du im Header einmal "private:", bzw. "public:" schreiben und das gilt für alle Variablen, bzw. Methoden danach. Das hat aber rein gar nichts mit dem Sichtbarskeitsbereich/Scope innerhalb der Klasse selbst zu tun. Bei public/private/protected geht es darum ob die Variablen und Methoden für andere Module sichtbar sind.

Alle Variablen einer Klasse haben den gleichen Scope. Jedenfalls von anderen Variablen der Klasse aus gesehen. Du kannst also den Namen einer public Variable nicht für eine private Variable verwenden. Das wäre auch völliger Unsinn. Außerhalb der Klasse wäre dann die private Variable nicht sichtbar, aber wie wollte man in der Klasse die zwei unterscheiden?

In anderen Modulen des Codes kannst du natürlich den Namen wiederverwenden. Unabhängig davon ob es public oder private ist. Die eine Variable ist dann z.B. "var" und der gleiche Name innerhalb einer Klasse ist "myObject.var". Wobei private eben genau das verhindert.

Hallo,

nicht so trocken bitte. :wink:

Mit Zone meinte ich den jeweiligen Codebereich, die Codezeilen in private bzw. public.
Was meinst Du mit Scope?
Was meinst Du mit anderen "Modulen des Codes"? Den Hauptsketch wo setup und loop drin ist?

Ich dachte jetzt eine Library verhält sich so wie eine Funktion, nur das sie komplett ausgelagert ist. Die Variablen in einer Funktion und die in private in einer Library sind von außen nicht erreichbar und damit dachte ich das man nicht auf die verwendeten Namen der Variablen achten muß. Nur die in public muß man beachten. ? :roll_eyes:

Scope steht für den Sichtbarkeitsbereich einer Variablen:

Da geht es aber hauptsächlich um den Unterschied zwischen lokalen und globalen Variablen.

Was meinst Du mit anderen "Modulen des Codes"? Den Hauptsketch wo setup und loop drin ist?

Ja, aber in diesem Zusammenhang auch andere Klassen.

Das ist ein feststehender, aber etwas allgemeiner Begriff:

Ich dachte jetzt eine Library verhält sich so wie eine Funktion, nur das sie komplett ausgelagert ist

Eine Library ist eine Klasse. Eine Klasse enthält Methoden und Variablen (manchmal auch Attribute genannt). Eine Methode ist dabei im Prinzip das gleiche wie eine Funktion, allerdings verwendet man den Begriff eher für Funktionen die in einer Klasse stehen.

Die Variablen in einer Funktion und die in private in einer Library sind von außen nicht erreichbar und damit dachte ich das man nicht auf die verwendeten Namen der Variablen achten muß.

Korrekt. Public bedeutet, dass die Member einer Klasse außerhalb der Klasse sichtbar sind. Private bedeutet, dass sie nur für Member der gleichen Klasse sichtbar sind.

Nur die in public muß man beachten. ?

Falsch. Die Member von Klassen gehören zu der Klasse und müssen über eine Instanz (d.h. ein Objekt) der Klasse angesprochen werden. Wenn eine Variable oder eine Methode als public deklariert sind, braucht man immer noch ein Objekt um auf diese zuzugreifen (z.B. "myObject.var"). Deshalb kann der Name auch außerhalb der Klasse für etwas anderes verwendet werden und trotzdem klar unterschieden werden.

Hallo,

vielen Dank. Nun wurde vieles klarer. Ich komme später darauf zurück ... :wink:

Nun wurde vieles klarer.

Das muss ja nicht so bleiben :wink:

Eine Library ist eine Klasse

Das muss nicht so sein. Wird aber gern so gemacht. Schon damit die Probleme der globalen Namen nicht überhand nehmen.

Du kannst eine .cpp und eine .h Datei schreiben, ohne dass in der .h Datei eine Klasse definiert ist.
Mit #include "myLib.h" kennt das verwendende Programm alles, was darin definiert ist: #define, typedef, struct, class, auch alle Funktionen und Globale Variablen.

Du kannst auch umgekehrt eine class in dein Projekt einbauen, entweder als .cpp / .h Dateien oder direkt in deiner .ino Datei , wenn dir das mit den Klassen noch fremd ist und das Hin- und herspringen zwischen mehereren Tabs in der IDE, oder gar externen Editoren, eher lästig ist.


Es gibt in c++ auch noch das
** ** namespace** **
Konzept, wenn man Probleme hat, verschiedene Klassen eventuell gleichen Namens auseinanderhalten zu müssen. ( Das entspricht in Java etwa den packages )

Ich wollte es dann nicht noch komplizierter machen :slight_smile:
Wobei sich das gerade hier eventuell anbieten würde. Wenn es wirklich nur eine Funktion ist, könnte man die tatsächlich ohne Klasse drum herum in einen Header packen. Oder in eine .cpp Datei mit Header. Implementierungen in Headern wird meistens nicht so gerne gesehen, aber das gibt es hier und da auch.

Genaugenommen kann eine Library auch oft eine Sammlung von Klassen sein und nicht nur eine Klasse.

Hallo,

Nun wurde vieles klarer.

Das muss ja nicht so bleiben :wink:

ganz schön mutig, wirklich mutig ... gefällt mir. Ihr dürft das. XD XD XD

Ihr redet noch von einer Welt mit mir die ich erst noch verstehen muß. Deshalb war die Zurückhaltung von Vorteil seitens Serenifly. Wenn man es verstanden hat ist es wie immer, total einfach. :wink: Ich lese mich weiter ein, probiere rum und komme wie gesagt darauf zurück wenn es soweit ist.

Danke soweit. Wünsche netten Männertag.