In Abbildung 2 siehst du, dass die Variable mit dem Namen ledPin auf eine Startadresse im Arbeitsspeicher zeigt. Du kannst sie auch als eine Art Referenz betrachten, die auf etwas Bestimmtes verweist. In Kapitel 2 habe ich einen kurzen Sketch präsentiert, der unter anderem die folgende Codezeile beinhaltet:
int ledPin = 13; // Variable mit Pin 13 deklarieren + initialisieren
Hier siehst du die Verwendung einer Variablen mit dem Namen ledPin, der der numerische Wert 13 zugewiesen wurde. Später im Sketch wird diese Variable ausgewertet und weiter verwendet. Das Wörtchen int ist eine Abkürzung für das Wort Integer. Integer ist ein Datentyp und wird in der Datenverarbeitung dazu verwendet, um Ganzzahlen zu kennzeichnen, womit wir schon beim nächsten Thema wären.
Abb. 2: Die Variable ledPin zeigt auf einen Speicherbereich im Arbeitsspeicher.
Was sind Konstanten?
Irgendwo im Internet habe ich mal gelesen, dass eine konstante Variable eine Variable ist, deren Wert nach der Initialisierung nicht mehr geändert werden kann. Lies diesen Satz zweimal und bedenke, dass Folgendes gilt:
konstant: nicht veränderlich, beständig gleichbleibend.
variabel: veränderbar, nicht auf eine Möglichkeit beschränkt.
Deswegen stellt der erste Satz einen Widerspruch in sich dar. Wer denkt sich so etwas aus? Jedenfalls stimmt der zweite Teil, dass eine Konstante nach der Initialisierung zur Laufzeit des Programms nicht mehr geändert werden kann. Eine Konstante wird mit dem Schlüsselwort const für konstant gekennzeichnet.
const int a = 17;
Folgende Codezeilen wären demnach nicht zulässig und führen zu einer Fehlermeldung, da der Inhalt einer Konstante nicht mehr geändert werden darf:
const int a = 17; // Konstante void setup() { a = 18; // Nicht zulässig! } ...
Die Datentypen
Wir sollten uns nun ein wenig mit den unterschiedlichen Datentypen und der Frage, was ein Datentyp überhaupt ist und warum es so viele unterschiedliche davon gibt, beschäftigen. Der Mikrocontroller verwaltet seine Sketche und Daten in seinem Speicher. Dieser Speicher ist ein strukturierter Bereich, der über Adressen verwaltet wird und Informationen aufnimmt oder abgibt, wobei Informationen in Form von Einsen und Nullen gespeichert werden.
Was ist ein Datentyp?
Ein Datentyp beschreibt eine bestimmte Menge von Datenobjekten (Variablen), die allesamt die gleiche Struktur haben. Jede Variable muss dabei einen bestimmten Datentyp haben.
Die kleinste logische Speichereinheit ist das Bit, das eben die zwei Zustände 1 oder 0 speichern kann. Stell es dir als eine Art elektronischen Schalter vor, der ein- und ausgeschaltet werden kann. Da du mit einem Bit lediglich zwei Zustände abbilden kannst, sind mehrere Bits zur Speicherung der Daten sinnvoll und notwendig. Der Verbund aus 8 Bits wird 1 Byte genannt und ermöglicht es, 28 = 256 unterschiedliche Zustände zu speichern. Die Basis 2 wird verwendet, weil es sich um ein binäres System handelt, das lediglich zwei Zustände kennt. Wir können mit 8 Bits also einen Wertebereich von 0 bis 255 abdecken.
Ich liste hier für den Anfang einmal die wichtigsten Datentypen auf, mit denen du in Zukunft konfrontiert wirst:
Tabelle 1: Datentypen mit entsprechenden Wertebereichen | |||
Datentyp | Wertebereich | Datenbreite | Beispiel |
---|---|---|---|
void | keiner | null |
void setup() {}
|
byte | 0 bis 255 | 1 Byte |
byte wert = 42;
|
unsigned int | 0 bis 65.535 | 2 Bytes |
unsigned int sekunden = 46547;
|
int | –32.768 bis 32.767 | 2 Bytes |
int ticks = -325;
|
long | –231 bis 231–1 | 4 Bytes |
long wert = -3457819;
|
float | –3.4 * 1038 bis 3.4 * 1038 | 4 Bytes |
float messwert = 27.5679;
|
double | siehe float | 4 Bytes |
double messwert = 27.5679;
|
boolean | true oder false | 1 Byte |
boolean flag = true;
|
char | –128 bis 127 | 1 Byte |
char mw = 'm';
|
String | variabel | variabel |
String name = "Erik Bartmann";
|
Array | variabel | variabel |
int pinArray[] = {2, 3, 4, 5};
|
Die meisten der hier gezeigten Datentypen werden wir auch in diesem Buch verwenden.
Was sind Funktionen?
Eine Funktion ist in den meisten höheren Programmiersprachen die Bezeichnung eines Programmkonstrukts, mit dem der Quellcode strukturiert wird, so dass diese Programmteile – die quasi als Unterprogramm bezeichnet werden können – im eigentlichen Hauptprogramm wiederverwendbar sind und somit an unterschiedlichen Stellen mehrfach aufgerufen werden können. In der Objektorientierten Programmierung, auf die ich noch eingehen werde, gibt es vergleichbare Konstrukte, die dort die Bezeichnung Methoden besitzen. Dort kommt auch der Begriff Kapselung erstmalig zur Sprache, wobei diese Bezeichnung ebenfalls auf die Funktionen zutrifft. Eine Kapselung ist eine Zusammenfassung oder das Verbergen von Daten beziehungsweise Informationen, wobei der Zugriff über eine definierte Schnittstelle erfolgt. Diese Schnittstelle wird durch den Funktionsaufruf abgebildet. Möchtest du in deinem Sketch also zum Beispiel mehrfach den Mittelwert zweier Zahlen bilden, dann sind normalerweise immer die folgenden Codezeilen erforderlich, wobei ich das extra etwas umständlich formuliert habe, damit der