Arduino Crash Kurs: Unterschied zwischen den Versionen
(→If-clauses) |
|||
(74 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
+ | |||
+ | [[Image:Arduino_led.png|150px]] | ||
+ | [[Image:Arduino_relay.png|150px]] | ||
+ | [[Image:Arduino_switch.png|150px]] | ||
+ | [[Image:Arduino_potentiometer.jpg|150px]] | ||
+ | [[Image:Arduino_delays.jpg|150px]] | ||
+ | [[Image:Arduino_keyboard.png|150px]] | ||
+ | [[Image:Arduino_bluetooth.jpg|150px]] | ||
+ | |||
+ | |||
+ | So wie man für das Autofahren die Grundlagen bei der Fahrschule erlernt, kann man auch die Grundlagen der Programmierung für den Arduino erlernen wenn man ihn einsetzen will. Dieser Kurs kann in kurzer Zeit durchgearbeitet werden und man ist danach mit der Arduino-Programmierung vertraut. | ||
+ | |||
= 1. Dein erstes Programm = | = 1. Dein erstes Programm = | ||
+ | |||
+ | Wir steuern eine LED an. Wir verwenden dazu die interne Arduino LED (Pin 13), ihr braucht also nichts weiter anschliessen. Die Grafik dient nur als Beispiel falls ihr eine externe LED anschliessen wollt. Bitte nur mit Widerstand (300 Ohm) anschliessen, um den Strom zu begrenzen. | ||
+ | |||
+ | [[Image:Arduino_led.png|400px]] | ||
Die setup-Funktion wird beim Programmstart einmal durchlaufen. Hier kann man Dinge durchführen, die nur einmal nach dem Arduino-Reset ausgeführt werden sollen. Die Loop-Funktion hingegen wird unendlich oft durchlaufen. | Die setup-Funktion wird beim Programmstart einmal durchlaufen. Hier kann man Dinge durchführen, die nur einmal nach dem Arduino-Reset ausgeführt werden sollen. Die Loop-Funktion hingegen wird unendlich oft durchlaufen. | ||
Zeile 34: | Zeile 50: | ||
digitalWrite(13, LOW); // Pin 13 soll auf LOW ( 0 Volt/Masse ) gesetzt werden | digitalWrite(13, LOW); // Pin 13 soll auf LOW ( 0 Volt/Masse ) gesetzt werden | ||
delay(1000); // Warte 1000 Millisekunden (= 1 Sekunde) | delay(1000); // Warte 1000 Millisekunden (= 1 Sekunde) | ||
+ | |||
+ | 4. Starte Dein Programm über die Arduino IDE und schaue ob die Arduino LED blinkt. | ||
= 1. Lösung = | = 1. Lösung = | ||
Zeile 105: | Zeile 123: | ||
</blockquote> | </blockquote> | ||
− | = 3. Ein Taster = | + | = 3. Ein Relais ansteuern = |
+ | |||
+ | Genauso wie ihr die LED angsteuert habt, könnt ihr auch ein Relais ansteuern. | ||
+ | |||
+ | [[Image:Arduino_relay.png|500px]] | ||
+ | |||
+ | Aufgabe: schaltet anstelle der LED das Relais ein und aus | ||
+ | |||
+ | = 4. Ein Taster = | ||
Wir schließen einen Taster an den Arduino. Die LED soll nur dann auslösen wenn der Taster gedrückt wird. | Wir schließen einen Taster an den Arduino. Die LED soll nur dann auslösen wenn der Taster gedrückt wird. | ||
+ | |||
+ | [[Image:Arduino_switch.png|400px]] | ||
+ | [[Image:Arduino_pullup.png|600px]] | ||
+ | |||
Aufgabe: | Aufgabe: | ||
− | 1. Schliesse den Taster an Pin | + | 1. Schliesse den Taster an Pin 2 an und definiere den Pin: |
− | int pinSwitch = | + | int pinSwitch = 2; // Pin für Taster definieren |
2. Baue folgende Zeile in die setup-Funktion ein: | 2. Baue folgende Zeile in die setup-Funktion ein: | ||
Zeile 120: | Zeile 150: | ||
3. Baue folgende Zeilen in die loop-Funktion ein: | 3. Baue folgende Zeilen in die loop-Funktion ein: | ||
− | int zustand = digitalRead(pinSwitch); // Taster in Variable "zustand" einlesen | + | int zustand = !digitalRead(pinSwitch); // Taster in Variable "zustand" einlesen und invertieren (aus LOW wird HIGH und umgekehrt) |
Serial.print("Taster Zustand: "); | Serial.print("Taster Zustand: "); | ||
Zeile 128: | Zeile 158: | ||
delay(1000); | delay(1000); | ||
− | = | + | = 4. Lösung = |
<blockquote style="background-color: lightgrey; border: solid thin grey;"> | <blockquote style="background-color: lightgrey; border: solid thin grey;"> | ||
<pre> | <pre> | ||
− | int pinSwitch = | + | int pinSwitch = 2; // Pin für Taster |
int pinLED = 13; // Pin für LED | int pinLED = 13; // Pin für LED | ||
Zeile 143: | Zeile 173: | ||
void loop() | void loop() | ||
{ | { | ||
− | int zustand = digitalRead(pinSwitch); // Taster in Variable einlesen | + | int zustand = !digitalRead(pinSwitch); // Taster in Variable einlesen und invertieren (aus LOW wird HIGH und umgekehrt) |
Serial.print("Taster ist "); | Serial.print("Taster ist "); | ||
Zeile 157: | Zeile 187: | ||
Unser Programm soll zwei unterschiedliche Zweige bekommen. Wir lösen dies durch eine Abfrage. | Unser Programm soll zwei unterschiedliche Zweige bekommen. Wir lösen dies durch eine Abfrage. | ||
+ | |||
+ | [[Image:Arduino_if_else.png]] | ||
Aufgabe: | Aufgabe: | ||
Zeile 162: | Zeile 194: | ||
if (zustand == HIGH) | if (zustand == HIGH) | ||
+ | { | ||
Serial.println( "Der Schalter ist AUS" ); | Serial.println( "Der Schalter ist AUS" ); | ||
+ | } | ||
else | else | ||
− | Serial.println( "Der Schalter ist EIN" ); | + | { |
− | + | Serial.println( "Der Schalter ist EIN" ); | |
+ | } | ||
− | = | + | = 6. Schleifen = |
Mit Schleifen können wir Befehle wiederholen. | Mit Schleifen können wir Befehle wiederholen. | ||
+ | |||
+ | [[Image:Arduino_loops.jpg]] | ||
+ | |||
+ | Aufgabe: | ||
1. Baue folgende Schleife in die loop-Funktion ein: | 1. Baue folgende Schleife in die loop-Funktion ein: | ||
Zeile 179: | Zeile 218: | ||
delay(1000); | delay(1000); | ||
} | } | ||
− | |||
− | = | + | = 7. Potentiometer = |
− | + | ||
− | + | Ein Potentiometer arbeitet analog. Wir nutzen den Analog-zu-digital Konverter (ADC), um aus analogen Eingangssignalen digitale zu machen. | |
− | + | ||
− | + | ||
− | + | ||
− | + | [[Image:Arduino_potentiometer.jpg]] | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | Aufgabe: | |
− | + | ||
− | + | 1. Schliesse das Poti an den Arduino Pin A0 an. | |
− | + | Pin 1: Masse | |
− | Serial.println( | + | Pin 2: A0 |
− | // | + | Pin 3: +5V |
− | + | ||
− | + | [[Image:Arduino_poti_circuit.png]] | |
− | + | ||
− | + | ||
− | + | 2. Konfiguriere den Potentiometer-Pin als Eingang: | |
+ | |||
+ | int pinPoti = A0; | ||
+ | pinMode(pinA0, INPUT); | ||
+ | |||
+ | |||
+ | 3. Lese das Potentiometer in eine Variable ein: | ||
+ | |||
+ | int zustand = analogRead( pinPoti ); | ||
+ | |||
+ | Serial.println(zustand); | ||
+ | |||
+ | = 8. Zeit und Verzögerungen = | ||
+ | |||
+ | Eine LED soll max. 3 Sekunden leuchten und zusätzlich über einen Taster sofort abgestellt werden können. | ||
+ | |||
+ | Die abgelaufene Zeit seit Programmstart kann mit der Funktion "millis" abgefragt werden. Sie liefert Millisekunden zurück. | ||
+ | |||
+ | [[Image:Arduino_delays.jpg]] | ||
+ | |||
+ | Aufgabe: | ||
+ | |||
+ | 1. Baue folgende Zeilen in Dein Programm ein: | ||
+ | |||
+ | if (millis() >= 3000) digitalWrite(pinLED, LOW); | ||
+ | |||
+ | if (digitalRead(pinSwitch)==LOW) digitalWrite(pinLED, LOW); | ||
+ | |||
+ | 2. Diesmal soll die LED nur beim loslassen zeitverzögert mit 3 Sekunden wieder einschalten. Tipp: benutze eine Variable um die Zeit der LED-Einschaltung zu speichern. | ||
+ | |||
+ | = 8. Lösung = | ||
+ | |||
+ | unsigned long zeit; // Variable soll Zeit für die LED-Einschaltung speichern | ||
+ | |||
+ | if (digitalRead(pinSwitch)==LOW) | ||
+ | { | ||
+ | // Taster gedrückt | ||
+ | zeit = millis() + 3000; // Zeit für LED-Einschalten berechnen und in Variable speichern | ||
+ | digitalWrite(pinLED, LOW); | ||
+ | } | ||
+ | else { | ||
+ | // Taster losgelassen | ||
+ | if (millis() >= zeit) | ||
+ | { | ||
+ | // Zeit zum Einschalten erreicht | ||
+ | digitalWrite(pinLED, HIGH); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | = 9. serielle Tastatur = | ||
+ | |||
+ | Eine Taste (Taste 'L') auf der PC Tastatur soll die Arduino LED ein- und ausschalten. | ||
+ | |||
+ | [[Image:Arduino_keyboard.png|200px]] | ||
+ | |||
+ | Aufgabe: | ||
+ | |||
+ | 1. Baue folgende Zeilen in Dein Programm ein: | ||
+ | |||
+ | boolean zustand = false; // Zustandsvariable für unsere LED | ||
+ | |||
+ | if (Serial.available()) | ||
+ | { | ||
+ | char key = Serial.read(); | ||
+ | Serial.print("Du hast gedrückt: "); | ||
+ | Serial.println(key); | ||
+ | if (key == 'l') | ||
+ | { | ||
+ | zustand = !zustand; // Zustand invertieren (aus LOW wird HIGH und aus HIGH wird LOW) | ||
+ | digitalWrite( pinLED, zustand ); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | 2. Erweitere Dein Programm um die Abfrage weiterer Tasten: | ||
+ | |||
+ | switch (key){ | ||
+ | case 'l': zustand = !zustand; | ||
+ | digitalWrite( pinLED, zustand ); | ||
+ | break; | ||
+ | |||
+ | case 't': Serial.printl("text"); | ||
+ | break; | ||
+ | } | ||
+ | |||
+ | = 10. Bluetooth / pfodApp = | ||
+ | |||
+ | Wir wollen ein Menü (mit 2 Menüpunkten) programmieren welches man per Bluetooth (pfodApp) bedienen kann. | ||
+ | |||
+ | [Menu] | ||
+ | Zeit: 3945 | ||
+ | Punkt1 | ||
+ | Punkt2 | ||
+ | |||
+ | [[Image:Arduino_bluetooth.jpg|800px]] | ||
+ | [[Image:Arduino_string.png|400px]] | ||
+ | |||
+ | Aufgabe: | ||
+ | |||
+ | 1. Schliesse das HC-05-Modul wie gezeigt an den Arduino Mega an (ohne State- und Key-Leitungen). | ||
+ | |||
+ | 2. Lade folgendes Programm in den Arduino: | ||
+ | |||
+ | String cmd; // Diese Zeichenkette soll später das vollständige Menü-Kommando enthalten | ||
+ | |||
+ | void setup() | ||
+ | { | ||
+ | Serial.begin(115200); // serielle Verbindung zum PC konfigurieren | ||
+ | Serial1.begin(19200); // serielle Verbindung zum HC-05 Modul konfigurieren | ||
+ | } | ||
+ | |||
+ | // Das Menü zum HC-05 Modul schicken | ||
+ | void sendMainMenu(boolean update) | ||
+ | { | ||
+ | if (update) Serial1.print("{:"); | ||
+ | else { | ||
+ | Serial1.print("{.Menu`1000"); | ||
+ | } | ||
+ | Serial1.print("|mn0~Zeit "); | ||
+ | Serial1.print(millis()); | ||
+ | Serial1.print("|mn1~Punkt1 "); | ||
+ | Serial1.print("|mn2~Punkt2 "); | ||
+ | Serial1.println("}"); | ||
+ | } | ||
+ | |||
+ | // Auf Menüauswahl reagieren | ||
+ | void processMainMenu(String cmd) | ||
+ | { | ||
+ | if (cmd == "mn1") | ||
+ | { | ||
+ | Serial.println("Menüpunkt1 gewählt"); | ||
+ | } | ||
+ | else if (cmd == "mn2") | ||
+ | { | ||
+ | Serial.println("Menüpunkt2 gewählt"); | ||
+ | } | ||
+ | sendMainMenu(true); | ||
+ | } | ||
+ | |||
+ | void loop() | ||
+ | { | ||
+ | if (Serial1.available()) | ||
+ | { | ||
+ | char ch = Serial1.read(); // nächstes Zeichen vom HC-05 Modul einlesen | ||
+ | if (ch == '{') | ||
+ | { | ||
+ | cmd = ""; // Start-Kommando | ||
+ | } | ||
+ | else if (ch == '}') // Stop-Kommando | ||
+ | { | ||
+ | // Menükommando ist vollständig | ||
+ | Serial.print("pfod cmd="); | ||
+ | Serial.println(cmd); | ||
+ | if (cmd == ".") sendMainMenu(false); | ||
+ | else if (cmd.startsWith("mn")) processMainMenu(cmd); | ||
+ | else Serial1.println("{}"); | ||
+ | cmd = ""; | ||
+ | } | ||
+ | else cmd += ch; // Zeichenkette vervollständigen | ||
+ | } | ||
+ | } | ||
+ | |||
+ | 3. Ergänze Menüpunkt 1 um das Ein- und Ausschalten einer LED (Pin 13). | ||
+ | |||
+ | 4. Ergänze Menüpunkt 1 um die Anzeige des aktuellen LED Zustandes (ein/aus). | ||
+ | |||
+ | = 10. Lösung = | ||
+ | |||
+ | boolean zustand = false; // Variable für LED-Zustand | ||
+ | |||
+ | zustand = !zustand; // Zustand invertieren | ||
+ | digitalWrite(pinLED, zustand); // LED schalten | ||
+ | Serial1.print("|mn1~LED "); // Zustand im Menüpunkt anzeigen | ||
+ | if (zustand == LOW) | ||
+ | Serial1.print("AUS"); | ||
+ | else | ||
+ | Serial1.print("EIN"); | ||
− | + | = Arduino Starter Kit = | |
+ | http://wiki.epalsite.com/index.php?title=Starter_Kit_for_Arduino |
Aktuelle Version vom 30. Mai 2017, 03:41 Uhr
So wie man für das Autofahren die Grundlagen bei der Fahrschule erlernt, kann man auch die Grundlagen der Programmierung für den Arduino erlernen wenn man ihn einsetzen will. Dieser Kurs kann in kurzer Zeit durchgearbeitet werden und man ist danach mit der Arduino-Programmierung vertraut.
Inhaltsverzeichnis
- 1 1. Dein erstes Programm
- 2 1. Lösung
- 3 2. Dein erstes Programm mit Variablen und serieller Konsole
- 4 2. Lösung
- 5 3. Ein Relais ansteuern
- 6 4. Ein Taster
- 7 4. Lösung
- 8 4. Abfragen
- 9 6. Schleifen
- 10 7. Potentiometer
- 11 8. Zeit und Verzögerungen
- 12 8. Lösung
- 13 9. serielle Tastatur
- 14 10. Bluetooth / pfodApp
- 15 10. Lösung
- 16 Arduino Starter Kit
1. Dein erstes Programm
Wir steuern eine LED an. Wir verwenden dazu die interne Arduino LED (Pin 13), ihr braucht also nichts weiter anschliessen. Die Grafik dient nur als Beispiel falls ihr eine externe LED anschliessen wollt. Bitte nur mit Widerstand (300 Ohm) anschliessen, um den Strom zu begrenzen.
Die setup-Funktion wird beim Programmstart einmal durchlaufen. Hier kann man Dinge durchführen, die nur einmal nach dem Arduino-Reset ausgeführt werden sollen. Die Loop-Funktion hingegen wird unendlich oft durchlaufen.
// Die setup-Funktion wird beim Programmstart einmal durchlaufen. void setup() { } // Die loop-Funktion wird unendlich oft wiederholt. void loop() { }
Aufgabe:
1. Übertrage obige Zeilen in die Arduino IDE.
2. Baue folgende Zeile in die setup-Funktion ein:
pinMode(13, OUTPUT); // Pin 13 soll als Ausgang konfiguriert werden (für LED ansteuern)
3. Baue folgende Zeilen in die loop-Funktion ein:
digitalWrite(13, HIGH); // Pin 13 soll auf HIGH ( 5 Volt ) gesetzt werden delay(1000); // Warte 1000 Millisekunden (= 1 Sekunde) digitalWrite(13, LOW); // Pin 13 soll auf LOW ( 0 Volt/Masse ) gesetzt werden delay(1000); // Warte 1000 Millisekunden (= 1 Sekunde)
4. Starte Dein Programm über die Arduino IDE und schaue ob die Arduino LED blinkt.
1. Lösung
// Die setup-Funktion wird beim Programmstart einmal durchlaufen. void setup() { pinMode(13, OUTPUT); // Pin 13 soll als Ausgang konfiguriert werden } // Die loop-Funktion wird unendlich oft wiederholt. void loop() { digitalWrite(13, HIGH); // Pin 13 soll auf HIGH ( 5 Volt ) gesetzt werden delay(1000); // Warte 1000 Millisekunden (= 1 Sekunde) digitalWrite(13, LOW); // Pin 13 soll auf LOW ( 0 Volt/Masse ) gesetzt werden delay(1000); // Warte 1000 Millisekunden (= 1 Sekunde) }
2. Dein erstes Programm mit Variablen und serieller Konsole
Aufgabe:
1. Ersetze die Pin-Nummer "13" durch eine Variable welche Du außerhalb von Funktionen definierst:
int pinLED = 13; // die Variable namens "pinLED" soll den Wert 13 bekommen
2. Ersetze nun überall dort die "13" durch "pinLED" wo der LED-Pin benutzt wird.
3. Teste Dein Programm einmal.
4. Baue folgende Zeilen in die setup-Funktion ein:
Serial.begin(115200); // serielle Konsole für 115200 Baud konfigurieren Serial.println("START"); // Text auf serielle Konsole ausgeben
5. Baue folgende Zeilen jeweils an geeigneter Stelle in die loop-Funktion ein:
Serial.println("LED EIN"); // Text auf serielle Konsole ausgeben Serial.println("LED AUS"); // Text auf serielle Konsole ausgeben
2. Lösung
int pinLED = 13; // die Variable namens "pinLED" soll den Wert 13 bekommen // Die setup-Funktion wird beim Programmstart einmal durchlaufen. void setup() { pinMode(pinLED, OUTPUT); // PinLED soll als Ausgang konfiguriert werden Serial.begin(115200); // serielle Konsole für 115200 Baud konfigurieren Serial.println("START"); // Text auf serielle Konsole ausgeben } // Die loop-Funktion wird unendlich oft wiederholt. void loop() { digitalWrite(pinLED, HIGH); // PinLED soll auf HIGH ( 5 Volt ) gesetzt werden Serial.println("LED EIN"); // Text auf serielle Konsole ausgeben delay(1000); // Warte 1000 Millisekunden (= 1 Sekunde) digitalWrite(pinLED, LOW); // PinLED soll auf LOW ( 0 Volt/Masse ) gesetzt werden Serial.println("LED AUS"); // Text auf serielle Konsole ausgeben delay(1000); // Warte 1000 Millisekunden (= 1 Sekunde) }
3. Ein Relais ansteuern
Genauso wie ihr die LED angsteuert habt, könnt ihr auch ein Relais ansteuern.
Aufgabe: schaltet anstelle der LED das Relais ein und aus
4. Ein Taster
Wir schließen einen Taster an den Arduino. Die LED soll nur dann auslösen wenn der Taster gedrückt wird.
Aufgabe:
1. Schliesse den Taster an Pin 2 an und definiere den Pin:
int pinSwitch = 2; // Pin für Taster definieren
2. Baue folgende Zeile in die setup-Funktion ein:
pinMode(pinSwitch, INPUT_PULLUP); // Taster soll als Eingang (mit Pull-Up) konfiguriert werden
3. Baue folgende Zeilen in die loop-Funktion ein:
int zustand = !digitalRead(pinSwitch); // Taster in Variable "zustand" einlesen und invertieren (aus LOW wird HIGH und umgekehrt)
Serial.print("Taster Zustand: "); Serial.println( zustand );
digitalWrite( pinLED, zustand ); // LED passend ansteuern delay(1000);
4. Lösung
int pinSwitch = 2; // Pin für Taster int pinLED = 13; // Pin für LED void setup() { pinMode(pinSwitch, INPUT_PULLUP); // Taster soll als Eingang (mit Pull-Up) konfiguriert werden pinMode(pinLED, OUTPUT); // LED soll als Ausgang konfiguriert werden Serial.begin(115200); // serielle Konsole mit 115200 Baud konfigurieren } void loop() { int zustand = !digitalRead(pinSwitch); // Taster in Variable einlesen und invertieren (aus LOW wird HIGH und umgekehrt) Serial.print("Taster ist "); Serial.println( zustand ); digitalWrite( pinLED, zustand ); // LED passend ansteuern delay(1000); }
4. Abfragen
Unser Programm soll zwei unterschiedliche Zweige bekommen. Wir lösen dies durch eine Abfrage.
Aufgabe: 1. Baue folgende Abfrage in die loop-Funktion ein:
if (zustand == HIGH) { Serial.println( "Der Schalter ist AUS" ); } else { Serial.println( "Der Schalter ist EIN" ); }
6. Schleifen
Mit Schleifen können wir Befehle wiederholen.
Aufgabe:
1. Baue folgende Schleife in die loop-Funktion ein:
for (int zeit=0; zeit < 4; zeit++) { Serial.print("Warte "); Serial.println(zeit); delay(1000); }
7. Potentiometer
Ein Potentiometer arbeitet analog. Wir nutzen den Analog-zu-digital Konverter (ADC), um aus analogen Eingangssignalen digitale zu machen.
Aufgabe:
1. Schliesse das Poti an den Arduino Pin A0 an.
Pin 1: Masse Pin 2: A0 Pin 3: +5V
2. Konfiguriere den Potentiometer-Pin als Eingang:
int pinPoti = A0; pinMode(pinA0, INPUT);
3. Lese das Potentiometer in eine Variable ein:
int zustand = analogRead( pinPoti );
Serial.println(zustand);
8. Zeit und Verzögerungen
Eine LED soll max. 3 Sekunden leuchten und zusätzlich über einen Taster sofort abgestellt werden können.
Die abgelaufene Zeit seit Programmstart kann mit der Funktion "millis" abgefragt werden. Sie liefert Millisekunden zurück.
Aufgabe:
1. Baue folgende Zeilen in Dein Programm ein:
if (millis() >= 3000) digitalWrite(pinLED, LOW);
if (digitalRead(pinSwitch)==LOW) digitalWrite(pinLED, LOW);
2. Diesmal soll die LED nur beim loslassen zeitverzögert mit 3 Sekunden wieder einschalten. Tipp: benutze eine Variable um die Zeit der LED-Einschaltung zu speichern.
8. Lösung
unsigned long zeit; // Variable soll Zeit für die LED-Einschaltung speichern
if (digitalRead(pinSwitch)==LOW) { // Taster gedrückt zeit = millis() + 3000; // Zeit für LED-Einschalten berechnen und in Variable speichern digitalWrite(pinLED, LOW); } else { // Taster losgelassen if (millis() >= zeit) { // Zeit zum Einschalten erreicht digitalWrite(pinLED, HIGH); } }
9. serielle Tastatur
Eine Taste (Taste 'L') auf der PC Tastatur soll die Arduino LED ein- und ausschalten.
Aufgabe:
1. Baue folgende Zeilen in Dein Programm ein:
boolean zustand = false; // Zustandsvariable für unsere LED
if (Serial.available()) { char key = Serial.read(); Serial.print("Du hast gedrückt: "); Serial.println(key); if (key == 'l') { zustand = !zustand; // Zustand invertieren (aus LOW wird HIGH und aus HIGH wird LOW) digitalWrite( pinLED, zustand ); } }
2. Erweitere Dein Programm um die Abfrage weiterer Tasten:
switch (key){ case 'l': zustand = !zustand; digitalWrite( pinLED, zustand ); break;
case 't': Serial.printl("text"); break; }
10. Bluetooth / pfodApp
Wir wollen ein Menü (mit 2 Menüpunkten) programmieren welches man per Bluetooth (pfodApp) bedienen kann.
[Menu] Zeit: 3945 Punkt1 Punkt2
Aufgabe:
1. Schliesse das HC-05-Modul wie gezeigt an den Arduino Mega an (ohne State- und Key-Leitungen).
2. Lade folgendes Programm in den Arduino:
String cmd; // Diese Zeichenkette soll später das vollständige Menü-Kommando enthalten
void setup() { Serial.begin(115200); // serielle Verbindung zum PC konfigurieren Serial1.begin(19200); // serielle Verbindung zum HC-05 Modul konfigurieren }
// Das Menü zum HC-05 Modul schicken void sendMainMenu(boolean update) { if (update) Serial1.print("{:"); else { Serial1.print("{.Menu`1000"); } Serial1.print("|mn0~Zeit "); Serial1.print(millis()); Serial1.print("|mn1~Punkt1 "); Serial1.print("|mn2~Punkt2 "); Serial1.println("}"); }
// Auf Menüauswahl reagieren void processMainMenu(String cmd) { if (cmd == "mn1") { Serial.println("Menüpunkt1 gewählt"); } else if (cmd == "mn2") { Serial.println("Menüpunkt2 gewählt"); } sendMainMenu(true); }
void loop() { if (Serial1.available()) { char ch = Serial1.read(); // nächstes Zeichen vom HC-05 Modul einlesen if (ch == '{') { cmd = ""; // Start-Kommando } else if (ch == '}') // Stop-Kommando { // Menükommando ist vollständig Serial.print("pfod cmd="); Serial.println(cmd); if (cmd == ".") sendMainMenu(false); else if (cmd.startsWith("mn")) processMainMenu(cmd); else Serial1.println("{}"); cmd = ""; } else cmd += ch; // Zeichenkette vervollständigen } }
3. Ergänze Menüpunkt 1 um das Ein- und Ausschalten einer LED (Pin 13).
4. Ergänze Menüpunkt 1 um die Anzeige des aktuellen LED Zustandes (ein/aus).
10. Lösung
boolean zustand = false; // Variable für LED-Zustand
zustand = !zustand; // Zustand invertieren digitalWrite(pinLED, zustand); // LED schalten Serial1.print("|mn1~LED "); // Zustand im Menüpunkt anzeigen if (zustand == LOW) Serial1.print("AUS"); else Serial1.print("EIN");
Arduino Starter Kit
http://wiki.epalsite.com/index.php?title=Starter_Kit_for_Arduino