In der Robotik arbeitest du mit vielen Zahlen (Geschwindigkeit, Abstand, Zeit) und Zuständen (an/aus). In Arduino C macht der richtige Datentyp das Programm klarer und vermeidet Fehler. Dies ist Lektion 2 unseres Arduino-Kurses.
1. Die wichtigsten Datentypen
int: Ganzzahl (Zähler, Geschwindigkeit, Schwellwert). Auf einem UNO 16 Bit, von −32.768 bis 32.767 (Arduino-Referenz).
unsigned long: Zeit aus millis(), das genau diesen Typ zurückgibt.
float: Kommazahl (Messwert, Mittelwert, Berechnung).
bool: wahr/falsch (Zustand, Flag).
char: ein Zeichen ('A').
const char*: konstanter Text, praktisch für Meldungen.
Faustregel: Wer Ereignisse zählt, braucht eine Ganzzahl, also int, nicht float.
2. Globale und lokale Variablen (Gültigkeitsbereich)
- Global: außerhalb jeder Funktion deklariert, überall sichtbar.
- Lokal: innerhalb einer Funktion deklariert, nur in diesem Block sichtbar.
int global; ← sichtbar in setup() und loop()
void loop() {
int local; ← nur in loop() sichtbar
}
3. Konstanten statt magischer Zahlen
const int LED_PIN = 13;
const int BAUD = 9600;
const int DELAY_MS = 100;
Wähle Namen, die sagen, warum es diese Zahl gibt.
4. Häufige Umwandlungen
int n = 3; float f = n; funktioniert (aus 3 wird 3.0).
float f = 3.7; int n = (int)f; schneidet ab (aus 3.7 wird 3).
Für Textausgaben behältst du Zahlen als int und gibst sie mit Serial.print aus, statt globale String-Objekte zu bauen.
Übungen (12)
Die Lösungen sind verborgen: Klicke auf Lösung anzeigen.
Leicht
Übung 1: Deklariere int counter = 0; und erhöhe die Variable in loop(). Leicht
Lösung anzeigen
int counter = 0;
void setup() {}
void loop() { counter++; }
Übung 2: Deklariere bool alarm = false; und setze sie in setup() auf true. Leicht
Lösung anzeigen
bool alarm = false;
void setup() { alarm = true; }
void loop() {}
Übung 3: Deklariere unsigned long t0 = 0; und speichere in setup() den Wert von millis(). Leicht
Lösung anzeigen
unsigned long t0 = 0;
void setup() { t0 = millis(); }
void loop() {}
Übung 4: Gib einen int und einen float mit Serial.print in einer Zeile aus. Leicht
Lösung anzeigen
int n = 7;
float f = 3.5;
void setup() {
Serial.begin(9600);
Serial.print("n=");
Serial.print(n);
Serial.print(" f=");
Serial.println(f);
}
void loop() {}
Mittel
Übung 5: Gültigkeitsbereich: Deklariere eine lokale Variable int x in loop() und erkläre im Kommentar, warum setup() sie nicht verwenden kann. Mittel
Lösung anzeigen
void setup() {
// x does not exist here if it is declared in loop()
// Scope: a local variable is only visible inside its block.
}
void loop() {
int x = 0;
x++;
}
Übung 6: Deklariere einen Text const char* msg = "OK"; und gib ihn beim Start aus. Mittel
Lösung anzeigen
const char* msg = "OK";
void setup() {
Serial.begin(9600);
Serial.println(msg);
}
void loop() {}
Übung 7: Umwandlung: Berechne mit float d = 12.9; den Wert int n = (int)d; und gib n aus (Ergebnis: 12). Mittel
Lösung anzeigen
void setup() {
Serial.begin(9600);
float d = 12.9;
int n = (int)d;
Serial.println(n); // 12
}
void loop() {}
Übung 8: Schreibe int clampInt(int v, int minV, int maxV), die v zwischen min und max hält. Mittel
Lösung anzeigen
int clampInt(int v, int minV, int maxV) {
if (v < minV) return minV;
if (v > maxV) return maxV;
return v;
}
Fortgeschritten
Übung 9: Erkläre im Kommentar, warum millis() in einem unsigned long gespeichert werden muss. Fortgeschritten
Lösung anzeigen
void setup() {
// millis() returns a large positive number (ms since start-up)
// unsigned long matches its return type and keeps the full range.
unsigned long t = millis();
Serial.begin(9600);
Serial.println(t);
}
void loop() {}
Übung 10: Schreibe bool isNear(int distanceCm, int threshold), die true zurückgibt, wenn distanceCm <= threshold. Fortgeschritten
Lösung anzeigen
bool isNear(int distanceCm, int threshold) {
return distanceCm <= threshold;
}
Übung 11: static: Schreibe eine Funktion, die zählt, wie oft sie aufgerufen wurde. Fortgeschritten
Lösung anzeigen
int countCalls() {
static int c = 0;
c++;
return c;
}
Übung 12: Mini-Projekt: Gib mit int distance_cm = 42; den Text Distance: 42 cm aus. Fortgeschritten
Lösung anzeigen
void setup() {
Serial.begin(9600);
int distance_cm = 42;
Serial.print("Distance: ");
Serial.print(distance_cm);
Serial.println(" cm");
}
void loop() {}
← Zurück: Lektion 1: Aufbau eines Sketches und Serial · Weiter: Lektion 3: Bedingungen, Sensoren und Aktoren → · Zur Kursübersicht