Übung 4 fertig gemacht, Sketches von 5 und 6 umbeannnt

This commit is contained in:
Alexander Gabriel 2024-12-30 21:25:57 +01:00
parent 6e9d78b1d4
commit 7961afba66
8 changed files with 83 additions and 96 deletions

View File

@ -1,18 +0,0 @@
#define PIEPSER 12
void setup() {
pinMode(PIEPSER, OUTPUT);
}
void loop() {
digitalWrite(PIEPSER, HIGH);
delay(100);
digitalWrite(PIEPSER, LOW);
delay(100);
}

View File

@ -0,0 +1,27 @@
// Arduino Grundkurs des Z-Lab Bruchsal.
// Dies ist Übung 4: Ein Piepser
// Eine ausführliche Beschreibung mit Erklärungen findest du hier:
// https://git.digital-infinity.de/DigitalInfinity/Z-Lab/src/branch/main/Arduino_Grundlagen/04_Piepser
// Dort findest du auch eine Skizze für die Verkabelung
// Den Piepser schließen wir an PIN 12 an
// Damit wir es leichter haben, wenn sich das mal ändert speichern wir die 12 in einer
// sogenannten Konstante, die "PIEPSER" heißt.
// Das ist so wie bei LED_BUILTIN in der zweiten Übung
#define PIEPSER 12
void setup() {
pinMode(PIEPSER, OUTPUT);
}
void loop() {
// mit tone() lassen wir den Piepser Töne machen. Hier lassen wir ihn einen Ton mit einer Frequenz von 1KHz erzeugen
tone(PIEPSER, 1000);
delay(1000);
// und hiermit geht der Piepser wieder aus
noTone(PIEPSER);
delay(1000);
}
// Kannst du auch eine Melodie mit dem Arduino erzeugen?

Binary file not shown.

Before

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

View File

