Arduino: Taster auswerten und LEDs ansteuern: Unterschied zwischen den Versionen
(Die Seite wurde neu angelegt: „Kategorie:Arduino thumb|rigth|450px|Abb. 1: Lernset - Einsteiger Kit für Arduino '''Autor:''' Prof. Dr.-Ing. Schneider<br> '''Modul:''' Praxismodul I<br> '''Lehrveranstaltung:''' Mechatronik, Informatikpraktikum 1, 1. Semester, Wintersemester == Inhalt == * Einstieg in die Arduino Welt * Programmcode (Datentypen, Grundstruktur) * if-Verzweigung * LED, aktiver und pass…“) |
|||
(74 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
[[Kategorie:Arduino]] | [[Kategorie:Arduino]] | ||
[[Datei: | [[Datei:PulsierendeLED_350px.gif|thumb|rigth|450px|Abb. 1: Pulsierende LED]] | ||
'''Autor:''' [[Benutzer:Ulrich_Schneider| Prof. Dr.-Ing. Schneider]] | {| class="wikitable" | ||
'''Modul:''' Praxismodul I | |- | ||
''' | | '''Autor:''' || [[Benutzer:Ulrich_Schneider| Prof. Dr.-Ing. Schneider]] | ||
|- | |||
| '''Modul:''' || Praxismodul I | |||
|- | |||
| '''Lektion 3:''' || Mechatronik, Informatikpraktikum, 1. Semester, Wintersemester | |||
|} | |||
== Inhalt == | == Inhalt == | ||
* | * Programmierrichtlinien | ||
* | * Taster mittels Arduino auslesen, entprellen, Pull-Up/Pull-Down-Widerstand | ||
* Zähler inkrementieren | |||
* | * <code>switch..case</code>-Verzweigung | ||
* Ansteuerung einer RGB-LED | |||
* | |||
* | |||
== Lernziele== | == Lernziele== | ||
Nach Durchführung dieser Lektion | Nach Durchführung dieser Lektion | ||
* | * können Sie Quelltext entsprechend der Programmierrichtlinien schreiben. | ||
* | * einen Taster über eine Iterrupt-Leitung einlesen und entprellen. | ||
* können Sie | * können Sie mittels Taster und <code>switch..case</code>-Verzweigung eine LED in verschiedenen Helligkeiten ansteuern | ||
* eine RGB-LED in verschiedenen Farben ansteuern. | |||
* | |||
== Lernzielkontrolle == | == Lernzielkontrolle == | ||
# | # Wurde der Taster erfolgreich eingelesen und entprellt? | ||
# | # Wozu benötigt man einen Pull-Up/Pull-Down-Widerstand? | ||
# | # Wurde der Quelltext durch Header und Kommentare aufgewertet? | ||
# | # Welche Möglichkeiten gibt es einen Zähler zu in-/dekrementieren? | ||
# | # Wurde in Aufgabe 3.3 ein <code>switch...case</code> verwendet? | ||
# | # Welche Version der RGB-LED haben Sie verwendet (gemeinsame Anode oder Kathode)? | ||
# | # Wurden jedes Programm mittels PAP geplant? | ||
# | # Wurde auf <code>magic numbers</code> verzichtet? | ||
# | # Wurde die [[Medium:Programmierrichtlinie.pdf|Programmierrichtlinie]] eingehalten? | ||
'''Arbeitsergebnisse''' in SVN: <code> | '''Arbeitsergebnisse''' in SVN: <code>Lernzielkontrolle_Termin_03.pdf</code> | ||
{| role="presentation" class="wikitable mw-collapsible mw-collapsed" | |||
| <strong>Musterlösung 1 </strong> | |||
|- | |||
| | |||
* Studieren Sie den Artikel [[Arduino:_Interrupts|Interrupt Service Routine]]. | |||
* [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Demos/Arduino/DemoInterrupt/DemoInterrupt.ino SVN: DemoInterrupt.ino] | |||
|- | |||
|} | |||
{| role="presentation" class="wikitable mw-collapsible mw-collapsed" | |||
| <strong>Musterlösung 2 </strong> | |||
|- | |||
| | |||
'''Lösung 2 - <code>millis()</code>:''' [https://www.arduino.cc/en/Tutorial/BuiltInExamples/Debounce Beispiel, wie man einen Taster entprellt.] | |||
|- | |||
|} | |||
== Tutorials == | |||
* [https://www.arduino.cc/reference/de/ Arduino Befehlsübersicht] | |||
* [https://funduino.de/nr-5-taster-am-arduino Funduino: Taster am Arduino] | |||
* [https://funduino.de/nr-20-rgb-led Funduino: RGB LED ansteuern] | |||
* [[Arduino:_Interrupts|Schalter entprellen mit Interrupt Service Routine]] | |||
* [[Arduino:_Bibliothek_einbinden|Wiki: HSHL-Bibliothek einbinden]] | |||
* [[Medium:Programmierrichtlinie.pdf|Programmierrichtlinie für C]] | |||
== Demo == | |||
[https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Arduino/ArduinoLibOrdner/ArduinoUnoR3/examples/DemoInterrupt/DemoInterrupt.ino SVN: DemoInterrupt.ino] | |||
== Versuchsvorbereitung == | |||
# Binden Sie die [[Arduino:_Bibliothek_einbinden|HSHL-Bibliothek]] ein. | |||
# Studieren Sie den Artikel [[Arduino:_Interrupts|Interrupt Service Routine]]. | |||
# Studieren Sie das Demo [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Arduino/ArduinoLibOrdner/ArduinoUnoR3/examples/DemoInterrupt/DemoInterrupt.ino SVN: DemoInterrupt.ino]. | |||
# Studieren Sie das [[Arduino:_Taster_auswerten_und_LEDs_ansteuern#Tutorials|Tutorials]]. | |||
# Studieren Sie die [[Medium:Programmierrichtlinie.pdf|Programmierrichtlinie]]. | |||
# Planen Sie die Software via [[Software_Planung|PAP]]. | |||
# Beantworten Sie die [[Arduino:_Taster_auswerten_und_LEDs_ansteuern#Lernzielkontrolle|Lernzielkontrollfragen]]. | |||
# Sichern Sie Ihre Unterlagen in SVN. | |||
== Versuchsdurchführung == | == Versuchsdurchführung == | ||
=== Aufgabe | === Aufgabe 3.1: Lernzielkontrolle === | ||
Präsentieren Sie Prof. Schneider das Ergebnis der Lernzielkontrolle. | Präsentieren Sie Prof. Schneider das Ergebnis der Lernzielkontrolle. | ||
'''Arbeitsergebnisse''' in SVN: <code> | '''Arbeitsergebnisse''' in SVN: <code>Lernzielkontrolle_Termin_03.pdf</code> | ||
---- | |||
=== Aufgabe | === Aufgabe 3.2: Eine LED per Tastendruck aktivieren === | ||
Eine LED soll für 5 Sekunden leuchten, wenn ein Taster betätigt wurde. | |||
# Lesen Sie einen Tasterdruck via Interrupt-Service-Routine ein und speichern Sie diesen in die globale Variable <code>TasterStatus_bit</code>. | |||
# Werten Sie die Variable <code>TasterStatus_bit</code> im <code>void loop()</code> aus. | |||
# Geben Sie den Wert der Variable <code>TasterStatus_bit</code> im seriellen Monitor aus. | |||
# Wird der Taster gedrückt, soll eine LED für 5 Sekunden leuchten und dann ausgehen. | |||
'''Nützliche Befehle''': <code>pinmode(), digitalWrite(), delay</code> | '''Nützliche Befehle''': [https://docs.arduino.cc/language-reference/de/funktionen/digital-io/pinMode/ <code>pinmode()</code>], [https://docs.arduino.cc/language-reference/de/funktionen/digital-io/digitalread/ <code>digitalRead()</code>], [https://docs.arduino.cc/language-reference/de/funktionen/digital-io/digitalwrite/ <code>digitalWrite()</code>], [https://docs.arduino.cc/language-reference/de/funktionen/time/delay/ <code>delay</code>], [https://docs.arduino.cc/language-reference/de/struktur/control-structure/if/ <code>if..else</code>], [https://docs.arduino.cc/language-reference/de/funktionen/external-interrupts/attachInterrupt/ <code>attachInterrupt</code>], [https://docs.arduino.cc/language-reference/de/funktionen/external-interrupts/digitalPinToInterrupt/ <code>digitalPinToInterrupt</code>], [https://docs.arduino.cc/language-reference/de/funktionen/time/millis/ <code>millis()</code>] | ||
'''Arbeitsergebnisse''' in SVN: <code> | '''Arbeitsergebnisse''' in SVN: <code>TasterSchaltetLED.ino</code> | ||
{| role="presentation" class="wikitable mw-collapsible mw-collapsed" | |||
| <strong>Teillösung </strong> | |||
|- | |||
| | |||
[https://funduino.de/nr-5-taster-am-arduino Eine LED per Tastendruck aktivieren] | |||
|- | |||
|} | |||
{| role="presentation" class="wikitable mw-collapsible mw-collapsed" | |||
| <strong>[https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Arduino/ArduinoLibOrdner/ArduinoUnoR3/examples/DemoInterrupt/DemoInterrupt.ino <code>DemoInterrupt.ino</code>] </strong> | |||
|- | |||
| | |||
<syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:larger"> | |||
//***************************************************************************** | |||
// Voraussetzungen: Taster an D2 gegen GND mit 10kΩ Pulldown-Widerstand | |||
//***************************************************************************** | |||
= | const byte INTERRUPT_PIN_u8 = 2; // Interrupt an Port D9 gegen GND | ||
const byte LED_PIN_u8 = 13; // LED auf dem Arduino an Pin 13 | |||
volatile byte LEDZustand_u8 = LOW; // Definiere eine globale volatile Variable für den Status der LED | |||
// Eine Variable sollte als volatile deklariert werden, wenn sie von irgendwo anders geändert werden kann außer in dem Codeteil, in dem sie auftaucht (z.B. ISR). | |||
volatile unsigned long alteZeit_u32=0, entprellZeit_u32=20; // Variablen für das Entprellen des Schalters, Entprellzeit 20 ms | |||
void setup(){ | |||
/* Einmalige Initialisierung */ | |||
pinMode(LED_PIN_u8, OUTPUT); // Legt LED_PIN als Ausgabe fest | |||
pinMode(INTERRUPT_PIN_u8, INPUT_PULLUP); // Lege den Interruptpin als Eingang mit Pullupwiderstand fest | |||
'' | // Lege die ISR ISRwechselLED auf den Interruptpin mit Modus 'CHANGE': | ||
// Bei wechselnder Flanke auf dem Interruptpin --> Führe die ISR aus | |||
attachInterrupt(digitalPinToInterrupt(INTERRUPT_PIN_u8), ISRwechselLED, RISING); | |||
} | |||
void loop(){ | |||
delay(10000); // Kann der Interrupt das 10s Delay unterbrechen? | |||
} | |||
void ISRwechselLED() { | |||
if((millis() - alteZeit_u32) > entprellZeit_u32) { // innerhalb der entprellZeit nichts machen | |||
LEDZustand_u8 = !LEDZustand_u8; // Invertierung des Zustandes, An wird aus | |||
digitalWrite(LED_PIN_u8, LEDZustand_u8); // LED ansteuern | |||
alteZeit_u32 = millis(); // letzte Schaltzeit merken | |||
} | |||
} | |||
</syntaxhighlight> | |||
|- | |||
|} | |||
---- | |||
=== Aufgabe 3.3: Auf Knopfdruck dimmen === | |||
Ein Taster dimmt eine LED: | |||
# Tastendruck: an, 100% Lichtleistung | |||
# Tastendruck: an, 50% Lichtleistung | |||
# Tastendruck: aus 0% | |||
'''Nützliche Befehle''': <code>pinmode(), | '''Nützliche Befehle''': [https://docs.arduino.cc/language-reference/de/funktionen/digital-io/pinMode/ <code>pinmode()</code>], [https://docs.arduino.cc/language-reference/de/funktionen/analog-io/analogWrite/ <code>analogWrite()</code>], <code>delay()</code>, [https://docs.arduino.cc/language-reference/de/struktur/control-structure/switchCase/ <code>switch..case</code>] | ||
'''Arbeitsergebnisse''' in SVN: <code> | '''Arbeitsergebnisse''' in SVN: <code>dimmeLED.ino</code> | ||
{| role="presentation" class="wikitable mw-collapsible mw-collapsed" | |||
</ | | <strong>Tipp 1 </strong> | ||
|- | |||
| | |||
Nutzen Sie Ausgangsprogramm <code>PulsierendeLED.ino</code> aus Aufgabe 2.3 und nutzen Sie den Hardwareaufbau aus Aufgabe 3.2. | |||
|- | |||
|} | |||
{| role="presentation" class="wikitable mw-collapsible mw-collapsed" | |||
| <strong>[https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Arduino/ArduinoLibOrdner/ArduinoUnoR3/examples/DemoSwitchCase/DemoSwitchCase.ino <code>DemoSwitchCase.ino</code>] </strong> | |||
|- | |||
|Eine Anleitung zur Verwendung von <code>switch..case</code> findet sich in der [https://www.arduino.cc/reference/en/language/structure/control-structure/switchcase/ Arduino-Dokumentation]. | |||
=== Aufgabe | Demo-Quelltext [https://svn.hshl.de/svn/Informatikpraktikum_1/trunk/Arduino/ArduinoLibOrdner/ArduinoUnoR3/examples/DemoSwitchCase/DemoSwitchCase.ino <code>DemoSwitchCase.ino</code>] | ||
<syntaxhighlight lang="c" style="background-color: #EFF1C1; font-size:larger"> | |||
//***************************************************************************** | |||
// Modul : DemoSwitchCase * | |||
// * | |||
// Datum : 17.10.2022 * | |||
// * | |||
// Funktion : Demo für eine switch...case-verzweigung * | |||
// * | |||
// Implementation : Arduino IDE vers. 2.0.0 * | |||
// * | |||
// Hardware : Arduino UNO R3 * | |||
// * | |||
// Author : (c) 2022, Dr. Ulrich Schneider * | |||
// * | |||
// Letzte Änderung : 17.10.2022 * | |||
// * | |||
//***************************************************************************** | |||
byte Cnt_u8 =0; // Zählvariable wird angelegt und initialisiert | |||
void setup() { | |||
Serial.begin(9600); // Seriellen Monitor initialisieren, 9600 Baud | |||
} | |||
void loop() { | |||
Cnt_u8++; // Zähler inkrementieren | |||
if (Cnt_u8>2) Cnt_u8=0; // Überlauf ab 2: 012012... | |||
switch (Cnt_u8) | |||
{ | |||
case 0: | |||
Serial.println("Fall 0"); | |||
break; | |||
case 1: | |||
Serial.println("Fall 1"); | |||
break; | |||
case 2: | |||
Serial.println("Fall 2"); | |||
break; | |||
default: | |||
// wird in diesem Beispiel nicht erreicht | |||
break; | |||
} | |||
delay(500); // ms für die Darstellung | |||
} | |||
end; | |||
</syntaxhighlight> | |||
|- | |||
|} | |||
---- | |||
=== Aufgabe 3.4: Ansteuerung einer farbigen LED === | |||
Eine RGB-LED soll in verschiedenen Farben leuchten. Auf Druck des Tasters soll die RGB-LED in folgenden Modi betrieben werden: | |||
# Weiß | |||
# Rot | |||
# Blau | |||
# Grün | |||
# Langsamer Übergang durch das gesamte Farbspektrum (Einschlaflicht) | |||
'''Nützliche Befehle''': <code>pinmode(), analogWrite(), delay()</code> | |||
'''Arbeitsergebnisse''' in SVN: <code>steureFarbigeLED.ino</code> | |||
{| role="presentation" class="wikitable mw-collapsible mw-collapsed" | |||
| <strong>Teillösung </strong> | |||
|- | |||
| | |||
[https://funduino.de/nr-20-rgb-led RGB-LED ansteuern] | |||
|- | |||
|} | |||
---- | |||
=== Aufgabe 3.5: Nachhaltige Doku === | |||
Sichern Sie alle Ergebnisse mit beschreibendem Text (<code>message</code>) in SVN. | Sichern Sie alle Ergebnisse mit beschreibendem Text (<code>message</code>) in SVN. | ||
* Wurden die Regeln für den Umgang mit SVN eingehalten? | * Wurden die Regeln für den Umgang mit SVN eingehalten? | ||
* Wurde die [[Medium:Programmierrichtlinie.pdf|Programmierrichtlinie]] eingehalten? | |||
* Wurde nachhaltig dokumentiert? | * Wurde nachhaltig dokumentiert? | ||
* Haben die Programme einen Header? | * Haben die Programme einen Header? | ||
Zeile 89: | Zeile 243: | ||
'''Arbeitsergebnis''' in SVN: <code>SVN Log</code> | '''Arbeitsergebnis''' in SVN: <code>SVN Log</code> | ||
== | == FAQ == | ||
* Muss ich die Lösungen selbst programmieren? '''Ja, nur Eigenleistung wird bewertet.''' | |||
* Darf ich die Musterlösung 1:1 kopieren und als meine Leistung ausgeben? '''Nein, das ist ein [[Software_Plagiat|Plagiat]] und wird als Täuschungsversuch gewertet.''' | |||
== Literatur == | == Literatur == | ||
# Brühlmann, T.: ''Arduino Praxiseinstieg''. Heidelberg: mitp, 4. Auflage 2019. ISBN 978-3-7475-0056-9. URL: [https://hshl.bsz-bw.de/cgi-bin/koha/opac-detail.pl?biblionumber=125816&query_desc=kw%2Cwrdl%3A%20arduino HSHL-Bib], [https://learning.oreilly.com/library/view/arduino-praxiseinstieg/9783747500569/ O'Reilly-URL] | # Brühlmann, T.: ''Arduino Praxiseinstieg''. Heidelberg: mitp, 4. Auflage 2019. ISBN 978-3-7475-0056-9. URL: [https://hshl.bsz-bw.de/cgi-bin/koha/opac-detail.pl?biblionumber=125816&query_desc=kw%2Cwrdl%3A%20arduino HSHL-Bib], [https://learning.oreilly.com/library/view/arduino-praxiseinstieg/9783747500569/ O'Reilly-URL] | ||
# Brühlmann, T.: ''Sensoren im Einsatz mit Arduino''. Frechen : mitp Verlag, 1. Auflage 2017. ISBN: 9783958451520. URL: [https://hshl.bsz-bw.de/cgi-bin/koha/opac-detail.pl?biblionumber=130719&query_desc=kw%2Cwrdl%3A%20Br%C3%BChlmann HSHL-Bib], [https://learning.oreilly.com/library/view/sensoren-im-einsatz/9783958451520/?ar O'Reilly] | # Brühlmann, T.: ''Sensoren im Einsatz mit Arduino''. Frechen : mitp Verlag, 1. Auflage 2017. ISBN: 9783958451520. URL: [https://hshl.bsz-bw.de/cgi-bin/koha/opac-detail.pl?biblionumber=130719&query_desc=kw%2Cwrdl%3A%20Br%C3%BChlmann HSHL-Bib], [https://learning.oreilly.com/library/view/sensoren-im-einsatz/9783958451520/?ar O'Reilly] | ||
# Snieders, R.: ''ARDUINO lernen''. Nordhorn: 8. Auflage 2022. URL: [https://funduino.de/vorwort https://funduino.de/vorwort] | # Snieders, R.: ''ARDUINO lernen''. Nordhorn: 8. Auflage 2022. URL: [https://funduino.de/vorwort https://funduino.de/vorwort] | ||
# Schneider, U.: ''Programmierrichtlinie für für die Erstellung von Software in C.'' Lippstadt, 1. Auflage 2022. [[Medium:Programmierrichtlinie.pdf|PDF-Dokument (212 kb)]] | |||
---- | ---- | ||
→ zurück zum Hauptartikel:[[ | → Termine [[Einführungsveranstaltung Informatikpraktikum 1|0]] [[Einarbeitung_in_die_Versionsverwaltung_SVN|1]] [[Einstieg_in_die_Welt_des_Arduino|2]] [[Arduino: Taster auswerten und LEDs ansteuern|3]] [[Arduino:_Sensoren_einlesen|4]] [[Arduino:_Infrarotsensor_einlesen|5]] [[Arduino:_Infrarotsensor_entstören|6]] [[Arduino:_Programmier-Challenge_I_WS_WS_24/25|7]] [[Arduino:_IR-Theremin|8]] [[Arduino:_Aktoren|9]] [[Arduino:_LCD_Display_mit_I2C_Schnittstelle|10]] [[Arduino:_Ultraschall_Entfernungsmessung|11]] [[Arduino:_Ultraschallsensor_entstören|12]] [[Arduino:_Temperaturmessung_mit_NTC_und_PTC|13]] [[Arduino:_Programmier-Challenge_II_WS_WS_24/25|14]]<br> | ||
→ zurück zum Hauptartikel: [[Arduino_Praxiseinstieg_WS_24/25|Arduino Praxiseinstieg]] |
Aktuelle Version vom 16. Oktober 2024, 13:38 Uhr
Autor: | Prof. Dr.-Ing. Schneider |
Modul: | Praxismodul I |
Lektion 3: | Mechatronik, Informatikpraktikum, 1. Semester, Wintersemester |
Inhalt
- Programmierrichtlinien
- Taster mittels Arduino auslesen, entprellen, Pull-Up/Pull-Down-Widerstand
- Zähler inkrementieren
switch..case
-Verzweigung- Ansteuerung einer RGB-LED
Lernziele
Nach Durchführung dieser Lektion
- können Sie Quelltext entsprechend der Programmierrichtlinien schreiben.
- einen Taster über eine Iterrupt-Leitung einlesen und entprellen.
- können Sie mittels Taster und
switch..case
-Verzweigung eine LED in verschiedenen Helligkeiten ansteuern - eine RGB-LED in verschiedenen Farben ansteuern.
Lernzielkontrolle
- Wurde der Taster erfolgreich eingelesen und entprellt?
- Wozu benötigt man einen Pull-Up/Pull-Down-Widerstand?
- Wurde der Quelltext durch Header und Kommentare aufgewertet?
- Welche Möglichkeiten gibt es einen Zähler zu in-/dekrementieren?
- Wurde in Aufgabe 3.3 ein
switch...case
verwendet? - Welche Version der RGB-LED haben Sie verwendet (gemeinsame Anode oder Kathode)?
- Wurden jedes Programm mittels PAP geplant?
- Wurde auf
magic numbers
verzichtet? - Wurde die Programmierrichtlinie eingehalten?
Arbeitsergebnisse in SVN: Lernzielkontrolle_Termin_03.pdf
Musterlösung 1 |
|
Musterlösung 2 |
Lösung 2 - |
Tutorials
- Arduino Befehlsübersicht
- Funduino: Taster am Arduino
- Funduino: RGB LED ansteuern
- Schalter entprellen mit Interrupt Service Routine
- Wiki: HSHL-Bibliothek einbinden
- Programmierrichtlinie für C
Demo
Versuchsvorbereitung
- Binden Sie die HSHL-Bibliothek ein.
- Studieren Sie den Artikel Interrupt Service Routine.
- Studieren Sie das Demo SVN: DemoInterrupt.ino.
- Studieren Sie das Tutorials.
- Studieren Sie die Programmierrichtlinie.
- Planen Sie die Software via PAP.
- Beantworten Sie die Lernzielkontrollfragen.
- Sichern Sie Ihre Unterlagen in SVN.
Versuchsdurchführung
Aufgabe 3.1: Lernzielkontrolle
Präsentieren Sie Prof. Schneider das Ergebnis der Lernzielkontrolle.
Arbeitsergebnisse in SVN: Lernzielkontrolle_Termin_03.pdf
Aufgabe 3.2: Eine LED per Tastendruck aktivieren
Eine LED soll für 5 Sekunden leuchten, wenn ein Taster betätigt wurde.
- Lesen Sie einen Tasterdruck via Interrupt-Service-Routine ein und speichern Sie diesen in die globale Variable
TasterStatus_bit
. - Werten Sie die Variable
TasterStatus_bit
imvoid loop()
aus. - Geben Sie den Wert der Variable
TasterStatus_bit
im seriellen Monitor aus. - Wird der Taster gedrückt, soll eine LED für 5 Sekunden leuchten und dann ausgehen.
Nützliche Befehle: pinmode()
, digitalRead()
, digitalWrite()
, delay
, if..else
, attachInterrupt
, digitalPinToInterrupt
, millis()
Arbeitsergebnisse in SVN: TasterSchaltetLED.ino
Teillösung |
DemoInterrupt.ino
|
//*****************************************************************************
// Voraussetzungen: Taster an D2 gegen GND mit 10kΩ Pulldown-Widerstand
//*****************************************************************************
const byte INTERRUPT_PIN_u8 = 2; // Interrupt an Port D9 gegen GND
const byte LED_PIN_u8 = 13; // LED auf dem Arduino an Pin 13
volatile byte LEDZustand_u8 = LOW; // Definiere eine globale volatile Variable für den Status der LED
// Eine Variable sollte als volatile deklariert werden, wenn sie von irgendwo anders geändert werden kann außer in dem Codeteil, in dem sie auftaucht (z.B. ISR).
volatile unsigned long alteZeit_u32=0, entprellZeit_u32=20; // Variablen für das Entprellen des Schalters, Entprellzeit 20 ms
void setup(){
/* Einmalige Initialisierung */
pinMode(LED_PIN_u8, OUTPUT); // Legt LED_PIN als Ausgabe fest
pinMode(INTERRUPT_PIN_u8, INPUT_PULLUP); // Lege den Interruptpin als Eingang mit Pullupwiderstand fest
// Lege die ISR ISRwechselLED auf den Interruptpin mit Modus 'CHANGE':
// Bei wechselnder Flanke auf dem Interruptpin --> Führe die ISR aus
attachInterrupt(digitalPinToInterrupt(INTERRUPT_PIN_u8), ISRwechselLED, RISING);
}
void loop(){
delay(10000); // Kann der Interrupt das 10s Delay unterbrechen?
}
void ISRwechselLED() {
if((millis() - alteZeit_u32) > entprellZeit_u32) { // innerhalb der entprellZeit nichts machen
LEDZustand_u8 = !LEDZustand_u8; // Invertierung des Zustandes, An wird aus
digitalWrite(LED_PIN_u8, LEDZustand_u8); // LED ansteuern
alteZeit_u32 = millis(); // letzte Schaltzeit merken
}
}
|
Aufgabe 3.3: Auf Knopfdruck dimmen
Ein Taster dimmt eine LED:
- Tastendruck: an, 100% Lichtleistung
- Tastendruck: an, 50% Lichtleistung
- Tastendruck: aus 0%
Nützliche Befehle: pinmode()
, analogWrite()
, delay()
, switch..case
Arbeitsergebnisse in SVN: dimmeLED.ino
Tipp 1 |
Nutzen Sie Ausgangsprogramm |
DemoSwitchCase.ino
|
Eine Anleitung zur Verwendung von switch..case findet sich in der Arduino-Dokumentation.
Demo-Quelltext //*****************************************************************************
// Modul : DemoSwitchCase *
// *
// Datum : 17.10.2022 *
// *
// Funktion : Demo für eine switch...case-verzweigung *
// *
// Implementation : Arduino IDE vers. 2.0.0 *
// *
// Hardware : Arduino UNO R3 *
// *
// Author : (c) 2022, Dr. Ulrich Schneider *
// *
// Letzte Änderung : 17.10.2022 *
// *
//*****************************************************************************
byte Cnt_u8 =0; // Zählvariable wird angelegt und initialisiert
void setup() {
Serial.begin(9600); // Seriellen Monitor initialisieren, 9600 Baud
}
void loop() {
Cnt_u8++; // Zähler inkrementieren
if (Cnt_u8>2) Cnt_u8=0; // Überlauf ab 2: 012012...
switch (Cnt_u8)
{
case 0:
Serial.println("Fall 0");
break;
case 1:
Serial.println("Fall 1");
break;
case 2:
Serial.println("Fall 2");
break;
default:
// wird in diesem Beispiel nicht erreicht
break;
}
delay(500); // ms für die Darstellung
}
end;
|
Aufgabe 3.4: Ansteuerung einer farbigen LED
Eine RGB-LED soll in verschiedenen Farben leuchten. Auf Druck des Tasters soll die RGB-LED in folgenden Modi betrieben werden:
- Weiß
- Rot
- Blau
- Grün
- Langsamer Übergang durch das gesamte Farbspektrum (Einschlaflicht)
Nützliche Befehle: pinmode(), analogWrite(), delay()
Arbeitsergebnisse in SVN: steureFarbigeLED.ino
Teillösung |
Aufgabe 3.5: Nachhaltige Doku
Sichern Sie alle Ergebnisse mit beschreibendem Text (message
) in SVN.
- Wurden die Regeln für den Umgang mit SVN eingehalten?
- Wurde die Programmierrichtlinie eingehalten?
- Wurde nachhaltig dokumentiert?
- Haben die Programme einen Header?
- Wurden der Quelltext umfangreich kommentiert?
- Wurden die PAPs erstellt und abgelegt? Passen die PAPs 100% zum Programm?
Arbeitsergebnis in SVN: SVN Log
FAQ
- Muss ich die Lösungen selbst programmieren? Ja, nur Eigenleistung wird bewertet.
- Darf ich die Musterlösung 1:1 kopieren und als meine Leistung ausgeben? Nein, das ist ein Plagiat und wird als Täuschungsversuch gewertet.
Literatur
- Brühlmann, T.: Arduino Praxiseinstieg. Heidelberg: mitp, 4. Auflage 2019. ISBN 978-3-7475-0056-9. URL: HSHL-Bib, O'Reilly-URL
- Brühlmann, T.: Sensoren im Einsatz mit Arduino. Frechen : mitp Verlag, 1. Auflage 2017. ISBN: 9783958451520. URL: HSHL-Bib, O'Reilly
- Snieders, R.: ARDUINO lernen. Nordhorn: 8. Auflage 2022. URL: https://funduino.de/vorwort
- Schneider, U.: Programmierrichtlinie für für die Erstellung von Software in C. Lippstadt, 1. Auflage 2022. PDF-Dokument (212 kb)
→ Termine 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
→ zurück zum Hauptartikel: Arduino Praxiseinstieg