FtDuino/Programmieren in C++: Unterschied zwischen den Versionen
K (Matthias Scharwies verschob die Seite FtDuino/C++ nach FtDuino/Programmieren in C++) |
(Motoren) Markierung: 2017-Quelltext-Bearbeitung |
||
(4 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 40: | Zeile 40: | ||
void loop() { | void loop() { | ||
// ... | // ... | ||
}</source> | |||
{{achtung|Jede Klammer, die ihr öffnet, muss auch wieder geschlossen werden!}} | {{achtung|Jede Klammer, die ihr öffnet, muss auch wieder geschlossen werden!}} | ||
Zeile 52: | Zeile 52: | ||
=== Anweisungen === | === Anweisungen === | ||
In diesem Sketch gibt es nun bereits einige Anweisungen: | In diesem Sketch gibt es nun bereits einige Anweisungen: | ||
<source lang="c++"> | <source lang="c++" line> | ||
void setup() { | void setup() { | ||
pinMode(LED_BUILTIN, OUTPUT); | pinMode(LED_BUILTIN, OUTPUT); | ||
Zeile 58: | Zeile 58: | ||
void loop() { | void loop() { | ||
digitalWrite(LED_BUILTIN, HIGH); // schalte die LED ein (HIGH | digitalWrite(LED_BUILTIN, HIGH); // schalte die LED ein (HIGH =5V) | ||
delay(1000); // warte 1000 Millisekunden (eine Sekunde) | delay(1000); // warte 1000 Millisekunden (eine Sekunde) | ||
digitalWrite(LED_BUILTIN, LOW); // schalte die LED aus, | digitalWrite(LED_BUILTIN, LOW); // schalte die LED aus, | ||
// (Low = kein Strom) | |||
delay(1000); | delay(1000); | ||
}</source> | }</source> | ||
* <span style="color: | * <span style="color:#d05">pinMode(</span><span style="color:darkcyan">LED_BUILTIN, OUTPUT</span><span style="color:#d05">);</span><br>Im setup() wird die eingebaute LED als Ausgang zugewiesen<ref>[https://harbaum.github.io/ftduino/www/manual/programmierung.html#4.4.1 pinMode()] (harbaum.github.io)</ref> | ||
In der Hauptschleife <code>loop()</code> werden … | In der Hauptschleife <code>loop()</code> werden … | ||
* <span style="color: | * <span style="color:#d05">digitalWrite(</span><span style="color:darkcyan">LED_BUILTIN, HIGH</span><span style="color:#d05">);</span><br>Diese Anweisung liefert 5V an den Ausgang. Die LED erhält nun Strom und leuchtet. | ||
* <span style="color: | * <span style="color:#d05">digitalWrite(</span><span style="color:darkcyan">LED_BUILTIN, LOW</span><span style="color:#d05">);</span><br>Der Ausgang <code>LED_BUILTIN</code> wird zurück auf 0V geschaltet, die LED geht aus. | ||
* <span style="color: | * <span style="color:#d05">delay(<span style="color:darkcyan">1000</span>);</span><br>Damit dies auch sichtbar wird, gibt diese Anweisung dem Board den Befehl nichts zu tun und zu warten.<br>Zeitangaben in der Computerwelt arbeiten immer mit Millisekunden - es wird also eine Sekunde gewartet. | ||
=== Kommentare === | |||
Du kannst Deinen Sketch mit Kommentaren versehen, die nicht ausgeführt werden. Dafür verwendet man zwei ''slashes'': <code>//</code>, die der Erklärung vorangestellt werden. | Du kannst Deinen Sketch mit Kommentaren versehen, die nicht ausgeführt werden. Dafür verwendet man zwei ''slashes'': <code>//</code>, die der Erklärung vorangestellt werden. | ||
<source lang="c++" line > | |||
// Kommentarzeile 1 | |||
// Kommentarzeile 2 | |||
// ... | |||
/* | |||
Kommentarzeile 1 | |||
Kommentarzeile 2 | |||
... | |||
*/ | |||
</source> | |||
Hier gilt es einen Kompromiss zwischen guter Lesbarkeit des Codes und der Notwendigkeit, diesen auch später noch zu verstehen, zu finden. | Hier gilt es einen Kompromiss zwischen guter Lesbarkeit des Codes und der Notwendigkeit, diesen auch später noch zu verstehen, zu finden. | ||
Mit <code>/* ... */</code> kann man auch Code [https://wiki.selfhtml.org/wiki/Auskommentieren auskommentieren], um so festzustellen, welche Programmteile funktionieren. | |||
== Ansteuerung von fischertechnik-Komponenten == | == Ansteuerung von fischertechnik-Komponenten == | ||
Zeile 115: | Zeile 130: | ||
In Zeile 3 wird die Bibliothek <code>FtduinoSimple.h</code> eingebunden. Sie vereinfacht den Zugriff auf den ftDuino und erweitert C++ um die Abfrage von einfachen Digitalwerten (an/aus) und das Ein- und Ausschalten von Ausgängen.<ref>[https://harbaum.github.io/ftduino/www/manual/bibliotheken.html#9.1 9.1 FtduinoSimple-Bibiliothek] (harbaum.github.io)</ref> | In Zeile 3 wird die Bibliothek <code>FtduinoSimple.h</code> eingebunden. Sie vereinfacht den Zugriff auf den ftDuino und erweitert C++ um die Abfrage von einfachen Digitalwerten (an/aus) und das Ein- und Ausschalten von Ausgängen.<ref>[https://harbaum.github.io/ftduino/www/manual/bibliotheken.html#9.1 9.1 FtduinoSimple-Bibiliothek] (harbaum.github.io)</ref> | ||
* <span style="color: | * <span style="color:#d05">ftduino.output_set(</span><span style="color:darkcyan">Ftduino::O1, Ftduino::HI</span><span style="color:#d05">);</span><br>Dies schaltet den Eingang <tt>01</tt> des ftDuino ein, … | ||
* <span style="color: | * <span style="color:#d05">ftduino.output_set(</span><span style="color:darkcyan">Ftduino::O1, Ftduino::LO</span><span style="color:#d05">);</span><br>… entsprechend aus. | ||
{{Aufgabe|#Hol dir eine zweite Lampe … | {{Aufgabe|#Hol dir eine zweite Lampe … | ||
Zeile 127: | Zeile 142: | ||
Diesen kann man mit dem Sketch <code>Blink01</code> aus den Beispielen verbinden: | Diesen kann man mit dem Sketch <code>Blink01</code> aus den Beispielen verbinden: | ||
<source lang="c"> | <source lang="c" line> | ||
#include <FtduinoSimple.h> | #include <FtduinoSimple.h> | ||
Zeile 157: | Zeile 172: | ||
}} | }} | ||
== | == Motoren == | ||
Bevor wir zu den „richtigen“ Roboterautos kommen, wollen wir kurz noch einen ersten Versuch mit Motoren ausprobieren. Motoren sind wie Lampen Aktoren und werden daher an den Output angeschlossen. | |||
Anders als bei Lampen kann die Laufrichtung und ein Parameter <code>BRAKE</code> angegeben werden: | |||
* <span style="color:#d05">ftduino.motor_set(</span><span style="color:darkcyan">Ftduino::M1, Ftduino::LEFT</span><span style="color:#d05">);</span> | |||
Auf harbaum.github.io findet sich dieser [https://harbaum.github.io/ftduino/www/manual/experimente.html#6.2 Not-Aus-Schaltung] für eine Maschine. Das Programm ''EmergencyStop kann über die Beispiele aus der Arduino IDE geladen werden. | |||
{{Fortsetzung|weiter=FtDuino/Robotics|weiterlink=FtDuino/Robotics}} | |||
{{FTDuino}} | {{FTDuino}} |
Aktuelle Version vom 11. März 2023, 07:33 Uhr
Unsere ersten Versuche führten wir mit Scratch durch.
Profis programmieren aber in Programmiersprachen wie C++.
In diesem Abschnitt erfahrt ihr etwas über die Syntax - die Grammatik und Rechtschreibregeln - der Programmiersprache C++.
Das ftDuino-Manual zeigt im 3. Kapitel einige Sketches (Programme) in C++. Die Einführung in die Sprache C++ findet sich aber erst im Kapitel 4, in der auch auf die Vorteile gegenüber grafischer Programmierumgebungen eingegangen wird.
Einrichten
- Verbinde den ftDuino mit dem Computer.
- Öffne die Arduino IDE im Computer
- Überprüfe, ob der ftDuino als aktuelles Board ausgewählt ist.
Mehr Infos finden sich auf:
Blink
Der Sketch basiert auf einem Beispiel von Arduino.cc.[1]. Er ist auch in Till Harbaums Manual zu finden.[2]
Das Beispiel muss aber nicht zwingend per Hand eingetippt werden, denn es findet sich auch als fertig mitgeliefertes Beispiel im Datei-Menü der Arduino-IDE unter Datei ► Beispiele ► FtduinoSimple ► Blink.
Funktionen
Alle Arduino-Sketche (Programme) enthalten je eine setup()
und eine loop()
-Funktion.[3]. Nach ihr folgt ein Paar geschweifter Klammern, in deren Anweisungsblock mehrere Anweisungen notiert werden.
// die setup-Funktion wird einmal beim Start aufgerufen
void setup() {
// ...
}
// die loop-Funktion wird immer wieder aufgerufen
void loop() {
// ...
}
Eine Funktion ist ein Konstrukt, mit dem mehrere Anweisungen zusammengefasst und nacheinander ausgeführt werden. Sie hat einen Namen, mit dem man sie mehrfach aufrufen kann. Nach dem Namen kann man in den Klammern Parameter übergeben, mit denen innerhalb der Funktion gearbeitet wird.
Die beiden setup()
und eine loop()
-Funktionen werden von der Arduino-IDE automatisch aufgerufen. (siehe harbaum.github.io)
Anweisungen
In diesem Sketch gibt es nun bereits einige Anweisungen:
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH); // schalte die LED ein (HIGH =5V)
delay(1000); // warte 1000 Millisekunden (eine Sekunde)
digitalWrite(LED_BUILTIN, LOW); // schalte die LED aus,
// (Low = kein Strom)
delay(1000);
}
- pinMode(LED_BUILTIN, OUTPUT);
Im setup() wird die eingebaute LED als Ausgang zugewiesen[4]
In der Hauptschleife loop()
werden …
- digitalWrite(LED_BUILTIN, HIGH);
Diese Anweisung liefert 5V an den Ausgang. Die LED erhält nun Strom und leuchtet. - digitalWrite(LED_BUILTIN, LOW);
Der AusgangLED_BUILTIN
wird zurück auf 0V geschaltet, die LED geht aus. - delay(1000);
Damit dies auch sichtbar wird, gibt diese Anweisung dem Board den Befehl nichts zu tun und zu warten.
Zeitangaben in der Computerwelt arbeiten immer mit Millisekunden - es wird also eine Sekunde gewartet.
Kommentare
Du kannst Deinen Sketch mit Kommentaren versehen, die nicht ausgeführt werden. Dafür verwendet man zwei slashes: //
, die der Erklärung vorangestellt werden.
// Kommentarzeile 1
// Kommentarzeile 2
// ...
/*
Kommentarzeile 1
Kommentarzeile 2
...
*/
Hier gilt es einen Kompromiss zwischen guter Lesbarkeit des Codes und der Notwendigkeit, diesen auch später noch zu verstehen, zu finden.
Mit /* ... */
kann man auch Code auskommentieren, um so festzustellen, welche Programmteile funktionieren.
Ansteuerung von fischertechnik-Komponenten
Um die interne Leuchtdiode des ftDuino blinken zu lassen, hätten wir keinen ftDuino benötigt. Alle Arduinos verfügen über eine solche interne Leuchtdiode und hätten für unser erstes Beispiel verwendet werden können.
Der ftDuino spielt seine speziellen Fähigkeiten aus, wenn es darum geht, die fischertechnik-Sensoren und -Aktoren anzusteuern. Der Blink-Sketch soll daher so erweitert werden, dass zusätzlich zu Leuchtdiode eine am Ausgang O1 angeschlossene Lampe blinkt.
Angeschlossen wird dazu eine normale fischertechnik-Lampe mit einem Stecker an den Ausgang O1 des ftDuino und mit dem zweiten Stecker an einen der Masseanschlüsse des ftDuino. Masseanschlüsse sind die 12 Anschlüsse, die in der Abbildung mit einem Massesymbol ⏊ verbunden sind.
Da nun die mit 9 Volt betriebenen fischertechnik-Ausgänge verwendet werden, muss der ftDuino zusätzlich mit 9 Volt versorgt werden (rot ≙ plus; grün ≙ minus). Die Anschlüsse sind verpolungsgeschützt, speziell beim Anschluss der Batterie kann man also keinen Schaden anrichten.
der Sketch
Der folgende Beispiel-Sketch BlinkO1 findet sich auch im Datei-Menü der Arduino-IDE unter Datei ► Beispiele ► FtduinoSimple ► BlinkO1.
// BlinkO1.ino
#include <FtduinoSimple.h>
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
// schalte die interne LED und den Ausgang O1 ein (HIGH bzw. HI)
digitalWrite(LED_BUILTIN, HIGH);
ftduino.output_set(Ftduino::O1, Ftduino::HI);
delay(1000);
// schalte die interne LED und den Ausgang O1 aus (LOW bzw. LO)
digitalWrite(LED_BUILTIN, LOW);
ftduino.output_set(Ftduino::O1, Ftduino::LO);
delay(1000);
}
In Zeile 3 wird die Bibliothek FtduinoSimple.h
eingebunden. Sie vereinfacht den Zugriff auf den ftDuino und erweitert C++ um die Abfrage von einfachen Digitalwerten (an/aus) und das Ein- und Ausschalten von Ausgängen.[5]
- ftduino.output_set(Ftduino::O1, Ftduino::HI);
Dies schaltet den Eingang 01 des ftDuino ein, … - ftduino.output_set(Ftduino::O1, Ftduino::LO);
… entsprechend aus.
- Hol dir eine zweite Lampe …
- und baue eine Ampel, die alle 2 Sekunden von Rot auf Grün schaltet.
- Erweitere den obigen Sketch!
Taster + Lampe
In Kapitel 3.2.2 Eingänge findet man einen Sketch, der einen Taster abfragt.
Diesen kann man mit dem Sketch Blink01
aus den Beispielen verbinden:
#include <FtduinoSimple.h>
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
// lies den Zustand einer Taste an Eingang I1
if(ftduino.input_get(Ftduino::I1)) {
// schalte die interne LED und den Ausgang O1 ein (HIGH bzw. HI)
digitalWrite(LED_BUILTIN, HIGH);
ftduino.output_set(Ftduino::O1, Ftduino::HI);
delay(1000);
// schalte die interne LED und den Ausgang O1 aus (LOW bzw. LO)
digitalWrite(LED_BUILTIN, LOW);
ftduino.output_set(Ftduino::O1, Ftduino::LO);
delay(1000);
}
}
Logisch, oder?
- Wenn man den Taster drückt und wieder loslässt, brennen LED und Lampe nur kurz auf. Überlege Warum?
- Ändere den Sketch so, dass ein kurzer Knopfdruck ausreicht, um das Blinklicht dauerhaft einzuschalten.
Motoren
Bevor wir zu den „richtigen“ Roboterautos kommen, wollen wir kurz noch einen ersten Versuch mit Motoren ausprobieren. Motoren sind wie Lampen Aktoren und werden daher an den Output angeschlossen.
Anders als bei Lampen kann die Laufrichtung und ein Parameter BRAKE
angegeben werden:
- ftduino.motor_set(Ftduino::M1, Ftduino::LEFT);
Auf harbaum.github.io findet sich dieser Not-Aus-Schaltung für eine Maschine. Das Programm EmergencyStop kann über die Beispiele aus der Arduino IDE geladen werden.
- Einrichten
- Erste Schritte mit Scratch
- Ampel
- Händetrockner
- Roboter
- Programmieren in C++ (wie die Profis)
- Robotics
- Sonstiges
- Aufbewahrung
- Projekte nur mit fischertechnik
Weblinks
- programmierenlernen24: C++ Programmieren lernen – Das Tutorial für Anfänger
(4 Teile, ziemlich kurz) - programmieren-lernen-cplusplus.de: C⊕⊕l, ich kann programmieren!
umfangreiches Tutorial in 9 Kapiteln der Uni Rostock - ewla.de: C++ Kurs für (totale) Anfänger (pdf, 187 Seiten)
- cpp-tutor.de: c++-Tutor - erste Kapitel eines sehr umfangreichen Buchs
- ↑ Blink(arduino.cc)
- ↑ Erste Schritte (harbaum.github.io)
- ↑ loop() (arduino.cc)
- ↑ pinMode() (harbaum.github.io)
- ↑ 9.1 FtduinoSimple-Bibiliothek (harbaum.github.io)