Arduino Crash Kurs

From www.wiki.ardumower.de
Revision as of 14:58, 1 April 2016 by Alexanderg (Talk | contribs) (10. Bluetooth / pfodApp)

Jump to: navigation, search

Arduino led.png Arduino relay.png Arduino switch.png Arduino potentiometer.jpg Arduino delays.jpg Arduino keyboard.png Arduino bluetooth.jpg


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.

Arduino led.png

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)

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.

Arduino relay.png

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.

Arduino switch.png Arduino pullup.png


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
  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

   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.

Arduino if else.png

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.

Arduino loops.jpg

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.

Arduino potentiometer.jpg

Aufgabe:

1. Schliesse das Poti an den Arduino Pin A0 an.

 Pin 1: Masse
 Pin 2: A0
 Pin 3: +5V
 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.

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);


9. serielle Tastatur

Eine Taste (Taste 'L') auf der PC Tastatur soll die Arduino LED ein- und ausschalten.

Arduino keyboard.png

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ü programmieren welches man per Bluetooth bedienen kann.

Arduino bluetooth.jpg

Aufgabe:

1. Schliesse das HC-05-Modul wie gezeigt an den Arduino Mega an.

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("{.Main`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 (pfodCmd == "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
     cmd += ch;                // Zeichenkette vervollständigen
     if (ch == '{') cmd = "";  // Start-Kommando
   }
   if (cmd.endsWith("}"))      // 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 = "";
   }
 }

Arduino Starter Kit

http://wiki.epalsite.com/index.php?title=Starter_Kit_for_Arduino