Arexx RP6 V2 Build your own robot kit RP6 V2 User Manual

Product codes
RP6 V2
Page of 141
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 -