# Z-Lab Arduino-Grundkurs Projekt 1: Nichts tun...
## Dafür lernen wir, wie ein Arduino-Programm (der sog. Sketch) aufgebaut ist

Öffne zuerst den Sketch für dieses Projekt über die Arduino-IDE.  
Das geht über Datei-> Sketchbook -> Z-Lab -> Arduino_Grundlagen -> 01_Grundstruktur:

![Projekt öffnen](oeffnen.png)

Nun siehst du den Quellcode eines Programmes für den Arduino, das absolut gar nichts machen wird.
Dazwischen sind auch ein paar Kommentare, damit du auch nachvollziehen kannst, was alles bedeutet, wenn du diese Seite nicht offen hast.

Die erste Zeile Code, die uns interessiert ist die, in der "void setup() {" steht:
```c
void setup() {
```

Jetzt müssen wir ein bisschen ausholen...  
Hier wird eine sog. Funktion definiert.  
Funktionen sind wie Aufgaben, oder Fragen, die du jemandem stellst oder die dir jemand stellt.
Also wie z.B., wenn dich deine Eltern fragen, ob du Durst hast oder wenn du deine Eltern fragst, ob sie dir aus dem Kühlschrank die Flasche Wasser geben können, die für dich zu weit oben im Kühlschrank verstaut ist.

Im ersten Beispiel wirst du überlegen, ob du Durst hast und dann mit "Ja" oder "Nein" antworten.
In C würde die Definition einer solchen Funktion etwa so aussehen:
```c
bool habIchDurst() {
```
Dabei ist hier "bool" die Art der Rückgabe, die die Funktion hat. "bool" bedeutet, dass die Antwort entweder "ja" (im Computer eine "1") oder "nein" (im Computer eine "0") sein kann.

Wenn wir jetzt kleinlich wären könnte die Antwort auf die Frage an deine Eltern, ob sie dir die Wasserflasche aus dem Kühlschrank holen können auch nur eine 0 oder eine 1 sein ;) Aber das würden deine Eltern ja nicht machen sondern sie würden dir (sofern sie es wirklich nicht können, weil vielleicht kein Wasser mehr im Kühlschrank ist) einfach die Wasserflasche geben. Wenn kein Wasser mehr im Kühlschrank wäre würden sie dir das dann sagen.

In diesem Falle könnten wir die Funktion wie folgt definieren
```c
void kannstDuMirWasserAusDemKuehlschrankGeben() {
```
"void" heißt einfach nur "mach das, was in der Funkion steht ohne mir irgendwie Rückmeldung zu geben.
Also im Falle der Wasserflasche die Wasserflasche.

> Es gibt auch noch die Möglichkeit, die Funktion so zu definieren, dass die Wasserflasche zurück kommt. Wahrscheinlich kommen wir da in einem anderen Beispiel oder Kurs noch drauf :)

> Und sicher ist dir in dem Beispiel schon aufgefallen, dass Funktionsnamen kein Umlaute haben dürfen.

Ganz wichtig sind die Klammern "()" am Ende der Funktion. Erst dadurch wird die Funkion auch zur Funktion und kann nicht mit einer Variable (kommen wir im Nächsten Projekt dazu) oder anderen Elementen verwechselt werden.

### Die Funktion "setup"
Die Funktion "setup" ist eine ganz spezielle Funktion. "Setup" ist englisch und heißt auf Deutsch so viel wie "Aufbau" oder "Einrichtung". Diese Funktion wird einmal ausgeführt, nachdem der Arduino mit Strom versorgt (also eingeschaltet) wird. Alles, was nur einmal gemacht werden muss, um die Aufgabe zu erledigen, die unser Programm erleidgen muss, muss hier rein.

Das ist wie wenn du mit deinem Lego spielst: Zuerst musst du das Lego holen, dich irgendwo hinsetzen und dann das Lego auspacken. Wenn du dann mit dem Lego z.B. ein Haus baust hast du das Lego schon da und musst nur immer wieder in die Kiste greifen. Und hier kommt die zweite Funktion aus diesem Projekt ins Spiel

