Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

einleitung:variablen

Variablen

Variablen sind das Gedächtnis eines Programms

Eine Variable ist ein Ort, an dem ein Programm Daten speichern kann. Diese Daten können an einer Stelle des Programms in die Variable geschrieben werden, dort eine Weile herumliegen und dann an einer anderen Stelle wieder verwendet werden. Ihr könnt euch Variablen wie einen Schmierzettel vorstellen, der mit einem Namen beschriftet ist, und auf dem ihr euch Zwischenergebnisse aufschreiben könnt.

Eine typische Verwendung sieht z.B. so aus:

int messwert; // Erzeuge eine Variable mit dem Namen "messwert" und dem Typen "int"
messwert=analogRead(A0); // messe eine Spannung und speichere das Ergebnis in der Variable "messwert"
Serial.println(messwert); // gib den aktuellen Inhalt von "messwert" als Text aus.

Variablen müssen vor der Verwendung "deklariert" werden

In Arduino/C++ muss eine Variable dem Programm zunächst „vorgestellt“ werden, damit das Programm sie kennt und damit arbeiten kann. Mit dieser sogenannten Deklaration werden der Typ und der Namen der Variable festgelegt:

int ledPinNummer; //Deklaration der Variable mit dem Namen "ledPinNummer" vom Typ: "int"

Variablentypen

Der Typ einer Variable gibt vor, welche Art von Daten darin gespeichert werden kann. In unserem Beispiel ist das eine Zahl ohne Nachkommastellen (int).

Weil am Computer so viel mit Zahlen gearbeitet wird, gibt es unterschiedliche Typen für Zahlen, je nach dem, ob sie Kommastellen enthalten oder wie groß sie sein darf:

Name kleinster Wert (Arduino) größster Wert (Arduino) Größe in Bit (Arduino) Anmerkungen
boolean false, true 8
unsigned char 0 255 8
(signed) int -32.768 32.767 16
unsigned int 0 65535 16
(signed) long -2.147.483.648 2.147.483.647 32
unsigned long 0 4.294.967.295 32
float 3,4E-38 3,4E+38 32
double 1,7E-308 1,7E+308 64

Daneben gibt es auch einen speziellen Typ für Text (char für ein Zeichen, z.B. für eine einzelne Buchstabe). Weiterhin kann man neue Datentypen definieren, indem man eine Klasse schreibt – dazu kommen wir im Skript der Woche 3. Ein Beispiel ist der Typ String, der für eine Zeichenkette (ein Wort, einen Satz usw.) steht.

Variablennamen

Unter diesem Namen kann die Variable im Programm verwendet werden. Groß- und Kleinschreibung macht dabei einen Unterschied.

Denkt euch immer einen Namen aus, der sagt, was drinsteckt - so verliert ihr später nicht den Überblick und euer Team versteht, was ihr gemacht habt. Also z.B. ledPinNummer anstelle von lp. Aus demselben Grund vermeidet Variablen, die nur aus einer Buchstabe bestehen. Eine Ausnahme sind Fälle, wo dies inhaltlich bedingt ist, z.B. x und y für die entsprechenden Koordinaten im 2D-Raum.

Mit "=" Werte in Variablen schreiben ("Zuweisung")

Um einen Wert in eine Variable zu schreiben, verwendet ihr das einfache Gleichheitszeichen.

Das Programm rechnet dann zuerst das aus, was auf der rechten Seite des „=“ steht und speichert das Ergebnis in der Variable auf der linken Seite:

Dieser Vorgang heißt „Zuweisung“ oder „einer Variable einen Wert zuweisen

also z.B.

delayZeit=1000/blinkFrequenz;

Zuweisungen sind keine Gleichungen!

Das Gleichheitszeichen hat in der Programmierung eine andere Bedeutung als in der Mathematik!

Eine Zuweisung im Programm (var1=var2) bedeutet nicht, dass var1 und var2 immer den gleichen Wert haben werden und „miteinander verbunden bleiben“. Schaut euch dazu z.B. folgendes Programm an:

