User manual

RP6 ROBOT SYSTEM - 4. Programmierung des RP6
mern universell verwendebare „Stopwatches“. Diese Bezeichnung ist nicht allgemein
üblich, der Autor fand den Namen aber passend, weil das ganz ähnlich wie reale
Stoppuhren funktioniert. Die Stopwatches machen viele Aufgaben einfacher. Norma-
lerweise schreibt man solche Timing Funktionen speziell auf das jeweilige Problem zu-
geschnitten, die RP6Library bietet das hier etwas universeller und einfacher an, so
dass man es für viele verschiedene Dinge gleichermaßen benutzen kann.
Mit den Stopwatches kann man viele Aufgaben quasi simultan erledigen zumindest
wirkt es für den Betrachter von außen so.
Es stehen acht 16bit Stopwatches (Stopwatch1 bis Stopwatch8) zur Verfügung. Diese
kann man starten, stoppen, setzen und auslesen. Die Auflösung beträgt eine Millise-
kunde, wie bei der mSleep Funktion. Das bedeutet, dass jede Stopwatch ihren Zähl-
stand jede Millisekunde um 1 erhöht. Für sehr zeitkritische Dinge ist das aber nicht
geeignet, da die Abfragen ob eine Stopwatch einen bestimmten Wert erreicht hat,
meist nicht exakt zu diesem Zeitpunkt erfolgen.
Wie man diese Funktionen anwendet, sieht man gut an folgendem kleinen Beispielpro-
gramm:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include "RP6RobotBaseLib.h"
int main(void)
{
initRobotBase(); // Mikrocontroller initialisieren
writeString_P("\nRP6 Stopwatches Demo Programm\n");
writeString_P("___________________________\n\n");
startStopwatch1(); // Stopwatch1 starten!
startStopwatch2(); // Stopwatch2 starten!
uint8_t counter = 0;
uint8_t runningLight = 1;
// Hauptschleife:
while(true)
{
// Ein kleines LED Lauflicht:
if(getStopwatch1() > 100) // Sind 100ms (= 0.1s) vergangen?
{
setLEDs(runningLight); // LEDs setzen
runningLight <<= 1; // Nächste LED (shift Operation)
if(runningLight > 32) // Letzte LED?
runningLight = 1; // Ja, also wieder von vorn beginnen!
setStopwatch1(0); // Stopwatch1 auf 0 zurücksetzen
}
// Einen Zählerstand auf dem Terminal ausgeben:
if(getStopwatch2() > 1000) // Sind 1000ms (= 1s) vergangen?
{
writeString_P("CNT:");
writeInteger(counter, DEC); // Zählerstand ausgeben
writeChar('\n');
counter++; // Zähler um 1 erhöhen
setStopwatch2(0); // Stopwatch2 auf 0 zurücksetzen
}
}
return 0;
}
- 85 -