BA / SerialCom

Fork of OmniWheels by Gustav Atmel

Committer:
gustavatmel
Date:
Mon Mar 12 08:07:29 2018 +0000
Revision:
0:d698f15ceaf1
Child:
1:9c5af431a1f1
OmniWheels;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gustavatmel 0:d698f15ceaf1 1 /*
gustavatmel 0:d698f15ceaf1 2 * Main.cpp
gustavatmel 0:d698f15ceaf1 3 * Copyright (c) 2017, ZHAW
gustavatmel 0:d698f15ceaf1 4 * All rights reserved.
gustavatmel 0:d698f15ceaf1 5 *
gustavatmel 0:d698f15ceaf1 6 * Created on: 06.10.2017
gustavatmel 0:d698f15ceaf1 7 * Author: Marcel Honegger
gustavatmel 0:d698f15ceaf1 8 */
gustavatmel 0:d698f15ceaf1 9
gustavatmel 0:d698f15ceaf1 10 #include <cstdlib>
gustavatmel 0:d698f15ceaf1 11 #include <mbed.h>
gustavatmel 0:d698f15ceaf1 12 #include "IRSensor.h"
gustavatmel 0:d698f15ceaf1 13 #include "Controller.h"
gustavatmel 0:d698f15ceaf1 14 #include "StateMachine.h"
gustavatmel 0:d698f15ceaf1 15 #include "SerialServer.h"
gustavatmel 0:d698f15ceaf1 16
gustavatmel 0:d698f15ceaf1 17 using namespace std;
gustavatmel 0:d698f15ceaf1 18
gustavatmel 0:d698f15ceaf1 19 class Main {
gustavatmel 0:d698f15ceaf1 20
gustavatmel 0:d698f15ceaf1 21 public:
gustavatmel 0:d698f15ceaf1 22
gustavatmel 0:d698f15ceaf1 23 Main();
gustavatmel 0:d698f15ceaf1 24 virtual ~Main();
gustavatmel 0:d698f15ceaf1 25
gustavatmel 0:d698f15ceaf1 26 private:
gustavatmel 0:d698f15ceaf1 27
gustavatmel 0:d698f15ceaf1 28 static const uint32_t STACK_SIZE = 8192; // stack size of thread, given in [bytes]
gustavatmel 0:d698f15ceaf1 29
gustavatmel 0:d698f15ceaf1 30 Thread thread;
gustavatmel 0:d698f15ceaf1 31 void run();
gustavatmel 0:d698f15ceaf1 32 };
gustavatmel 0:d698f15ceaf1 33
gustavatmel 0:d698f15ceaf1 34 Main::Main() : thread(osPriorityNormal, STACK_SIZE) {
gustavatmel 0:d698f15ceaf1 35
gustavatmel 0:d698f15ceaf1 36 thread.start(callback(this, &Main::run));
gustavatmel 0:d698f15ceaf1 37 }
gustavatmel 0:d698f15ceaf1 38
gustavatmel 0:d698f15ceaf1 39 Main::~Main() {}
gustavatmel 0:d698f15ceaf1 40
gustavatmel 0:d698f15ceaf1 41 void Main::run() {
gustavatmel 0:d698f15ceaf1 42
gustavatmel 0:d698f15ceaf1 43 // create miscellaneous periphery objects
gustavatmel 0:d698f15ceaf1 44
gustavatmel 0:d698f15ceaf1 45 DigitalOut led(LED1);
gustavatmel 0:d698f15ceaf1 46 DigitalIn button(USER_BUTTON);
gustavatmel 0:d698f15ceaf1 47
gustavatmel 0:d698f15ceaf1 48 DigitalOut led0(PB_1);
gustavatmel 0:d698f15ceaf1 49 DigitalOut led1(PC_3);
gustavatmel 0:d698f15ceaf1 50 DigitalOut led2(PD_2);
gustavatmel 0:d698f15ceaf1 51
gustavatmel 0:d698f15ceaf1 52 // create motor control objects
gustavatmel 0:d698f15ceaf1 53
gustavatmel 0:d698f15ceaf1 54 DigitalOut enableMotorDriver0(PB_5);
gustavatmel 0:d698f15ceaf1 55 DigitalIn motor0Error(PA_13);
gustavatmel 0:d698f15ceaf1 56 PwmOut pwm0(PB_8);
gustavatmel 0:d698f15ceaf1 57 AnalogIn motor0Current(PA_0);
gustavatmel 0:d698f15ceaf1 58
gustavatmel 0:d698f15ceaf1 59 DigitalOut enableMotorDriver1(PB_4);
gustavatmel 0:d698f15ceaf1 60 DigitalIn motor1Error(PA_14);
gustavatmel 0:d698f15ceaf1 61 PwmOut pwm1(PB_9);
gustavatmel 0:d698f15ceaf1 62 AnalogIn motor1Current(PA_1);
gustavatmel 0:d698f15ceaf1 63
gustavatmel 0:d698f15ceaf1 64 DigitalOut enableMotorDriver2(PB_3);
gustavatmel 0:d698f15ceaf1 65 DigitalIn motor2Error(PA_15);
gustavatmel 0:d698f15ceaf1 66 PwmOut pwm2(PB_6);
gustavatmel 0:d698f15ceaf1 67 AnalogIn motor2Current(PA_4);
gustavatmel 0:d698f15ceaf1 68
gustavatmel 0:d698f15ceaf1 69 // create distance sensor objects
gustavatmel 0:d698f15ceaf1 70
gustavatmel 0:d698f15ceaf1 71 AnalogIn distance0(PC_0);
gustavatmel 0:d698f15ceaf1 72 AnalogIn distance1(PC_1);
gustavatmel 0:d698f15ceaf1 73 AnalogIn distance2(PC_2);
gustavatmel 0:d698f15ceaf1 74
gustavatmel 0:d698f15ceaf1 75 IRSensor irSensor0(distance0);
gustavatmel 0:d698f15ceaf1 76 IRSensor irSensor1(distance1);
gustavatmel 0:d698f15ceaf1 77 IRSensor irSensor2(distance2);
gustavatmel 0:d698f15ceaf1 78
gustavatmel 0:d698f15ceaf1 79 // create robot controller objects
gustavatmel 0:d698f15ceaf1 80
gustavatmel 0:d698f15ceaf1 81 Controller controller(pwm0, pwm1, pwm2);
gustavatmel 0:d698f15ceaf1 82 StateMachine stateMachine(controller, enableMotorDriver0, enableMotorDriver1, enableMotorDriver2, led0, led1, led2, button, irSensor0, irSensor1, irSensor2);
gustavatmel 0:d698f15ceaf1 83
gustavatmel 0:d698f15ceaf1 84 // create serial server object
gustavatmel 0:d698f15ceaf1 85
gustavatmel 0:d698f15ceaf1 86 RawSerial serial(PA_11, PA_12);
gustavatmel 0:d698f15ceaf1 87 serial.baud(38400);
gustavatmel 0:d698f15ceaf1 88 serial.format(8, SerialBase::None, 1);
gustavatmel 0:d698f15ceaf1 89
gustavatmel 0:d698f15ceaf1 90 DigitalOut reset(PB_12);
gustavatmel 0:d698f15ceaf1 91 DigitalOut modes1(PB_0);
gustavatmel 0:d698f15ceaf1 92
gustavatmel 0:d698f15ceaf1 93 modes1 = 0;
gustavatmel 0:d698f15ceaf1 94
gustavatmel 0:d698f15ceaf1 95 reset = 1; Thread::wait(100);
gustavatmel 0:d698f15ceaf1 96 reset = 0; Thread::wait(100);
gustavatmel 0:d698f15ceaf1 97 reset = 1; Thread::wait(100);
gustavatmel 0:d698f15ceaf1 98
gustavatmel 0:d698f15ceaf1 99 SerialServer serialServer(serial, stateMachine);
gustavatmel 0:d698f15ceaf1 100
gustavatmel 0:d698f15ceaf1 101 // enter main loop
gustavatmel 0:d698f15ceaf1 102
gustavatmel 0:d698f15ceaf1 103 while (true) {
gustavatmel 0:d698f15ceaf1 104
gustavatmel 0:d698f15ceaf1 105 led = !led;
gustavatmel 0:d698f15ceaf1 106
gustavatmel 0:d698f15ceaf1 107 if (stateMachine.getState() == StateMachine::STATE_MANUAL) {
gustavatmel 0:d698f15ceaf1 108 Thread::wait(100);
gustavatmel 0:d698f15ceaf1 109 } else if (stateMachine.getState() == StateMachine::STATE_AUTOMATIC) {
gustavatmel 0:d698f15ceaf1 110 Thread::wait(200);
gustavatmel 0:d698f15ceaf1 111 } else {
gustavatmel 0:d698f15ceaf1 112 Thread::wait(500);
gustavatmel 0:d698f15ceaf1 113 }
gustavatmel 0:d698f15ceaf1 114 }
gustavatmel 0:d698f15ceaf1 115 }
gustavatmel 0:d698f15ceaf1 116
gustavatmel 0:d698f15ceaf1 117 /**
gustavatmel 0:d698f15ceaf1 118 * This is the main program of the ROME2RevG firmware.
gustavatmel 0:d698f15ceaf1 119 */
gustavatmel 0:d698f15ceaf1 120 int32_t main() {
gustavatmel 0:d698f15ceaf1 121
gustavatmel 0:d698f15ceaf1 122 Main main;
gustavatmel 0:d698f15ceaf1 123
gustavatmel 0:d698f15ceaf1 124 Thread::wait(osWaitForever);
gustavatmel 0:d698f15ceaf1 125 }