Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
project:arduino-kickstarter-l02 [18.11.2011 18:32] – for, if, switch q-rai | project:arduino-kickstarter-l02 [14.01.2013 15:56] (aktuell) – Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== Architektur eines Sketches ====== | ====== Architektur eines Sketches ====== | ||
+ | Du hast nun deinen Arduino an den Rechner angeschlossen und das erste Mal ein Programm hochgeladen. Nun ist es an der Zeit, die Programme mal näher unter die Lupe zu nehmen. | ||
+ | Die Arduino-Umgebung bietet bereits eine Menge an Beispielprogrammen, | ||
+ | |||
+ | ===== Minimales Programm ===== | ||
Jedes Arduinoprogramm besteht zunächst aus zwei Teilen, '' | Jedes Arduinoprogramm besteht zunächst aus zwei Teilen, '' | ||
* in der setup-Methode steht alles, was nur am Anfang einmal ausgeführt werden soll | * in der setup-Methode steht alles, was nur am Anfang einmal ausgeführt werden soll | ||
Zeile 6: | Zeile 10: | ||
Diesen Grundaufbau findest du im Programm '' | Diesen Grundaufbau findest du im Programm '' | ||
- | ===== Nichts tun ===== | + | < |
- | Einfach aber nützlich: Du kannst den Arduino eine bestimmte Zeit lang warten lassen: | + | void setup(){ |
+ | // einmal | ||
+ | } | ||
- | < | + | void loop(){ |
+ | // immer wieder | ||
+ | } | ||
+ | </ | ||
- | Die angegebene Zahl sind Millisekunden, | ||
- | ===== Signale | + | ===== Signale |
Bevor du loslegst mit senden und empfangen, musst du dem Arduino mitteilen, welche Pins du wofür benutzen willst: | Bevor du loslegst mit senden und empfangen, musst du dem Arduino mitteilen, welche Pins du wofür benutzen willst: | ||
* mit '' | * mit '' | ||
* mit '' | * mit '' | ||
+ | Das solltest du nur einmal tun, also gehört das in '' | ||
+ | |||
+ | Ein //Pin// ist ein Ein- oder Ausgang des Arduinos. Die Nummern zu den Pins stehen auf der Platine. | ||
+ | |||
+ | |||
+ | ==== Digitale Signale ==== | ||
+ | Digitale Signale können genau zwei Werte annehmen, HIGH und LOW. Diese stehen dir als Konstanten zur Verfügung. | ||
+ | * HIGH = 1 = an | ||
+ | * LOW = 0 = aus | ||
- | Das solltest du nur einmal tun, also gehört das in '' | + | Lesen und schreiben lassen sich Pins mit den folgenden beiden Methoden: |
- | * mit '' | + | * mit '' |
- | * mit '' | + | * mit '' |
- | ===== For-Schleifen ===== | + | So liest man zum Beispiel, welcher Wert gerade an Pin 2 anliegt: |
- | Mit for-Schleifen kannst du ein bestimmtes Stück Code genau so oft ausführen, wie du festlegst. | + | |
- | Wenn du es '' | + | |
< | < | ||
- | for(int i = 0; i < zahl; i++){ | + | wert = digitalRead(2); |
- | // tue etwas | + | </code> |
- | delay(i * 1000); | + | |
+ | Ein einfaches Beispiel zum Schreiben liefert das Programm '' | ||
+ | |||
+ | < | ||
+ | void setup(){ | ||
+ | pinMode(13, OUTPUT); | ||
+ | } | ||
+ | |||
+ | void loop(){ | ||
+ | | ||
+ | delay(1000); | ||
+ | digitalWrite(13, | ||
+ | delay(1000); | ||
} | } | ||
</ | </ | ||
- | Innerhalb | + | Während |
+ | |||
+ | Ein Beispiel, in dem beide Funktionen genutzt werden findest du unter Digital -> Button. | ||
+ | |||
+ | |||
+ | ==== Analoge Signale ==== | ||
+ | Analoge Signale sind etwas komplexer als digitale Signale. Sie können nicht nur zwischen HIGH und LOW unterscheiden, | ||
+ | * lesen: Werte zwischen 0 (aus) und 1023 (an), also 1024 Werte / 10 bit Auflösung | ||
+ | * schreiben: Werte zwischen 0 (aus) und 255 (an), also 256 Werte / 8 bit Auflösung | ||
+ | |||
+ | Lesen und schreiben lassen sich Pins mit den folgenden beiden Methoden: | ||
+ | |||
+ | * '' | ||
+ | * '' | ||
+ | |||
+ | Die Benutzung ist recht ähnlich zum digitalen Lesen und Schreiben (abgesehen von der Art der Werte). Das große Spektrum an Werten eignet sich besonders, um z.B. statt hartem Blinken einer LED einen weichen Übergang zwischen hell und dunkel zu erhalten. Ein Beispiel dafür findest du unter Analog -> Fading. | ||
+ | |||
+ | |||
+ | ====== Nützliche Kontrollstrukturen ====== | ||
+ | Wie in allen höheren Programmiersprachen gibt es auch auf dem Arduino einige nützliche Kontrollstrukturen. Die Beispiele hier sind recht knapp gehalten - ausführliche Beispiele findest du unter Control. | ||
+ | |||
+ | |||
+ | ===== Nichts tun ===== | ||
+ | Einfach aber nützlich: Du kannst den Arduino eine bestimmte Zeit lang warten lassen: | ||
+ | |||
+ | < | ||
+ | |||
+ | Die angegebene Zahl sind Millisekunden, und es handelt sich um ganze Zahlen (Datentyp int). | ||
===== If-Verzweigung ===== | ===== If-Verzweigung ===== | ||
Zeile 67: | Zeile 122: | ||
usw. ;-) | usw. ;-) | ||
+ | |||
===== Fallunterscheidung mit switch ===== | ===== Fallunterscheidung mit switch ===== | ||
- | Falls du abhängig vom Wert einer Variablen etwas tun willst, sind '' | + | Falls du abhängig vom Wert einer Variablen etwas tun willst, sind '' |
< | < | ||
Zeile 78: | Zeile 134: | ||
case 1: | case 1: | ||
// falls zahl = 1... | // falls zahl = 1... | ||
- | break; | ||
case 42: | case 42: | ||
// falls zahl = 42... | // falls zahl = 42... | ||
Zeile 87: | Zeile 142: | ||
</ | </ | ||
- | Falls du noch nie programmiert hast, fragst du dich vielleicht, was das '' | + | Falls du noch nie programmiert hast, fragst du dich vielleicht, was das '' |
+ | |||
+ | **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 '' | ||
+ | In den meisten Fällen //willst// du das nicht. :-) | ||
+ | |||
+ | |||
+ | ===== Zähl-Schleifen ===== | ||
+ | Mit '' | ||
+ | Wenn du es '' | ||
+ | |||
+ | < | ||
+ | for(int i = 0; i < zahl; i++){ | ||
+ | // tue etwas | ||
+ | delay(i * 1000); | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Innerhalb der Schleife kannst du auf '' | ||
+ | |||
+ | |||
+ | ===== Bedingte Schleifen ===== | ||
+ | Mit '' | ||
+ | Nehmen wir mal an, du hast | ||
+ | * einen Schalter, der an Pin '' | ||
+ | * eine LED, die an Pin '' | ||
+ | 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, | ||
+ | } | ||
+ | // wenn der Schalter nicht mehr gedrückt ist, schalte die LED aus | ||
+ | digitalWrite(led, | ||
+ | </ | ||