Testing

Dependencies:   mbed mbed-rtos 4DGL-uLCD-SE Motor BNO055 SDFileSystem HC_SR04_Ultrasonic_Library

main.cpp

Committer:
elisham11
Date:
2019-11-28
Revision:
0:d2f4489d6f31

File content as of revision 0:d2f4489d6f31:

#include "mbed.h"
#include "rtos.h" //mbed's thread and mutex are included here
#include <string>
#include "SDFileSystem.h"
#include "Motor.h"
#include "BNO055.h"
#include "ultrasonic.h"

//Timer
Timer t; //t.start(), t.stop(), t.read()

//Semaphore s(1);
DigitalOut led1(LED1);
DigitalOut led2(LED2);
DigitalOut led3(LED3);
DigitalOut led4(LED4);

//H-bridge
Motor m_left(p21, p15, p16); // pwm,fwd,rev pwmA
Motor m_right(p22, p19, p20); // pwm,fwd,rev 

//SDcard
SDFileSystem sd(p5, p6, p7, p8, "sd");

//Sonar 1 & 2
//void newdist();
//ultrasonic mu1(p29, p30, .07, 1, &newdist); 
//ultrasonic mu2(p11, p12, .07, 1, &newdist);

//Bluetooth
// don't forgot to use mutex and volatile
//RawSerial  pc(USBTX, USBRX);
/*
1 for imu rotation
2 for reverse
3 for forward
4 for left
5 for right
*/
Serial pc(USBTX, USBRX);
RawSerial  Bluetooth(p28,p27);

//Global variables for bluetooth control
bool sonarOn = false; //Indicates when sonar is taking measurements
bool running = true; //Keeps main while loop going


   
//Code for interrupt routine for Bluetooth input
enum statetype {start = 0, got_exclm, got_B, got_one, got_two, got_three, got_five, got_six, got_seven, got_eight, got_11, got_21, got_31, got_51, got_61, got_71, got_81};
statetype state = start;
//Interrupt routine to parse message with one new character per serial RX interrupt
void parse_message()
{
    led1 = !led1;
    switch (state)
    {
        case start:
            if (Bluetooth.getc()=='!')
            {
                led2 = 1;
                state = got_exclm;
            }
            else state = start;
            break;
        case got_exclm:
            
            if (Bluetooth.getc() == 'B')
            {
                led3 = 1;
                state = got_B;
            }
            else state = start;
            break;
        case got_B:
        {
            char recv = Bluetooth.getc();
            if (recv == '1') state = got_one;
            else if (recv == '2') state = got_two;
            else if (recv == '3') state = got_three;
            else if (recv == '5') state = got_five;
            else if (recv == '6') state = got_six;
            else if (recv == '7') state = got_seven;
            else if (recv == '8') state = got_eight;
            else state = start;
        }
        break;
        case got_one:
            if (Bluetooth.getc() == '1')
            {
                
            }
            else state = start;
            break;
        case got_two: //Stop everything
            if (Bluetooth.getc() == '1')
            {
                //Make sure motors are stopped
                m_left.speed(0.0); 
                m_right.speed(0.0);
                sonarOn = false;
                running = false;
            }
            else state = start;
            break;  
        case got_three: //currently unimplemented
            if (Bluetooth.getc() == '1')
            {
                
            }
            else state = start;
            break;
        case got_five: //up arrow pressed
        {
            char recv = Bluetooth.getc();
            if (recv == '1') //Button pressed or held
            {
                sonarOn = true;
                m_left.speed(0.3);
                m_right.speed(0.3);
                led3 = 1;
            }
            else if (recv == '0') //Button released
            {
                sonarOn = false;
                m_left.speed(0.0);
                m_right.speed(0.0);
                led4 = 1;
            }
            else state = start;
        }
            break;      
        case got_six: //down arrow pressed
        {
            char recv = Bluetooth.getc();
            if (recv == '1') //Button pressed or held
            {
                sonarOn = true;
                m_left.speed(-0.3);
                m_right.speed(-0.3);
            }
            else if (recv == '0')
            {
                sonarOn = false;
                m_left.speed(0.0);
                m_right.speed(0.0);
            }
            else state = start;
        }
            break;    
        case got_seven: //turn left
        {
            char recv = Bluetooth.getc();
            sonarOn = false;
            if (recv == '1')
            {
                m_left.speed(-0.3);
                m_right.speed(0.3);
            }
            else if (recv == '0')
            {
                m_left.speed(0.0);
                m_right.speed(0.0);
            }
            else state = start;
        }
            break;  
        case got_eight: //turn right
        {
            char recv = Bluetooth.getc();
            sonarOn = false;
            if (recv == '1')
            {
                m_left.speed(0.3);
                m_right.speed(-0.3);
            }
            else if (recv == '0')
            {
                m_left.speed(0.0);
                m_right.speed(0.0);
            }
            else state = start;
        }
            break;  

        default:
            Bluetooth.getc();
            state = start;
    }
}


//phototransistor and IC





//Function to run in thread for speaker music    


void newDist()
{
    
}
    


int main() 
{
    
    //Thread t1;
    //Thread t2;
    //Thread t3;
    //t1.set_priority(osPriorityHigh);
    //t2.set_priority(osPriorityLow);
    //t3.set_priority(osPriorityRealtime);

    
    //Thread t4; 
    //t4.start(parse_direction);
    
    //Attach Bluetooth interrupt routine
    Bluetooth.attach(&parse_message,Serial::RxIrq);

    while (1)
    {
        //printf("print\t");
        Thread::wait(1000);
    }
    
    
    
}