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 * Main.cpp
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 #include <mbed.h>
Jacqueline 0:20ec9d702676 8 #include "IRSensor.h"
Jacqueline 0:20ec9d702676 9 #include "EncoderCounter.h"
Jacqueline 0:20ec9d702676 10 #include "Controller.h"
Jacqueline 0:20ec9d702676 11 #include "StateMachine.h"
Jacqueline 0:20ec9d702676 12
Jacqueline 0:20ec9d702676 13 int main() {
Jacqueline 0:20ec9d702676 14
Jacqueline 0:20ec9d702676 15 // initialise digital inputs and outputs
Jacqueline 0:20ec9d702676 16
Jacqueline 0:20ec9d702676 17 DigitalIn button(USER_BUTTON);
Jacqueline 0:20ec9d702676 18
Jacqueline 0:20ec9d702676 19 DigitalOut ledGreen(LED1);
Jacqueline 0:20ec9d702676 20 DigitalOut ledBlue(LED2);
Jacqueline 0:20ec9d702676 21 DigitalOut ledRed(LED3);
Jacqueline 0:20ec9d702676 22
Jacqueline 0:20ec9d702676 23 DigitalOut led0(PD_4);
Jacqueline 0:20ec9d702676 24 DigitalOut led1(PD_3);
Jacqueline 0:20ec9d702676 25 DigitalOut led2(PD_6);
Jacqueline 0:20ec9d702676 26 DigitalOut led3(PD_2);
Jacqueline 0:20ec9d702676 27 DigitalOut led4(PD_7);
Jacqueline 0:20ec9d702676 28 DigitalOut led5(PD_5);
Jacqueline 0:20ec9d702676 29
Jacqueline 0:20ec9d702676 30 // create distance sensor objects
Jacqueline 0:20ec9d702676 31
Jacqueline 0:20ec9d702676 32 AnalogIn distance(PA_0);
Jacqueline 0:20ec9d702676 33 DigitalOut enable(PG_1);
Jacqueline 0:20ec9d702676 34 DigitalOut bit0(PF_0);
Jacqueline 0:20ec9d702676 35 DigitalOut bit1(PF_1);
Jacqueline 0:20ec9d702676 36 DigitalOut bit2(PF_2);
Jacqueline 0:20ec9d702676 37
Jacqueline 0:20ec9d702676 38 enable = 1;
Jacqueline 0:20ec9d702676 39
Jacqueline 0:20ec9d702676 40 IRSensor irSensor0(distance, bit0, bit1, bit2, 0);
Jacqueline 0:20ec9d702676 41 IRSensor irSensor1(distance, bit0, bit1, bit2, 1);
Jacqueline 0:20ec9d702676 42 IRSensor irSensor2(distance, bit0, bit1, bit2, 2);
Jacqueline 0:20ec9d702676 43 IRSensor irSensor3(distance, bit0, bit1, bit2, 3);
Jacqueline 0:20ec9d702676 44 IRSensor irSensor4(distance, bit0, bit1, bit2, 4);
Jacqueline 0:20ec9d702676 45 IRSensor irSensor5(distance, bit0, bit1, bit2, 5);
Jacqueline 0:20ec9d702676 46
Jacqueline 0:20ec9d702676 47 // create motor controller objects
Jacqueline 0:20ec9d702676 48
Jacqueline 0:20ec9d702676 49 DigitalOut enableMotorDriver(PG_0);
Jacqueline 0:20ec9d702676 50 DigitalIn motorDriverFault(PD_1);
Jacqueline 0:20ec9d702676 51 DigitalIn motorDriverWarning(PD_0);
Jacqueline 0:20ec9d702676 52
Jacqueline 0:20ec9d702676 53 PwmOut pwmLeft(PF_9);
Jacqueline 0:20ec9d702676 54 PwmOut pwmRight(PF_8);
Jacqueline 0:20ec9d702676 55
Jacqueline 0:20ec9d702676 56 // create encoder counter objects
Jacqueline 0:20ec9d702676 57
Jacqueline 0:20ec9d702676 58 EncoderCounter counterLeft(PD_12, PD_13);
Jacqueline 0:20ec9d702676 59 EncoderCounter counterRight(PB_4, PC_7);
Jacqueline 0:20ec9d702676 60
Jacqueline 0:20ec9d702676 61 // create robot controller objects
Jacqueline 0:20ec9d702676 62
Jacqueline 0:20ec9d702676 63 Controller controller(pwmLeft, pwmRight, counterLeft, counterRight);
Jacqueline 0:20ec9d702676 64 StateMachine stateMachine(controller, enableMotorDriver, led0, led1, led2, led3, led4, led5, button, irSensor0, irSensor1, irSensor2, irSensor3, irSensor4, irSensor5);
Jacqueline 0:20ec9d702676 65
Jacqueline 0:20ec9d702676 66 // enter main loop
Jacqueline 0:20ec9d702676 67
Jacqueline 0:20ec9d702676 68 while (true) {
Jacqueline 0:20ec9d702676 69
Jacqueline 0:20ec9d702676 70 if (stateMachine.getState() == StateMachine::MOVE_FORWARD) {
Jacqueline 0:20ec9d702676 71
Jacqueline 0:20ec9d702676 72 ledGreen = 1;
Jacqueline 0:20ec9d702676 73 ledBlue = 0;
Jacqueline 0:20ec9d702676 74 ledRed = 0;
Jacqueline 0:20ec9d702676 75
Jacqueline 0:20ec9d702676 76 } else if ((stateMachine.getState() == StateMachine::TURN_LEFT) || (stateMachine.getState() == StateMachine::TURN_RIGHT)) {
Jacqueline 0:20ec9d702676 77
Jacqueline 0:20ec9d702676 78 ledGreen = 1;
Jacqueline 0:20ec9d702676 79 ledBlue = 1;
Jacqueline 0:20ec9d702676 80 ledRed = 0;
Jacqueline 0:20ec9d702676 81
Jacqueline 0:20ec9d702676 82 } else {
Jacqueline 0:20ec9d702676 83
Jacqueline 0:20ec9d702676 84 ledGreen = 0;
Jacqueline 0:20ec9d702676 85 ledBlue = 0;
Jacqueline 0:20ec9d702676 86 ledRed = 1;
Jacqueline 0:20ec9d702676 87 }
Jacqueline 0:20ec9d702676 88
Jacqueline 0:20ec9d702676 89 // print robot pose into terminal
Jacqueline 0:20ec9d702676 90
Jacqueline 0:20ec9d702676 91 printf("%.3f %.3f %.3f\r\n", controller.getX(), controller.getY(), controller.getAlpha());
Jacqueline 0:20ec9d702676 92
Jacqueline 0:20ec9d702676 93 wait(0.1);
Jacqueline 0:20ec9d702676 94 }
Jacqueline 0:20ec9d702676 95 }
Jacqueline 0:20ec9d702676 96