int var1;  // deklariere Variable "var1"
int var2;  // deklariere Variable "var2"
var1=1;    // weise "var1" den Wert "1" zu.
var2=var1;    // weise "var2" das zu, was aktuell in "var1" steht.
Serial.println(var1); //  --> gibt "1" aus
Serial.println(var2); //  --> gibt auch "1" aus
 
var1=2;    // weise "var1" den neuen Wert "2" zu. --> var2 wird dadurch nicht verändert.
Serial.println(var1); //  --> gibt "2" aus
Serial.println(var2); //  --> gibt immer noch "1" aus

So sind auch Ausdrücke möglich, die mathematisch keinen Sinn ergeben würden (bzw. eine „falsche Aussage“ wären)

int var;        // deklariere Variable "var"
var = 1;        // weise "var" den Wert "1" zu.
var = var + 1;    // nimm das, was gerade in "var" steht, addiere dazu "1" und speichere das Ergebnis wieder in "var"
Serial.println(var); //  --> gibt "2" aus
var = var + 1;    // nimm das, was gerade in "var" steht, addiere dazu "1" und speichere das Ergebnis wieder in "var"
Serial.println(var); //  --> gibt "3" aus

Initialisierung von Variablen

Ihr könnt die Variable bei der Deklaration auch gleich mit einem Wert füllen. Diesen Vorgang nennt man Initialisierung.

In unserem Beispiel initialisieren wir die Variable ledPinNummer mit dem Wert 13:

int ledPinNummer=13; //Deklariere die Variable mit dem Namen "ledPinNummer" vom Typ: "int" und fülle sie gleich mit "13"

Ihr könnt die Initialisierung auch weglassen - dann steht in der Variable irgendein unvorhersehbarer Wert, der an dieser Speicherstelle vorher schon herumlag - (also nicht unbedingt Null!).

Gültigkeitsbereich (Scope)

Eine Variable kann entweder…

  • nur in einem Teil des Programms existieren (lokale Variable)

…oder…

  • vom gesamten Programm aus zugänglich sein. (globale Variable)

Lokale Variablen

Eine Variable ist lokal, wenn sie innerhalb eines mit geschweiften Klammern umschlossenen Bereichs deklariert wurde. (also z.B. innerhalb von „setup“ oder „loop“) Lokale Variablen können wie Schmierzettel innerhalb der Funktion verwendet werden, in der sie deklariert wurden - sie nehmen dadurch keinen Speicherplatz weg, wenn die Funktion nicht läuft und können auch nicht von Außerhalb verändert werden.

Globale Variablen

Variablen, die außerhalb aller geschweiften Klammern deklariert wurden, sind „global“ gültig - also auch aus dem inneren von Funktionen heraus zu erreichen. Das kann sehr bequem sein, um eine überall benötigte Einstellung oder Ressource abzuspeichern, ist aber auch gefährlich, weil u.U. zwei weit voneinander entfernt liegende Teile des Programms in eine unübersichtliche Beziehung zueinander treten, wenn sie beide auf die gleiche globale Variable zugreifen.

Vermeidet globale Variablen, wenn sie nicht unbedingt nötig sind, denn sie machen euer Programm unübersichtlich!

Ein Beispiel für globale und lokale Variablen sieht ihr im folgenden Programm, welches den höchsten bisher gemessenen Wert ausgibt. maximum in diesem Fall ist eine globale Variable (sie soll den Wert speichern, auch wenn die loop()-Funktion durch ist); measurement ist eine lokale Variable – sie existiert nur innerhalb eines Aufrufs der loop()-Funktion.

int maximum = 0; // groesster gemessener Wert
 
void setup() {
  Serial.begin(9600);
}
 
void loop() {
  int measurement = analogRead(A0); // Messung Phototransistor
  if (measurement > maximum) {
    maximum = measurement;
  }
 // mein Maximum ausgeben:
  Serial.println(maximum);
  delay(100);
}
einleitung/variablen.txt · Zuletzt geändert: 2018/04/27 20:37 von d.golovko