Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
ef_informatik:arduino [2024-11-19 21:56] – [Aufgabe B5: Zeit] sca | ef_informatik:arduino [2024-12-10 09:34] (aktuell) – [Aufgabe D2: Potentiometer] sca | ||
---|---|---|---|
Zeile 118: | Zeile 118: | ||
Löse alle Aufgaben hier auf dem Arduino und gib die Resultate über den Serial Monitor aus. Verwende noch keine Hardware-Komponenten. | Löse alle Aufgaben hier auf dem Arduino und gib die Resultate über den Serial Monitor aus. Verwende noch keine Hardware-Komponenten. | ||
+ | **Erstelle für jede Aufgabe ein eigenes Arduino-Projekt.** | ||
=== Aufgabe B1: Verzweigungen === | === Aufgabe B1: Verzweigungen === | ||
Zeile 144: | Zeile 145: | ||
*Tipp:* [[informatik: | *Tipp:* [[informatik: | ||
- | <nodisp 2> | ||
++++Lösungen| | ++++Lösungen| | ||
Zeile 191: | Zeile 191: | ||
**Aufgabe 3:** | **Aufgabe 3:** | ||
+ | a) | ||
<code c++> | <code c++> | ||
+ | void setup() { | ||
+ | Serial.begin(9600); | ||
+ | double c = pythagoras(5.0, | ||
+ | Serial.println(c); | ||
+ | } | ||
+ | |||
+ | void loop() { | ||
+ | } | ||
+ | |||
+ | double pythagoras(double a, double b){ | ||
+ | return sqrt(a*a + b*b); | ||
+ | } | ||
+ | </ | ||
+ | b) | ||
+ | <code c++> | ||
+ | double isPrime(int n){ | ||
+ | if (n < 2){ | ||
+ | return false; | ||
+ | } | ||
+ | for (int i = 2; i < n; i++) { | ||
+ | if (n % i == 0){ | ||
+ | return false; | ||
+ | } | ||
+ | } | ||
+ | return true; | ||
+ | } | ||
</ | </ | ||
Zeile 197: | Zeile 224: | ||
<code c++> | <code c++> | ||
+ | int primes[] = {2, | ||
+ | |||
+ | void setup() { | ||
+ | Serial.begin(9600); | ||
+ | Serial.println(" | ||
+ | } | ||
+ | |||
+ | void loop() { | ||
+ | for (int i=0; | ||
+ | Serial.println(primes[i]); | ||
+ | delay(1000); | ||
+ | } | ||
+ | } | ||
</ | </ | ||
+ | Alternative Lösung ohne zusätzliche Schleife im Loop: | ||
+ | <code c++> | ||
+ | int primes[] = { 2, 3, 5, 7, 11, 13 }; | ||
+ | int nrPrimes = sizeof(primes) / sizeof(int); | ||
+ | int i = 0; // counter | ||
+ | |||
+ | void setup() { | ||
+ | Serial.begin(9600); | ||
+ | Serial.println(" | ||
+ | } | ||
+ | |||
+ | void loop() { | ||
+ | i = (i + 1) % nrPrimes; // increase counter by one and reset to 0 | ||
+ | Serial.println(primes[i]); | ||
+ | delay(1000); | ||
+ | } | ||
+ | </ | ||
+ | |||
**Aufgabe 5:** | **Aufgabe 5:** | ||
+ | **Lösung 1 mit delay:** | ||
<code c++> | <code c++> | ||
+ | long count = 0; | ||
+ | |||
+ | void setup() { | ||
+ | Serial.begin(9600); | ||
+ | Serial.println(" | ||
+ | } | ||
+ | |||
+ | void loop() { | ||
+ | Serial.println(count); | ||
+ | delay(1000); | ||
+ | count++; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | **Lösung 2 mit millis:** | ||
+ | <code c++> | ||
+ | long count = 0; | ||
+ | |||
+ | void setup() { | ||
+ | Serial.begin(9600); | ||
+ | Serial.println(" | ||
+ | } | ||
+ | |||
+ | void loop() { | ||
+ | if(millis() / 1000 >= count){ | ||
+ | Serial.println(count); | ||
+ | count++; | ||
+ | } | ||
+ | } | ||
</ | </ | ||
++++ | ++++ | ||
- | </ | + | |
==== Aufgaben C - Knöpfe und LED's ==== | ==== Aufgaben C - Knöpfe und LED's ==== | ||
Zeile 215: | Zeile 303: | ||
=== Aufgabe C1 - Disco Disco Party Party V1 === | === Aufgabe C1 - Disco Disco Party Party V1 === | ||
- | Bringe eine LED (natürlich mit passendem Vorwiderstand) zum leuchten. Z.B. soll sie alle 100ms ein resp. ausschalten. | + | Bringe eine LED (natürlich mit passendem Vorwiderstand) zum blinken. Z.B. soll sie alle 100ms ein resp. ausschalten. |
=== Aufgabe C2 - LED ein/ | === Aufgabe C2 - LED ein/ | ||
Zeile 228: | Zeile 316: | ||
Schliesse das Display an und zeige darauf deinen Namen an. | Schliesse das Display an und zeige darauf deinen Namen an. | ||
+ | |||
+ | === Aufgabe C5 - Laufschrift === | ||
+ | |||
+ | Zeige auf dem Display eine Laufschrift an, z.B. " | ||
<nodisp 2> | <nodisp 2> | ||
Zeile 304: | Zeile 396: | ||
digitalWrite(PIN_LED, | digitalWrite(PIN_LED, | ||
delay(200); | delay(200); | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | **Aufgabe C4:** | ||
+ | |||
+ | <code c++> | ||
+ | /* | ||
+ | Connect Display: | ||
+ | * GND to ground | ||
+ | * VCC to 3.3V | ||
+ | * SCA to A4 | ||
+ | * SCL to A5 | ||
+ | */ | ||
+ | |||
+ | #include < | ||
+ | #include " | ||
+ | |||
+ | rgb_lcd lcd; | ||
+ | String name = "Fritz "; | ||
+ | |||
+ | void setup() { | ||
+ | // set up the LCD's number of columns and rows: | ||
+ | lcd.begin(16, | ||
+ | |||
+ | // set the cursor to column 0, line 1 | ||
+ | // (note: line 1 is the second row, since counting begins with 0): | ||
+ | lcd.setCursor(0, | ||
+ | lcd.print(name); | ||
+ | } | ||
+ | |||
+ | void loop() { | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | **Aufgabe C5:** | ||
+ | |||
+ | <code c++> | ||
+ | /* | ||
+ | Connect Display: | ||
+ | * GND to ground | ||
+ | * VCC to 3.3V | ||
+ | * SCA to A4 | ||
+ | * SCL to A5 | ||
+ | */ | ||
+ | |||
+ | #include < | ||
+ | #include " | ||
+ | |||
+ | rgb_lcd lcd; | ||
+ | String s = " | ||
+ | |||
+ | void setup(){ | ||
+ | // set up the LCD's number of columns and rows: | ||
+ | lcd.begin(16, | ||
+ | } | ||
+ | |||
+ | void loop(){ | ||
+ | // set the cursor to column 0, line 1 | ||
+ | // (note: line 1 is the second row, since counting begins with 0): | ||
+ | lcd.setCursor(0, | ||
+ | lcd.print(s); | ||
+ | |||
+ | s = s + s[0]; // add first char to end of string ... | ||
+ | s.remove(0, | ||
+ | |||
+ | delay(500); | ||
} | } | ||
</ | </ | ||
Zeile 311: | Zeile 470: | ||
</ | </ | ||
- | ===== - Zusatzthemen ===== | + | ==== Aufgaben D - Poti & RGB-LED |
+ | === Aufgabe D1: RGB-LED === | ||
+ | |||
+ | Eine RGB-LED ist eine spezielle LED, die drei einzelne LED beinhaltet: eine rote, grüne und blaue. | ||
+ | Jede LED hat einen eigenen Eingang und einen gemeinsamen Ausgang. Damit kann jede Farbe über einen eigenen Pin gesteuert werden. Bedenke auch, dass jede dieser drei LED einen **eigenen Vorwiderstand** (also drei Stück!) benötigt! | ||
+ | |||
+ | Verbinde die RGB-LED korrekt an den Arduino an und schreibe einen Code, der alle 0.5s die Farbe ändert, es sollen mindestens drei verschiedene Farben verwendet werden, die sich dann periodisch wiederholen. | ||
+ | |||
+ | === Aufgabe D2: Potentiometer === | ||
+ | |||
+ | Verbinde ein Potentiometer mit dem Arduino und speichere den aktuellen Wert in einer Variablen. Nutze dann diesen Wert, um über einen anderen Pin Blinkdauer einer blinkenden LED einzustellen. Die Blinkdauer soll zwischen 0ms un d 200ms variieren. | ||
+ | |||
+ | *Tipp:* Verwende die `map(...)`-Funktion. | ||
+ | |||
+ | === Aufgabe D3: Helligkeit regulieren mit PWM === | ||
+ | |||
+ | Um die Helligkeit einer LED einstellen zu können, würde sich ein analoger Output-Pin anbieten, da dieser, im Gegensatz zu einem digitalen Output, auch Werte zwischen 0V und 5V annehmen kann. | ||
+ | Trotzdem wollen wir für diese Aufgabe die LED an einem digitalen Pin anschliessen. Um die Helligkeit einstellen zu können, so müssen wir auf einen Trick zurückgreifen: | ||
+ | Diesen Code kann man natürlich selbst schreiben. Einfacher aber ist es, wenn man die LED an einen PWM-Pin anschliesst (digitale Pins mit Tilde-Symbol). **PWM** steht für **Pulse Width Modulation**. Der Output wechselt dabei periodisch zwischen LOW und HIGH, wobei man die Breite des Pulses mit einer Zahl zwischen 0 und 255 angeben kann: `analogWrite(PIN_NR, | ||
+ | |||
+ | |||
+ | <nodisp 2> | ||
+ | |||
+ | ++++Lösungen D| | ||
+ | |||
+ | **Aufgabe D1:** | ||
+ | |||
+ | <code python> | ||
+ | </ | ||
+ | |||
+ | **Aufgabe D2:** | ||
+ | |||
+ | <code python> | ||
+ | /* | ||
+ | POTI: | ||
+ | - left to LOW | ||
+ | - right to HIGH | ||
+ | - center to PIN_POTI A0 | ||
+ | |||
+ | LED: PIN_LED -> LED -> Resistor 150 Ohm -> LOW | ||
+ | */ | ||
+ | |||
+ | #define PIN_LED 2 | ||
+ | #define PIN_POTI A0 | ||
+ | |||
+ | bool isOn = true; | ||
+ | |||
+ | void setup() { | ||
+ | Serial.begin(9600); | ||
+ | pinMode(PIN_LED, | ||
+ | } | ||
+ | |||
+ | void loop() { | ||
+ | int valPoti = analogRead(PIN_POTI); | ||
+ | int delayTime = map(valPoti, | ||
+ | Serial.println(delayTime); | ||
+ | digitalWrite(PIN_LED, | ||
+ | isOn = !isOn; | ||
+ | delay(delayTime); | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ++++ | ||
+ | |||
+ | </ | ||
+ | |||
+ | ===== - Zusatzthemen ===== | ||
Link zu Dossier von Simon Graf: | Link zu Dossier von Simon Graf: | ||
+ | {{ : | ||
+ | |||
+ | {{ : | ||
+ | {{ : | ||