Die Variable - Ein Stromkreis, tausend Möglichkeiten

In der Frühzeit der angewandten Kybernetik erfolgte die Steuerung von Robotern nicht mittels Software. Die Funktionsweise war stattdessen durch fest installierte elektronische Komponenten wie Transistoren, elektromagnetische Relais, Kondensatoren und andere Elemente festgelegt. Diese Komponenten stellten den Motor dieser Maschinen dar.

Die Methode der starren Verdrahtung hatte allerdings beträchtliche Nachteile. Sie war extrem zeitaufwendig, kompliziert und kostspielig. Aber was noch entscheidender war: die Funktionen der Roboter waren buchstäblich "in Stein gemeißelt". Um ihre Fähigkeiten zu erweitern oder zu ändern, musste man die Verdrahtung ändern. Gerade bei der Implementierung von komplexen und vielschichtigen Verhaltensweisen autonomer mobiler Roboter stellte dies eine große Herausforderung dar.

###Bild mit Kabeln

Im Vergleich dazu bietet programmierbare Elektronik unschätzbare Vorteile. Mit nur einem Arduino-Board und einigen Modulen kannst du unzählige verschiedene Verhaltensmuster erstellen. Und das nur durch eine Änderung der Programmierung und nicht durch eine aufwendige Anpassung der Verdrahtung.

Das liegt an den vielen Vorteilen von Variablen in der Programmierung:

Speicherung und Wiederverwendung von Daten: Variablen speichern Werte oder Daten. Dadurch können diese Werte später wiederverwendet und an verschiedenen Stellen im Code eingesetzt werden. Statt den Wert jedes Mal neu einzugeben, kannst du einfach auf die Variable verweisen, was den Code lesbarer und effizienter gestaltet.

Dynamische Datenverarbeitung: Mit Variablen können Daten während der Ausführung des Programms verändert werden. Der Wert einer Variable kann sich also im Laufe des Programms ändern, abhängig von bestimmten Bedingungen, Benutzereingaben oder Berechnungen. Dies ermöglicht eine flexible und dynamische Datenverarbeitung.

Codevereinfachung: Variablen helfen dabei, den Code zu vereinfachen und redundante Codestellen zu reduzieren. Statt denselben Wert mehrmals im Code zu wiederholen, kann er in einer Variable gespeichert und an verschiedenen Stellen referenziert werden. Das führt zu kürzerem und leichter verständlichem Code.

Erhöhte Lesbarkeit: Die Verwendung von Variablennamen, die den Zweck der gespeicherten Daten klar zum Ausdruck bringen, erhöht die Lesbarkeit und Verständlichkeit des Codes. Statt mit konkreten Werten zu hantieren, können Variablennamen benutzt werden, die den Sinn und den Kontext der Daten im Programm verdeutlichen.

Flexibilität und Erweiterbarkeit: Variablen machen den Code flexibler und erweiterbar. Sollten sich die Anforderungen ändern oder neue Funktionen hinzugefügt werden, können einfach die Werte in den Variablen angepasst werden, ohne den gesamten Code ändern zu müssen.

Variablen sind somit ein grundlegendes Konzept in der Programmierung. Sie helfen, den Code effizienter, lesbarer und flexibler zu gestalten. Durch sie wird die effektive Verarbeitung und Speicherung von Daten ermöglicht und die Entwicklung und Wartung von Software erleichtert.

Die Variable – dein Freund und Helfer

Die Variable ist ein Kernbestandteil, der der Programmiersprache ihre beeindruckende Flexibilität verleiht. Der Name sagt es schon: Eine Variable ist variabel, sie kann sich verändern. Du kennst das Konzept der Variablen schon aus dem Mathematikunterricht: x = y + 3

