ROME_Praktikum / Mbed 2 deprecated Rome_P_3

Dependencies:   mbed

Committer:
Jacqueline
Date:
Tue Mar 31 11:58:30 2020 +0000
Revision:
0:20ec9d702676
Praktikum_3

Who changed what in which revision?

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