gugus

Dependencies:   mbed

Main.cpp

Committer:
Brignall
Date:
2018-05-18
Revision:
0:1a0321f1ffbc

File content as of revision 0:1a0321f1ffbc:

/*
 * Main.cpp
 * Copyright (c) 2018, ZHAW
 * All rights reserved.
 */

#include <cstdlib>
#include <mbed.h>
#include "EncoderCounter.h"
#include "IRSensor.h"
#include "IMU.h"
#include "LIDAR.h"
#include "Controller.h"
#include "StateMachine.h"
#include "SerialServer.h"

int main() {
    
    // create miscellaneous periphery objects
    
    DigitalOut led(LED1);
    DigitalIn button(USER_BUTTON);
    
    DigitalOut led0(PC_8);
    DigitalOut led1(PC_6);
    DigitalOut led2(PB_12);
    DigitalOut led3(PA_7);
    DigitalOut led4(PC_0);
    DigitalOut led5(PC_9);
    
    // create motor control objects
    
    DigitalOut enableMotorDriver(PB_2);
    DigitalIn motorDriverFault(PB_14);
    DigitalIn motorDriverWarning(PB_15);
    
    PwmOut pwmLeft(PA_8);
    PwmOut pwmRight(PA_9);
    
    EncoderCounter counterLeft(PB_6, PB_7);
    EncoderCounter counterRight(PA_6, PC_7);
    
    // create distance sensor objects
    
    DigitalOut enableIRSensors(PC_1);
    enableIRSensors = 1;
    
    AnalogIn distance(PB_1);
    DigitalOut bit0(PH_1);
    DigitalOut bit1(PC_2);
    DigitalOut bit2(PC_3);
    
    IRSensor irSensor0(distance, bit0, bit1, bit2, 0);
    IRSensor irSensor1(distance, bit0, bit1, bit2, 1);
    IRSensor irSensor2(distance, bit0, bit1, bit2, 2);
    IRSensor irSensor3(distance, bit0, bit1, bit2, 3);
    IRSensor irSensor4(distance, bit0, bit1, bit2, 4);
    IRSensor irSensor5(distance, bit0, bit1, bit2, 5);
    
    // create LIDAR object
    
    PwmOut pwm(PA_10);
    pwm.period(0.00005f);
    pwm.write(0.5f);      // 50% duty-cycle
    
    RawSerial uart(PA_0, PA_1);
    
    LIDAR lidar(uart);
    
    // create robot controller objects
    
    Controller controller(pwmLeft, pwmRight, counterLeft, counterRight);
    StateMachine stateMachine(controller, enableMotorDriver, led0, led1, led2, led3, led4, led5, button, irSensor0, irSensor1, irSensor2, irSensor3, irSensor4, irSensor5);
    
    // create serial server object
    
    RawSerial serial(PB_10, PC_5);
    serial.baud(9600);
    serial.format(8, SerialBase::None, 1);
    
    DigitalOut reset(PB_3);
    DigitalOut modes1(PB_4);
    
    modes1 = 0;
    
    reset = 1; wait(0.1f);
    reset = 0; wait(0.1f);
    reset = 1; wait(0.1f);
    
    SerialServer serialServer(serial, lidar, controller);
    
    while (true) {
        
        led = !led; // toggle led
        
        wait(0.2f); // wait for 200 ms
        
        lidar.lookForBeacon();
        
        // bitte Lagekorrektur implementieren!
    }
}