Arduino Cheatsheet

Die wichtigsten Befehle mit kurzen Erklärungen und Beispielen

Grundstruktur

void setup() {
  // Wird einmal beim Start ausgeführt
}

void loop() {
  // Wird danach ständig wiederholt
}
BefehlErklärung
setup()Wird beim Start genau einmal ausgeführt.
loop()Wird danach fortlaufend wiederholt.

Pins konfigurieren

pinMode(7, INPUT);
pinMode(8, OUTPUT);
pinMode(9, INPUT_PULLUP);
BefehlErklärung
pinMode(pin, INPUT)Pin als Eingang verwenden.
pinMode(pin, OUTPUT)Pin als Ausgang verwenden.
pinMode(pin, INPUT_PULLUP)Eingang mit internem Pull-up-Widerstand.

Digitale Ein- und Ausgabe

digitalWrite(8, HIGH);
digitalWrite(8, LOW);

int zustand = digitalRead(7);
BefehlErklärung
digitalWrite(pin, HIGH)Ausgang auf HIGH setzen.
digitalWrite(pin, LOW)Ausgang auf LOW setzen.
digitalRead(pin)Digitalen Zustand lesen: HIGH oder LOW.
Merke: HIGH entspricht logisch 1, LOW logisch 0.

Analoge Ein- und Ausgabe

Analog lesen

int wert = analogRead(A0);

Beim Arduino Uno liefert analogRead() normalerweise Werte von 0 bis 1023.

float spannung = wert * 5.0 / 1023;

PWM ausgeben

analogWrite(9, 128);
BefehlErklärung
analogRead(A0)Analoge Spannung messen.
analogWrite(pin, wert)PWM-Signal ausgeben.
wertTypischerweise 0 bis 255.
analogWrite(9, 0);    // 0 %
analogWrite(9, 128);  // ca. 50 %
analogWrite(9, 255);  // 100 %
Wichtig: Beim klassischen Arduino Uno erzeugt analogWrite() keine echte variable Spannung, sondern PWM.

Serielle Ausgabe

Zuerst im setup():

Serial.begin(9600);

Danach:

Serial.print("Wert: ");
Serial.println(wert);
BefehlErklärung
Serial.begin(9600)Serielle Kommunikation starten.
Serial.print()Ausgabe ohne Zeilenumbruch.
Serial.println()Ausgabe mit anschliessendem Zeilenumbruch.
Serial.print("Temperatur: ");
Serial.println(23);

Ausgabe:

Temperatur: 23

Warten und Zeit messen

delay(1000);
BefehlErklärung
delay(ms)Programm für eine bestimmte Anzahl Millisekunden anhalten.
millis()Millisekunden seit dem Start des Arduino.
unsigned long zeit = millis();

Variablen

int zahl = 10;
float temperatur = 22.5;
bool aktiv = true;
char zeichen = 'A';
DatentypBeispielVerwendung
intint x = 5;Ganze Zahlen
floatfloat x = 2.5;Dezimalzahlen
boolbool x = true;Wahr/Falsch
charchar x = 'A';Einzelnes Zeichen
StringString name = "Arduino";Text
unsigned longunsigned long t = millis();Grosse positive Zahlen, oft für Zeitmessung

Listen / Arrays

Begriff: Was in Python oft eine Liste ist, wird bei Arduino/C++ meistens als Array gespeichert. Ein Array enthält mehrere Werte desselben Datentyps und hat normalerweise eine feste Länge.

Array erstellen

int messwerte[] = {512, 630, 487, 700};
int ledPins[] = {3, 5, 6, 9};
String namen[] = {"Rot", "Grün", "Blau"};

Element lesen oder verändern

int ersterWert = messwerte[0];  // 512
messwerte[2] = 500;             // dritten Wert ändern
Wichtig: Die Zählung beginnt bei 0. Bei vier Elementen sind deshalb nur die Indizes 0 bis 3 gültig.

Länge bestimmen