Du kannst dir eine Variable als einen Platzhalter vorstellen, der einen bestimmten Speicherplatz in deinem Mikrocontroller reserviert. Nehmen wir zum Beispiel ein Thermometer, das eine Variable namens "temperatur" im Speicher reserviert hat. Jedes Mal, wenn sich die Temperatur ändert, wird der neue Wert in dem reservierten Speicherplatz "temperatur" gespeichert und kontinuierlich aktualisiert. ####Abbildung

Das mag auf den ersten Blick unscheinbar erscheinen, hat aber immense Vorteile, wie wir noch sehen werden. Jede Variable hat einen bestimmten Typ, einen Namen und einen Wert. Hier ist ein einfaches Beispiel: int meineVariable = 13;

Das Kürzel "int" steht für Integer, das ist der Typ der Variable, in diesem Fall also eine Ganzzahl ohne Dezimalstellen. Der Name der Variable ("meineVariable" in diesem Beispiel) kann nach Belieben gewählt werden und dient zur eindeutigen Identifikation.

Die Zahl 13 ist der Wert, den wir der Variable zu Beginn zuweisen. Durch die Verwendung von Variablen können wir Daten auf flexible Weise speichern und während der Programmlaufzeit manipulieren. Indem wir den Wert einer Variable ändern, können wir Berechnungen durchführen, Bedingungen überprüfen und die Steuerung des Programms beeinflussen. Dies öffnet uns Tür und Tor zu einer Welt voller Möglichkeiten und ermöglicht es uns, komplexe Aufgaben zu bewältigen. Im Laufe dieses Programmierkurses wirst du lernen, wie du Variablen effektiv einsetzen kannst.

Verschiedene Arten von Variablen

Die Variable vom Typ 'int' ist nur eine von vielen möglichen Variablentypen. Die folgende Liste gibt einen Überblick über die verfügbaren Variablentypen. In späteren Kapiteln werden wir einige dieser Variablentypen genauer erklären. Im Moment konzentrieren wir uns allerdings nur auf die Variablentypen 'int', 'float' und 'boolean'. ###Abbildung

Du fragst dich vielleicht, warum es so viele verschiedene Variablentypen gibt. Die Antwort liegt in der Praxis: Vor allem aus Gründen der Speichereffizienz. In Mikrocontrollern ist Speicher ein knappes und kostbares Gut.

Variablen dienen dazu, Daten zu speichern, und je nach Variablentyp unterscheidet sich die Größe des benötigten Speicherplatzes. Unterschiedliche Variablentypen belegen unterschiedlich viel Speicherplatz. Schauen wir uns das anhand von drei Beispielen an und vergleichen die benötigte Datenmenge: einen Taster, eine Lichtschranke und ein Thermometer.

Beispiel mit einem Taster - Boolean-Variable: Nehmen wir an, wir wollen wissen, ob ein Taster ein- oder ausgeschaltet ist. In diesem Fall könnten wir eine 'boolean'-Variable verwenden, die nur zwei Zustände kennt: 0 oder 1. Eine 'boolean'-Variable benötigt lediglich 8 Bit (= 1 Byte) Speicherplatz. Das ist die kleinste Menge an Information, die wir in der Informatik speichern können.

Beispiel mit einer Lichtschranke - Integer-Variable: Stellen wir uns vor, wir haben eine Lichtschranke an einem Gehweg angebracht, um die Anzahl der vorbeigehenden Passanten in einer bestimmten Zeitspanne zu zählen. Ein 'boolean' wäre hier nicht hilfreich, da wir damit höchstens eine Person zählen könnten. Besser geeignet ist ein 'integer' (Ganzzahl), dessen Wertebereich zwischen -32768 und 32767 liegt. Ein 'integer' benötigt 16 Bit (= 2 Byte) Speicherplatz - also doppelt so viel wie ein 'boolean'.

Beispiel mit einem Thermometer - Float-Variable: Angenommen, wir wollen die Körpertemperatur so genau wie möglich messen, auf 0,1 Grad genau. In diesem Fall wäre die Verwendung eines 'integer' nicht sinnvoll, da dieser keine Dezimalstellen darstellen kann. Die bessere Wahl wäre hier eine 'float'-Variable, die Dezimalzahlen darstellen kann. Ihr Wertebereich ist ziemlich groß: -3.4028235E+38 bis 3.4028235E+38.

