User manual
RP6 ROBOT SYSTEM - 4. Programmierung des RP6
gleich noch kleinere Aufgaben - wie eben die Bumper auslesen - in einem Rutsch mit
erledigen. Das geht sehr schnell und man müsste das sonst ohnehin fast immer noch
im Hauptprogramm machen.
Damit die Bumper automatisch überwacht werden, muss man diese Funktion:
void task_Bumpers(void)
ständig aus der Hauptschleife aufrufen (s.a. Antriebs Funktionen – hier wird das vor-
gehen noch ausführlicher besprochen) – sie prüft die Bumper dann automatisch alle
50ms und schreibt die Werte (gedrückt oder nicht gedrückt) in die Variablen
bumper_left und bumper_right
Diese kann man dann überall sonst im Programm ganz normal in if Bedingungen etc.
verwenden und abfragen, oder anderen Variablen zuweisen.
Beispiel:
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
#include "RP6RobotBaseLib.h"
int main(void)
{
initRobotBase(); // Mikrocontroller initialisieren
setLEDs(0b001001); // LEDs 1 und 4 (beide Grün) anschalten
while(true)
{
// Hier setzen wir die LEDs je nachdem welcher Bumper
// gedrückt ist:
statusLEDs.LED6 = bumper_left; // Bumper links gedrückt
statusLEDs.LED4 = !bumper_left; // links nicht gedrückt
statusLEDs.LED3 = bumper_right; // Bumper rechts gedrückt
statusLEDs.LED1 = !bumper_right; // rechts nicht gedrückt
// Beide Bumper gedrückt:
statusLEDs.LED2 = (bumper_left && bumper_right);
statusLEDs.LED5 = statusLEDs.LED2;
updateStatusLEDs(); // LEDs aktualisieren...
// Bumper Status prüfen:
task_Bumpers(); // ständig aus der Hauptschleife aufrufen!
}
return 0;
}
Im Beispielprogramm benutzen wir die Status LEDs um den Zustand der beiden Bum-
per anzuzeigen. Ist der linke Bumper gedrückt, wird LED 6 angeschaltet und LED4 ab-
geschaltet. Ist er nicht gedrückt, wird umgekehrt LED6 ausgeschaltet und LED4 ange-
schaltet. LED6 leuchtet zwar sowieso wenn der linke Bumper gedrückt wird – aber es
könnte ja auch irgendetwas anderes mit den LEDs visualisiert werden, das soll nur ein
Beispiel sein wie man das generell macht. Beim rechten Bumper wird dasselbe mit
LED3 und LED1 gemacht. Sind beide Bumper gedrückt, wird LED2 und LED5 ange-
schaltet.
Da man nun sowieso schon die automatische Auswertung der Bumper alle 50ms in der
Library hatte, war es naheliegend etwas einzubauen, das eine selbstdefinierte Funkti-
on automatisch bei Zustandsänderungen der Bumper aufruft. Normalerweise werden
die Bumper ja relativ selten getroffen und da ist es sinnvoll im Hauptprogramm nur
- 89 -