int anzahl = sizeof(messwerte) / sizeof(messwerte[0]);

sizeof(messwerte) liefert den gesamten Speicherbedarf. Durch den Speicherbedarf eines einzelnen Elements geteilt ergibt sich die Anzahl der Elemente.

Alle Elemente mit einer Schleife verwenden

int ledPins[] = {3, 5, 6, 9};
int anzahl = sizeof(ledPins) / sizeof(ledPins[0]);

void setup() {
  for (int i = 0; i < anzahl; i++) {
    pinMode(ledPins[i], OUTPUT);
  }
}

void loop() {
  for (int i = 0; i < anzahl; i++) {
    digitalWrite(ledPins[i], HIGH);
    delay(200);
    digitalWrite(ledPins[i], LOW);
  }
}
AusdruckBedeutung
int zahlen[5];Array mit Platz für fünf Ganzzahlen anlegen.
zahlen[0]Erstes Element lesen.
zahlen[i] = 10;Element an Position i verändern.
sizeof(zahlen) / sizeof(zahlen[0])Anzahl der Elemente bestimmen.
Achtung: Ein Zugriff ausserhalb des Arrays, beispielsweise messwerte[4] bei vier Elementen, kann zu unvorhersehbarem Verhalten führen. Arduino prüft die Grenzen nicht automatisch.

Bedingungen und Operatoren

if (wert > 500) {
  digitalWrite(8, HIGH);
} else {
  digitalWrite(8, LOW);
}
if (wert > 800) {
  // ...
}
else if (wert > 400) {
  // ...
}
else {
  // ...
}

Vergleichsoperatoren

OperatorBedeutung
==gleich
!=ungleich
<kleiner
>grösser
<=kleiner oder gleich
>=grösser oder gleich

Logische Operatoren

OperatorBedeutung
&&UND
||ODER
!NICHT
if (temperatur > 20 && licht == HIGH) {
  // ...
}

Schleifen

for-Schleife

for (int i = 0; i < 10; i++) {
  Serial.println(i);
}

Wiederholt einen Codeblock eine bestimmte Anzahl Mal.

while-Schleife

while (digitalRead(7) == HIGH) {
  // Wiederholen, solange Bedingung wahr ist
}

Funktionen

void ledAn() {
  digitalWrite(8, HIGH);
}

Aufruf:

ledAn();

Funktion mit Rückgabewert:

int verdoppeln(int zahl) {
  return zahl * 2;
}

Aufruf:

int ergebnis = verdoppeln(5);

Konstanten für Pins

Statt:

pinMode(8, OUTPUT);
digitalWrite(8, HIGH);

besser:

const int LED_PIN = 8;

void setup() {
  pinMode(LED_PIN, OUTPUT);
}

So ist der Code verständlicher und leichter anzupassen.

Zufallszahlen

int zahl = random(1, 7);

Erzeugt eine Zufallszahl von 1 bis 6.

random(min, max);

max ist dabei nicht enthalten.

Nützliche Zahlenfunktionen

BefehlErklärung
min(a, b)Kleineren Wert bestimmen.
max(a, b)Grösseren Wert bestimmen.
abs(x)Absolutwert.
constrain(x, min, max)Wert auf einen Bereich begrenzen.
map()Wert von einem Bereich auf einen anderen umrechnen.
int pwm = map(sensorwert, 0, 1023, 0, 255);

Komplettes Mini-Beispiel

Ein Taster steuert eine LED:

const int LED_PIN = 8;
const int BUTTON_PIN = 7;

void setup() {
  pinMode(LED_PIN, OUTPUT);
  pinMode(BUTTON_PIN, INPUT_PULLUP);

  Serial.begin(9600);
}

void loop() {

  int button = digitalRead(BUTTON_PIN);

  if (button == LOW) {
    digitalWrite(LED_PIN, HIGH);
    Serial.println("Taster gedrückt");
  }
  else {
    digitalWrite(LED_PIN, LOW);
  }

  delay(50);
}

Merksätze