@ -1,110 +1,88 @@
TODO: Überarbeiten
# Z-Lab Arduino-Grundkurs Projekt 3: Externe LED und mehrere LEDs
# Z-Lab Arduino-Grundkurs Übung 3: Piepser
In diesem Projekt lassen wir wieder LEDs blinken.
Allerdings dieses Mal eine externe.
In dieser Übung erzeugen wir Töne mit einem Piepser.
Zuerst öffnen wir das Projekt über den gewohnten Weg. Der Name ist "03_Externe_LED"
Zuerst öffnen wir das Projekt über den gewohnten Weg. Der Name ist "04_Piepser"
![Projekt öffnen](image.png)
![Projekt öffnen](projekt_oeffnen.png)
Wenn du dieses Projekt öffnest wunderst du dich bestimmt. Das sieht ja genau so aus wie beim letzten Mal.
Genau! Um mehrere LEDs und auch externe LEDs anzusteuern reicht unser C-Wissen aus den letzten beiden Projekten völlig aus. Wir müssen nur das gelernte neu kombinieren und schon können wir externe LEDs und auch mehrere LEDs anschließen und unterschiedlich blinken lassen.
Und wir müssen lernen, was ein Breadboard ist :)
## Das Breadboard
Ein Breadboard ist eine Steckplatine, die es uns erstpart alles, was wir mal testen wollen, löten zu müssen.
Dabei sind die Löcher an der Außenseite der Platine längs miteinander verbunden und die Löcher im Inneren der Platine sind quer miteinander verbunden:
//TODO: BILD
Wenn wir nun einen Stromkreis brauchen, der eine LED, einen Widerstand und den Arduino miteinander verbindet dann müssten wir ohne das Breadboard einen Stromkreis basteln, der so aussieht:
//TODO: BILD
Oder wir löten auf einer normalen Platine einen Stromkreis wie diesen hier:
//TODO: BILD
Wenn wir nun aber ein paar Sachen hintereinander ausprobieren möchten müssten wir ja immer wieder umbasteln oder umlöten. Das macht auf Dauer keinen Spaß. Deshalb gibt es die Breadboards. Damit lässt sich ein Stromkreis oder eine Schaltung leicht und ohne Werkzeug bauen und wieder verändern.
## Verkabeln wir also die LED mit dem Widerstand mit dem Arduino
## Verkabeln wir den Piepser mit dem Arduino mit dem Arduino
So muss da aussehen, wenn wir fertig sind:
<img src="Blinken_bb.svg">
Für den Aufbau gehen wir wie folgt vor:
* Die LED kommt in ein Breadboard
Die beiden Beinchen in zwei verschiedene Spalten stecken
* an die längere Seite der LED schließen wir den Widerstand an.
Dazu stecken wir den Widerstand in die gleiche Spalte wie die LED
* Das andere Ende des Widerstands verbinden wir mit dem Ausgang 12 des Arduino
Dazu stecken wir ein rotes Kabel in die Spalte dem Widerstand und mit dem anderen Ende auf den Pin 12 des Arduino.
* Jetzt fehlt noch der Rückweg des Stroms zum Arduino
Dazu stecken wir eine Seite eines schwarzen Kabels an einen der GND-Eingänge des Arduino.
Die andere Seite stecken wir in die Spalte, in der das kurze Beinchen der LED noch alleine Steck.
<img src="Piepser.svg">
So und dann geht's wieder ans Programmieren.
* Wie müssen wir den Code anpassen, damit die externe LED blinkt?
In der Datei 04_Piepser.ino finden wir (ohne die ganzen Kommentare) folgenden Quellcode:
<details>
<summary>hier klicken für (zwei mögliche) Lösungen</summary>
```c
#define PIEPSER 12
### Lösung mit "hart-Kodierter" Nummer
```c
void setup() {
pinMode(12, OUTPUT);
}
void setup() {
pinMode(PIEPSER, OUTPUT);
}
void loop() {
digitalWrite(12, HIGH);
delay(1000);
digitalWrite(12, LOW);
delay(1000);
}
```
void loop() {
tone(PIEPSER, 1000);
delay(1000);
noTone(PIEPSER);
delay(1000);
}
```
Neu ist hier, dass wir schon vor der Setup-Funktion "etwas machen".
Dinge, die außerhalb der Funktionen gemacht werden stehen allen Funktionen zur Verfügung.
### Lösung mit #define
```c
#define LED1 12
## define
void setup() {
pinMode(LED1, OUTPUT);
}
```c
#define PIEPSER 12
```
void loop() {
digitalWrite(LED1, HIGH);
delay(1000);
digitalWrite(LED1, LOW);
delay(1000);
}
```
</details>
Mit "#define" erstellen (definieren, wie define) wir eine sogenanntes Makro mit dem Namen "PIEPSER", das die 12 enthält.
Überall später im Quellcode wird "PIEPSER" mit 12 ersetzt.
Das macht es uns ein bisschen einfacher, denn:
* Wir müssen uns die 12 nicht merken, an der der Piepser hängt sondern können einfach immer "PIEPSER" schreiben, wenn wir mit dem Piepser etwas machen wollen
* Wir können den Anschluss, an dem der Piepser hängt ganz einfach ändern, in dem wir einfach nur die 12 durch etwas anderes ersetzen und müssen nicht im ganzen Code nach der 12 suchen
## tone() und noTone()
Wie der Name schon sagt ;)
Mit "tone()" erzeugen ir einen Ton.
Dabei ist der erste Parameter der Funktion der PIN (Anschluss), an dem der Piepser angeschlossen ist
der zweite Parameter ist die Frequenz, die der ton haben soll. In unserem Beispiel sin das 1000 Hz.
Und mit noTone() hört der Piepser wieder auf.
```c
tone(PIEPSER, 1000);
noTone(PIEPSER);
```
## Und wie könnte es weiter gehen?
* Was müssten wir denn tun, wenn wir beide LEDs (die interne und die externe) abwechselnd blinken lassen wollten?
* Und wir müssten wir vorgehen, wenn wir 3 LEDs nacheinander blinken lassen wollen?
* Kannst du auch eine Melodie abspielen?
<details>
<summary>Hier klicken für Lösungsvorschläge - aber bitte erst selbst probieren! </summary>
<details>
<summary>Ja wirklich. Bitte erst selbst probieren. Nicht gleich nach der Lösung schauen.</summary>
### Lösung mit #define
```c
#define PIEPSER 12
TODO: hier Lösungsvorschläge
void setup() {
pinMode(PIEPSER, OUTPUT);
}
void loop() {
tone(PIEPSER, 1000);
delay(1000);
tone(PIEPSER, 500);
delay(1000);
tone(PIEPSER, 1000);
delay(1000);
tone(PIEPSER, 500);
delay(1000);
```
</details>
</details>