Arexx RP6 V2 Build your own robot kit RP6 V2 User Manual
Product codes
RP6 V2
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
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
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-
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).
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:
Hier gleich ein einfaches Beispielprogramm dazu:
1
2
3
3
4
5
5
6
7
7
8
9
9
10
11
11
12
13
13
14
15
15
16
17
17
18
19
19
20
21
21
22
23
23
24
25
25
26
27
27
28
29
29
30
31
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.
Status beider Bumper aus.
- 90 -