User manual
RP6 ROBOT SYSTEM - 4. Programmierung des RP6
Das Programm ist sehr einfach gehalten. Es wird jede Sekunde ein Zählerstand über
die serielle Schnittstelle ausgegeben und inkrementiert (Zeile 29 bis 36) und nebenbei
noch ein Lauflicht ausgeführt (Zeile 19 bis 26), das alle 100ms weitergeschaltet wird.
Dazu werden Stopwatch1 und Stopwatch2 verwendet. In Zeile 9 und 10 werden die
beiden Stopwatches gestartet und fangen danach an zu zählen. In der Endlosschleife
(Zeile 16 bis 37) wird dann ständig abgefragt, ob die Stopwatches einen bestimmten
Zählstand überschritten haben. In Zeile 19 beispielsweise für das Lauflicht, hier wird
abgefragt ob bereits mindestens 100ms vergangen sind, seit die Stopwatch von 0 an
zu Zählen begonnen hat. Ist das der Fall, wird die nächste LED angeschaltet und die
Stopwatch auf 0 zurückgesetzt (Zeile 25) und es wird erneut 100ms lang gewartet.
Genauso wird bei dem Zähler verfahren, nur ist das Intervall hier 1000ms also eine
Sekunde.
Das Programm finden Sie etwas ausführlicher auch auf der CD. Es ist nur ein kleines
Beispiel, man kann auch viel komplexere Dinge mit den Stopwatches realisieren und
diese z.B. auch bedingt starten und stoppen etc...
Beim Beispielprogramm auf der CD sind deshalb das Lauflicht und der Zähler (dort
sind es sogar 3 Stück...) auch jeweils in einer eigenen Funktion untergebracht, die aus
der Endlosschleife aufgerufen werden. Das macht es bei komplexeren Programmen
übersichtlicher und man kann viele Programmteile so später in anderen Programmen
einfacher per Copy&Paste wiederverwenden – wie z.B. so ein Lauflicht.
Es stehen mehrere Makros zur Steuerung der Stopwatches zur Verfügung.
startStopwatchX()
Startet eine bestimmte Stopwatch. Die Stopwatch wird nicht zurückgesetzt, sondern
läuft einfach vom letzten Zählstand aus weiter.
Beispiele:
startStopwatch1();
startStopwatch2();
stopStopwatchX()
Hält eine bestimmte Stopwatch an.
Beispiel:
stopStopwatch2();
stopStopwatch1();
uint8_t isStopwatchXRunning()
Gibt zurück ob die Stopwatch X läuft.
Beispiel:
if(!isStopwatch2Running) {
// Stopwatch läuft nicht, also mache irgendwas...
}
- 86 -