User manual
RP6 ROBOT SYSTEM - 4. Programmierung des RP6
Beispiel 9: Exkursion - Endliche Automaten
Verzeichnis: <RP6Examples>\RP6BaseExamples\Example_05_Move_04_FSM\
Datei: RP6Base_Move_04_FSM.c
Das Programm erzeugt Ausgaben auf der seriellen Schnittstelle
Der Roboter bewegt sich in diesem Beispielprogramm nicht !
Für komplexere Programme reichen die einfachen Methoden die wir in den bisherigen
Beispielprogrammen verwendet haben nicht immer aus.
Beispielsweise für verhaltensgesteuerte Roboter braucht man endliche Automaten
(engl. Finite State Machines – oder kurz FSMs) damit man das überhaupt realisieren
kann. Dieses Beispielprogramm zeigt einen einfachen endlichen Automaten, der sei-
nen Zustand ändert wenn man die Bumper drückt. Was das Programm genau tut,
sieht man am Besten, wenn man es einfach mal ausführt und je zweimal auf die Bum-
per drückt. Dabei sollte man sich die Ausgaben im Terminal und die Status LEDs an-
schauen und die Bumper zunächst langsam drücken und wieder loslassen!
Meistens werden endliche Automaten in C mit einem switch-case Konstrukt realisiert
(oder einem Haufen if-else-if-else Bedingungen... switch ist jedoch übersichtlicher).
Ein kleines 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
27
28
29
30
31
32
33
34
#include "RP6RobotBaseLib.h"
#define STATE_START 0
#define STATE_1 1
#define STATE_2 2
#define STATE_3 3
uint8_t state = STATE_START;
void simple_stateMachine(void)
{
switch(state)
{
case STATE_START: writeString("\nSTART\n"); state = STATE_1;
break;
case STATE_1: writeString("Zustand 1\n"); state = STATE_2;
break;
case STATE_2: writeString("Zustand 2\n"); state = STATE_3;
break;
case STATE_3: writeString("Zustand 3\n"); state = STATE_START;
break;
}
}
int main(void)
{
initRobotBase();
while(true)
{
simple_stateMachine();
mSleep(500);
}
return 0;
}
- 117 -