Wie du siehst, kann ein 'float' auch Nachkommastellen darstellen. Ein 'float' benötigt 32 Bit (= 4 Byte) Speicherplatz - also doppelt so viel wie ein 'integer'. Natürlich könnten wir auch für das Taster-Beispiel eine 'float'-Variable verwenden, aber das wäre eine Verschwendung von Speicherkapazität.

Anhand dieser Beispiele siehst du, dass die Wahl des Variablentyps je nach Anwendungszweck getroffen werden sollte. Meistens sind 'integer'-Werte völlig ausreichend und erfordern keine großen Überlegungen. Wenn dein Code jedoch mit der Zeit umfangreicher wird und der Speicher knapp wird, beginnt die Suche nach speichereffizienteren Variablentypen.

Der Nutzen von Variablen

Das Konzept der Variablen kann am besten anhand eines praktischen Beispiels verdeutlicht werden. Schauen wir uns dazu einen einfachen Arduino-Sketch an. Hier ist der ursprüngliche Code: 

void setup()
  {
  pinMode(13, OUTPUT);
}
  
void loop()
  {
  digitalWrite(13, HIGH);
  delay(1000);
  digitalWrite(13, LOW);
  delay(1000);
}

Im obigen Code tritt die Pinnummer 13 mehrfach auf. Wenn wir stattdessen eine Variable verwenden, wird der Code übersichtlicher und einfacher zu warten. Der aktualisierte Code sieht so aus:

intledPin = 13;
void setup()
{
  pinMode(ledPin, OUTPUT);
}
  
void loop()
{
  digitalWrite(ledPin, HIGH);
  delay(1000);
  digitalWrite(ledPin, LOW);
  delay(1000);
}

In diesem aktualisierten Beispiel haben wir die Zahl 13 durch die Variable ledPin ersetzt. Der Compiler ersetzt bei der Ausführung des Programms die Variable ledPin durch ihren Wert, was den Code einfacher zu lesen und zu verstehen macht.

Durch die Verwendung der Variable ledPin können wir die Pinnummer zentral definieren und sie dann im gesamten Code verwenden. Wenn wir die Pinnummer ändern müssen, brauchen wir das nur an einer Stelle zu tun.

Dieses Konzept ist besonders praktisch, wenn Werte nachträglich geändert werden müssen. Es ermöglicht den gleichzeitigen Austausch von Werten an verschiedenen Stellen im Programm ohne mühsame Suche und manuelle Ersetzung.

Bitte beachte, dass der Variablenname frei gewählt werden kann, solange er nicht mit dem Namen einer Funktion oder Systembezeichnungen kollidiert. Diese Bezeichnungen werden in der Arduino IDE farblich hervorgehoben.

Zusammenfassend lässt sich sagen, dass die Verwendung von Variablen die Lesbarkeit des Codes verbessert und eine einfache Anpassung der Pinnummer ermöglicht, falls das nötig sein sollte.

Gleichung versus Zuweisung - hat nichts mit Mathematik zu tun.

Der Unterschied zwischen Gleichungen und Zuweisungen ist ein entscheidendes Detail, das dir beim Einstieg in die Programmierung auffallen könnte, insbesondere wenn dein Hintergrund im mathematischen Bereich liegt. In der Mathematik symbolisiert eine Gleichung die Tatsache, dass zwei Ausdrücke denselben Wert haben. Das Gleichheitszeichen (=) verkörpert hier ein Gleichgewicht. Allerdings nimmt das Gleichheitszeichen in der Programmierung, speziell beim Programmieren mit Arduino, eine gänzlich andere Rolle ein.