### Die Funktion Loop
Die Funktion "loop" ist das zweite wirklich relevante in diesem Beispiel:
```c
void loop() {
```
"Loop" ist auch wieder englisch und bedeutet "Schleife".

In der Funktion "loop" muss alles stehen, was der Arduino wirklich immer und immer wieder machen soll, denn diese Funktion startet, sobald die setup-Funktion fertig ist und dann wird diese so lange wiederholt, bis ein Fehler auftritt oder der Arduino keinen Strom mehr.

Also wenn du z.B. immer wieder einen Temperaturwert auslesen und dann eine LED leuchten lassen möchtest dann muss der Arduino immer wieder den Sensor auslesen, prüfen, welche Temperatur der Sensor zurückgibt, dann vergleichen mit dem Wert, ab dem der die LED rot werden muss und dann die LED anschalten. Danach geht's weiter... Ist die Temperatur immer noch hoch oder oder niedrig genug oder muss die LED abgeschaltet werden?

### Der Arduino ist wie eine ganz normale Maschine
Der Arduino ist wie jede andere Maschine oder jedes andere Werkzeug. Wenn deine Eltern z.B. einen Wasserkocher verwenden wollen dann müssen sie diesen auch erst mal bereit machen. Also auspacken und anschließen. Das ist wie die setup-Funktion.
Danach kann der Wasserkocher beliebig oft (so lange er nicht kaputt geht, Strom hat und noch Wasser da ist) verwendet werden, um Wasser heiß zu machen. Das ist die loop-Funktion.

### Was gehört alles zu einer Funktion?
Alles was zu einer Funktion gehört wird von geschweiften Klammern umgeben. Also die Funktion geht von "{" bis "}".

Also in unserem Beispiel... Garnichts, denn hier stehen keine Befehle:


```c
void setup() {
}
void loop() {
}
```

Unser Programm tut also gar nichts... Das ist aber nicht schlimm, denn wir schicken das trotzdem mal an den Arduino, um zu lernen, wie das geht und zu überprüfen, ob das denn auch stimmt.

Damit wir das Programm auf den Arduino laden können müssen wir den Arduino an den PC anschließen.
Zudem muss die Arduino-IDE wissen, welchen Arduino wir verwenden.
Schließe den Arduino mit dem USB-Kabel an den PC an:
![Arduino anschließen](arduino_anschliessen.jpg)

Um der Arduino-IDE zu sagen, welchen Arduino du hast wähle oben aus dem Drop-Down den eben angeschlossenen Arduino aus:
![Arduino auswählen](arduino_auswaehlen.jpg)

Dazu drücken wir in der Arduino-IDE oben auf den Knopf oben links, auf dem ein Haken ist. Wenn du mit der Maus drüber fährst dann erscheint da ein "Überprüfen" als sog. "Tooltip":

![Verifizieren und Hochladen](verifizieren_und_hochladen.png)

Dadurch wird das Programm, das wir offen haben vom Compiler überprüft und kompiliert. Wenn dieser keinen Fehler feststellt erscheinten unten link kurz "Kompilieren Erolgreich!". Das sieht dann so aus:

![Kompilieren erolgreich](kompilieren_erolgreich.png)

Danach drücken wir auf "Hochladen". Das ist der Knopf mit dem Pfeil nach rechts, auch oben links in der Arduino-IDE.
Wenn du den drückst und das Hochladen. Wenn das erfolgreich klappt steht unten rechts in der Arduino-IDE kurz die Meldung "Hochladen erfolgreich!":

![Hochladen erfolgreich!](hochladen_erfolgreich.png)

**Herzlichen Glückwunsch!!!**

Du hast gerade dein erstes Programm in Maschinencode übersetzt und auf den Arduino geladen.

Auch wenn das Programm noch nichts tut so weißt du jetzt, was die Funktionen setup und loop machen und wie du ein Programm so übersetzt, dass der Arduino weiß, was er zu tun hat und wie du es hochlädst.

Also schnell weiter zum nächsten Projekt denn da bekommt der Arduino jetzt auch etwas zu tun :)