Zürcher Eliteeinheit / Mbed 2 deprecated ROME2_P4

Dependencies:   ROME2_P2 mbed

Fork of ROME2_P3 by Zürcher Eliteeinheit

Committer:
matajarb
Date:
Thu Apr 26 12:22:58 2018 +0000
Revision:
6:67263dc2c2cf
Parent:
5:59079b76ac7f
s?mme du schluch

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