segway_self balancing robot 4180 project

Dependencies:   mbed mbed-rtos LSM9DS1_Library

main.cpp

Committer:
pandirimukund
Date:
2020-04-18
Revision:
10:aafadd98d91c
Parent:
9:28821420f7a4

File content as of revision 10:aafadd98d91c:

#include "mbed.h"
#include "rtos.h"

DigitalOut myled(LED2);

Ticker bluetooth;
Serial pc(USBTX, USBRX);

Mutex parameters_mutex;

//Control system variables
float rp = 50;
float rd = 51;
float ri = 50;
float desired_angle = 0;



Serial blue(p28,p27);

void bluetooth_update() {
    char bnum=0;
    char bhit=0;
    while(1){
    while (blue.getc()!='!') {
        
        }
        if (blue.getc()=='B') { //button data packet
            bnum = blue.getc(); //button number
            pc.printf("%d",bnum);
            bhit = blue.getc(); //1=hit, 0=release
            parameters_mutex.lock();
            if (blue.getc()==char(~('!' + 'B' + bnum + bhit))) { //checksum OK?
                myled = bnum - '0'; //current button number will appear on LEDs
                switch (bnum) {
                    case '1': //number button 1
                        if (bhit=='1') {
                            rd += 1;
                        } else {
                            //add release code here
                        }
                        break;
                    case '2': //number button 2
                        if (bhit=='1') {
                            ri += 1;
                        } else {
                            //add release code here
                        }
                        break;
                    case '3': //number button 3
                        if (bhit=='1') {
                            rd -= 1;
                        } else {
                            //add release code here
                        }
                        break;
                    case '4': //number button 4
                        if (bhit=='1') {
                            ri -= 1;
                        } else {
                            //add release code here
                        }
                        break;
                    case '5': //button 5 up arrow
                        if (bhit=='1') {
                            rp += 1;
                        } else {
                            //add release code here
                        }
                        break;
                    case '6': //button 6 down arrow
                        if (bhit=='1') {
                            rp -= 1;
                        } else {
                            //add release code here
                        }
                        break;
                    case '7': //button 7 left arrow
                        if (bhit=='1') {
                            desired_angle -= 1;
                        } else {
                            //add release code here
                        }
                        break;
                    case '8': //button 8 right arrow
                        if (bhit=='1') {
                            desired_angle += 1;
                        } else {
                            //add release code here
                        }
                        break;
                    default:
                        break;
                }
            }
            parameters_mutex.unlock();
        }
        Thread::wait(100);
    }
}

int main() {
    pc.printf("this is running");
    //bluetooth.attach(&bluetooth_update, 0.1);
    while(1) {
//        bluetooth_update();
        parameters_mutex.lock();
        pc.printf("rp: %f, rd: %f, ri: %f, desired_angle: %f\n", rp, rd, ri, desired_angle);
        parameters_mutex.unlock();
        Thread::wait(0.1);
    }
}