ROME2 Lab3

Committer:
oehlemar
Date:
Tue Mar 24 08:39:54 2020 +0000
Revision:
0:6a4d3264c067
Child:
1:ff05970bb9b0
Lab3

Who changed what in which revision?

UserRevisionLine numberNew contents of line
oehlemar 0:6a4d3264c067 1 /*
oehlemar 0:6a4d3264c067 2 * StateMachine.h
oehlemar 0:6a4d3264c067 3 * Copyright (c) 2020, ZHAW
oehlemar 0:6a4d3264c067 4 * All rights reserved.
oehlemar 0:6a4d3264c067 5 */
oehlemar 0:6a4d3264c067 6
oehlemar 0:6a4d3264c067 7 #ifndef STATE_MACHINE_H_
oehlemar 0:6a4d3264c067 8 #define STATE_MACHINE_H_
oehlemar 0:6a4d3264c067 9
oehlemar 0:6a4d3264c067 10 #include <cstdlib>
oehlemar 0:6a4d3264c067 11 #include <mbed.h>
oehlemar 0:6a4d3264c067 12 #include "Controller.h"
oehlemar 0:6a4d3264c067 13 #include "IRSensor.h"
oehlemar 0:6a4d3264c067 14
oehlemar 0:6a4d3264c067 15 /**
oehlemar 0:6a4d3264c067 16 * This class implements a simple state machine for a mobile robot.
oehlemar 0:6a4d3264c067 17 * It allows to move the robot forward, and to turn left or right,
oehlemar 0:6a4d3264c067 18 * depending on distance measurements, to avoid collisions with
oehlemar 0:6a4d3264c067 19 * obstacles.
oehlemar 0:6a4d3264c067 20 */
oehlemar 0:6a4d3264c067 21 class StateMachine {
oehlemar 0:6a4d3264c067 22
oehlemar 0:6a4d3264c067 23 public:
oehlemar 0:6a4d3264c067 24
oehlemar 0:6a4d3264c067 25 static const int ROBOT_OFF = 0; // discrete states of this state machine
oehlemar 0:6a4d3264c067 26 static const int MOVE_FORWARD = 1;
oehlemar 0:6a4d3264c067 27 static const int TURN_LEFT = 2;
oehlemar 0:6a4d3264c067 28 static const int TURN_RIGHT = 3;
oehlemar 0:6a4d3264c067 29 static const int SLOWING_DOWN = 4;
oehlemar 0:6a4d3264c067 30
oehlemar 0:6a4d3264c067 31 StateMachine(Controller& controller, DigitalOut& enableMotorDriver, DigitalOut& led0, DigitalOut& led1, DigitalOut& led2, DigitalOut& led3, DigitalOut& led4, DigitalOut& led5, DigitalIn& button, IRSensor& irSensor0, IRSensor& irSensor1, IRSensor& irSensor2, IRSensor& irSensor3, IRSensor& irSensor4, IRSensor& irSensor5);
oehlemar 0:6a4d3264c067 32 virtual ~StateMachine();
oehlemar 0:6a4d3264c067 33 int getState();
oehlemar 0:6a4d3264c067 34
oehlemar 0:6a4d3264c067 35 private:
oehlemar 0:6a4d3264c067 36
oehlemar 0:6a4d3264c067 37 static const float PERIOD; // period of task in [s]
oehlemar 0:6a4d3264c067 38 static const float DISTANCE_THRESHOLD; // minimum allowed distance to obstacle in [m]
oehlemar 0:6a4d3264c067 39 static const float TRANSLATIONAL_VELOCITY; // translational velocity in [m/s]
oehlemar 0:6a4d3264c067 40 static const float ROTATIONAL_VELOCITY; // rotational velocity in [rad/s]
oehlemar 0:6a4d3264c067 41
oehlemar 0:6a4d3264c067 42 Controller& controller;
oehlemar 0:6a4d3264c067 43 DigitalOut& enableMotorDriver;
oehlemar 0:6a4d3264c067 44 DigitalOut& led0;
oehlemar 0:6a4d3264c067 45 DigitalOut& led1;
oehlemar 0:6a4d3264c067 46 DigitalOut& led2;
oehlemar 0:6a4d3264c067 47 DigitalOut& led3;
oehlemar 0:6a4d3264c067 48 DigitalOut& led4;
oehlemar 0:6a4d3264c067 49 DigitalOut& led5;
oehlemar 0:6a4d3264c067 50 DigitalIn& button;
oehlemar 0:6a4d3264c067 51 IRSensor& irSensor0;
oehlemar 0:6a4d3264c067 52 IRSensor& irSensor1;
oehlemar 0:6a4d3264c067 53 IRSensor& irSensor2;
oehlemar 0:6a4d3264c067 54 IRSensor& irSensor3;
oehlemar 0:6a4d3264c067 55 IRSensor& irSensor4;
oehlemar 0:6a4d3264c067 56 IRSensor& irSensor5;
oehlemar 0:6a4d3264c067 57 int state;
oehlemar 0:6a4d3264c067 58 int buttonNow;
oehlemar 0:6a4d3264c067 59 int buttonBefore;
oehlemar 0:6a4d3264c067 60 Ticker ticker;
oehlemar 0:6a4d3264c067 61
oehlemar 0:6a4d3264c067 62 void run();
oehlemar 0:6a4d3264c067 63 };
oehlemar 0:6a4d3264c067 64
oehlemar 0:6a4d3264c067 65 #endif /* STATE_MACHINE_H_ */
oehlemar 0:6a4d3264c067 66