Zürcher Eliteeinheit / Mbed 2 deprecated ROME2_P4

Dependencies:   ROME2_P2 mbed

Fork of ROME2_P3 by Zürcher Eliteeinheit

Committer:
Appalco
Date:
Fri Mar 16 13:32:47 2018 +0000
Revision:
0:e360940c4b88
Child:
5:59079b76ac7f
import

Who changed what in which revision?

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