User manual
RP6 ROBOT SYSTEM - 4. Programmierung des RP6
dann etwas abzufragen, wenn auch Bedarf dafür besteht.
In C kann man auch Zeiger auf Funktionen definieren und diese dann darüber aufru-
fen ohne die Funktion in der Library selbst zu definieren. Normalerweise müsste eine
Funktion schon zur Zeit der Übersetzung des Programms bekannt sein und in der RP6-
Library eingetragen werden, damit man diese Aufrufen kann.
So kann man eigens definierte Funktionen als sog. „Event Handler“, also für die Ereig-
nisbehandlung verwenden. Wird ein Bumper gedrückt, wird innerhalb von etwa 50ms
automatisch eine Funktion aufgerufen, die man extra dafür erstellt und zuvor als
Event Handler registriert hat. Die Funktion muss dabei eine bestimmte Signatur ha-
ben. In diesem Fall muss es eine Funktion sein, die keinen Rückgabewert und keinen
Parameter hat (beides void).
Die Funktionssignatur muss also so void bumpersStateChanged(void) aussehen. Den
Event Handler kann man beispielsweise zu Beginn der Main Funktion registrieren. Zum
Registrieren dieses Event Handlers verwendet man folgende Funktion:
void BUMPERS_setStateChangedHandler(void (*bumperHandler)(void))
Die Notation müssen Sie nicht unbedingt genau verstehen – kurz gesagt wird hier ein
Zeiger auf eine Funktion übergeben...
Hier gleich ein einfaches Beispielprogramm dazu:
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
#include "RP6RobotBaseLib.h"
// Unsere „Event Handler“ Funktion für die Bumper.
// Die Funktion wird automatisch aus der RP6Library aufgerufen:
void bumpersStateChanged(void)
{
writeString_P("\nBumper Status hat sich geaendert:\n");
if(bumper_left)
writeString_P(" - Linker Bumper gedrueckt!\n");
else
writeString_P(" - Linker Bumper nicht gedrueckt.\n");
if(bumper_right)
writeString_P(" - Rechter Bumper gedrueckt!\n");
else
writeString_P(" - Rechter Bumper nicht gedrueckt.\n");
}
int main(void)
{
initRobotBase();
// Event Handler registrieren:
BUMPERS_setStateChangedHandler(bumpersStateChanged);
while(true)
{
task_Bumpers(); // Bumper automatisch alle 50ms auswerten
}
return 0;
}
Das Programm gibt bei jeder Änderung des Bumperzustands einmal den aktuellen
Status beider Bumper aus.
- 90 -