Dies ist eine alte Version des Dokuments!
Jedes Arduinoprogramm besteht zunächst aus zwei Teilen, setup
und loop
.
Diesen Grundaufbau findest du im Programm BareMinimum
, welches du unter Basics findest.
Einfach aber nützlich: Du kannst den Arduino eine bestimmte Zeit lang warten lassen:
delay(int);
Die angegebene Zahl sind Millisekunden, und es handelt sich um ganze Zahlen (Datentyp int).
Bevor du loslegst mit senden und empfangen, musst du dem Arduino mitteilen, welche Pins du wofür benutzen willst:
pinMode( n, OUTPUT)
legst du fest, dass du an Pin Nummer n Signale senden willstpinMode( n, INPUT)
entsprechend, dass du Signale empfangen willst
Das solltest du nur einmal tun, also gehört das in setup
. Senden und empfangen willst du dagegen die ganze Zeit, das tust du also in loop
digitalWrite(n, HIGH)
sendet das Signal 1 (oder an), LOW entsprechend 0 (oder aus)digitalRead(n)
kannst du ein Signal als HIGH oder LOW empfangen
Wenn du etwas abhängig von einer Bedingung ausführen willst, dann kannst du das mit if
-Verzweigungen tun:
if(a < b){ // falls a < b, tu das hier } else { // ansonsten tu das hier }
Das Ganze lässt sich bei Bedarf natürlich auch schachteln:
if(a < b){ // falls a < b tu das hier if(c < d){ // falls a < b UND c < d, tu das hier } else { // falls a < b UND NICHT c > d, tu das hier } } else { // ansonsten tu das hier }
usw.
Falls du abhängig vom Wert einer Variablen etwas tun willst, sind switch
-Unterscheidungen das Richtige für dich. Hier solltest du alle Fälle, die dir wichtig sind, abhandeln. Für alle anderen Fälle gibt es default
.
switch(zahl){ case 0: // falls zahl = 0... break; case 1: // falls zahl = 1... case 42: // falls zahl = 42... break; default: // falls zahl anders als die angegebenen Zahlen (nicht 0, 1, oder 42) }
Falls du noch nie programmiert hast, fragst du dich vielleicht, was das break;
da soll. Wenn dein Programm schon gemerkt hat, dass die Zahl Null ist, dann ist es überflüssig, darüber hinaus auch noch zu prüfen, ob sie vielleicht auch Eins ist, oder 42.
Wäre das denn so schlimm? Die 2-3 Zeilen auszuführen dauert doch nicht lange.
Nein, lange brauchen sie wirklich nicht in diesem Fall. Aber es wird nicht nur alles angeguckt, sondern auch alles ausgeführt.
Das heißt in diesem Beispiel: Da nach case 1 das break fehlt, wird im Fall, dass zahl = 1
ist auch der Code für zahl = 42
ausgeführt.
In den meisten Fällen willst du das nicht.
Mit for
-Schleifen kannst du ein bestimmtes Stück Code genau so oft ausführen, wie du festlegst.
Wenn du es zahl
mal willst, schreibst du das einfach folgendermaßen:
for(int i = 0; i < zahl; i++){ // tue etwas delay(i * 1000); }
Innerhalb der Schleife kannst du auf i
zugreifen. Hier wird nach dem Ausführen des Codes i
Sekunden lang gewartet (delay
wird in Millisekunden gezählt).
Mit while
-Schleifen kannst du ein bestimmtes Stück Code so lange immer wieder ausführen, wie eine bestimmte Bedingung gilt.
Nehmen wir mal an, du hast
schalter
angebunden ist und Signale liefert (HIGH für gedrückt, LOW sonst)led
angebunden ist und Signale empfängt (HIGH für an, LOW für aus)Du willst, dass die LED immer dann angeschaltet wird, wenn der Schalter gedrückt ist.
// solange der Schalter gedrückt ist... while(digitalRead(schalter) == HIGH){ // ... schalte die LED an digitalWrite(led, HIGH); } // wenn der Schalter nicht mehr gedrückt ist, schalte die LED aus digitalWrite(led, LOW);