Damit du den Unterschied besser begreifst, wollen wir uns ein mathematisches Beispiel ansehen. Stell dir vor, du definierst zwei Variablen, x = 5 und y = 7. In der Mathematik ist eine Gleichung wie x = y unlösbar, da 5 und 7 offensichtlich nicht gleich sind. In der Programmierung dagegen ist diese Aussage keine Frage der Gleichheit, sondern eine Anweisung.

In der Welt der Programmierung sprechen wir über Zuweisungen, nicht über Gleichungen. Wenn du x = 5 und y = 7 schreibst, weist du den Variablen x und y die Werte 5 bzw. 7 zu. Schreibst du anschließend x = y, erhält x einen neuen Wert. Anstatt den Wert von y mit dem von x zu vergleichen, nimmt x den aktuellen Wert von y an. Daher hat x nun den Wert 7 und der ursprüngliche Wert 5 wird einfach überschrieben.

Bei der Programmierung mit Arduino repräsentiert die Zuweisungsoperation, gekennzeichnet durch das einfache Gleichheitszeichen (=), die Zuweisung eines Werts zu einer Variable. Schreibst du beispielsweise "int ledPin = 13;", weist du der Variable ledPin den Wert 13 zu. Änderst du später die Zuweisung zu "ledPin = 12;", wird der Wert von ledPin auf 12 aktualisiert.

Es existiert allerdings auch eine Vergleichsoperation, bei der das doppelte Gleichheitszeichen (==) zum Einsatz kommt. Eine Aussage wie "if (ledPin == 13)" prüft, ob der Wert der Variable ledPin 13 ist.

Ein gängiger Fehler ist das Verwechseln des einfachen Gleichheitszeichens (=) und des doppelten Gleichheitszeichens (==). Auch wenn sie sich auf den ersten Blick ähneln, haben sie in Arduino und den meisten anderen Programmiersprachen völlig unterschiedliche Bedeutungen. Es ist also wichtig, dass du auf die korrekte Verwendung achtest: = für Zuweisungen und == für Vergleiche. Dies wird dir dabei helfen, Fehler zu vermeiden und deine Programmierfähigkeiten zu verbessern.

Übungsaufgaben

Jetzt ist es an der Zeit, dein Wissen in die Praxis umzusetzen. Folgende Übungen sollen dir dabei helfen:

1. Beginne damit, den Blink-Sketch umzuformulieren. Dein Ziel ist es, die Zahl 13 in den Funktionen void setup() und void loop() durch eine Variable zu ersetzen. Dabei ist es wichtig, dass du einen eigenen Variablennamen wählst. Achte jedoch darauf, dass dieser keine Umlaute wie ä, ü oder ö enthält. Die Arduino IDE kann diese Zeichen nicht in Variablennamen verarbeiten, obwohl sie in Kommentaren akzeptiert sind. Solltest du zum Beispiel eine Variable namens "grün" benötigen, könnte "gruen" eine geeignete Alternative sein.

2. Im nächsten Schritt sollst du den Befehl "delay" durch eine Variable ersetzen. Du hast bereits erfolgreich den LED-Pin durch eine Variable ersetzt. Nun kannst du deinen Blink-Code so umschreiben, dass du mit einer einzigen Variable alle Zeitintervalle in den delay()-Funktionen ersetzen kannst.

Schau dir das folgende Codebeispiel an. Hier siehst du, wie du die Änderungen implementieren könntest:

//Variablendeklaration
intledPin = 13;
intpauseDuration = 1000;  //Neue Variable für die Pausezeit
  
//Setup-Funktion
void setup()
{
  //Pin-Modus festlegenpinMode(ledPin, OUTPUT);
}

// Loop-Funktionvoidloop()
{
  //LED einschaltendigitalWrite(ledPin, HIGH);
  //Pausedelay(pauseDuration);
  //LED ausschaltendigitalWrite(ledPin, LOW);
  //Pausedelay(pauseDuration);
}

Mit diesen Übungen kannst du dein Verständnis für Variablen und deren Anwendung in Arduino vertiefen. Viel Spaß dabei!