kubtss / Mbed 2 deprecated BIRD2017

Dependencies:   mbed-rtos mbed

main.cpp

Committer:
shimogamo
Date:
2015-10-10
Revision:
6:0d9fa7152934
Parent:
5:9a1ec02229dd
Child:
7:6f7bd18ce796

File content as of revision 6:0d9fa7152934:

#include "mbed.h"
#include "rtos.h"
#include "Global.h"
#include "ServoManager.h"
#include "ControllerManager.h"
#include "Trim.h"
#include "Cadence.h"
#include "Airspeed.h"
#include "Altitude.h"
#include "Display.h"
#include "XBee.h"
#include <string>
#include <iostream>

#define BUFMAX 20

RawSerial pc(USBTX, USBRX);
Queue<char, BUFMAX> queue;


Display display(p9, p10);
XBee xbee(p13, p14);
Trim trim(p16, p17, p15);
ControllerManager controllerManager(p18,p19,p20);
ServoManager servoManager(p21, p22);
Airspeed airspeed(p26, NC, NC);
Cadence cadence(p29, p30, NC);


void pc_rx(){
    while(pc.readable()==1){
        char buf = pc.getc();
        queue.put((char*)buf);
    }
}


void initializeTask(void const *pvParametersd){
    std::string strbuf;
    
    while(1){
        osEvent evt = queue.get();
        if(evt.status == osEventMessage){
            char temp = evt.value.v;
            strbuf.push_back(temp);
            if(temp == '\n'){    
                std::string::size_type spaceIndex = strbuf.find(" ");
                
                if (spaceIndex != std::string::npos) {
                    char *gomi;
                    std::string command = strbuf.substr(0, spaceIndex);
                    double num = strtod(strbuf.substr(spaceIndex+1, strbuf.size()-1).c_str(), &gomi);
                    
                    pc.printf("coms=%s, num=%f\n", command.c_str(), num);

                    
                    if(command == "eleneu"){
                        Global::setneutralpitch(num);
                    }else if(command == "elemax"){
                        Global::setmaxpitch(num);
                    }else if(command == "elemin"){
                        Global::setminpitch(num);
                    }else if(command == "rudneu"){
                        Global::setneutralyaw(num);
                    }else if(command == "rudmax"){
                        Global::setmaxyaw(num);
                    }else if(command == "rudmin"){
                        Global::setminyaw(num);
                    }
                    
                    strbuf.clear();
                    //ここで,ニュートラル情報をLocalFileに保存
                    Global::filewrite();    
                }
            }
            Thread::wait(10);
            if(strbuf.size() >= BUFMAX){
                pc.printf("\nInput Error ... ");
                strbuf.clear();
                pc.printf("Buffer clear\n");
            }
        }
    }
}


void controlTask(void const *pvParameters){
    while(1){
        trim.update();
        controllerManager.update();
        servoManager.update();
        Thread::wait(50);
    }
}

void airspeedTask(void const *pvParameters){
    while(1){
        airspeed.update();
        Thread::wait(200);
    }
}
    
void cadenceTask(void const *pvParameters){
    while(1){
        cadence.update();
        Thread::wait(200);
    }
}

void displayTask(void const *pvParameters){
    while(1){
        display.update();
        Thread::wait(50);
    }   
}

void xbeeTask(void const *pvParameters){
    while(1){
        xbee.update();
        Thread::wait(50);
    }
}


int main(void){
    printf("start\n");
    
    pc.attach(pc_rx,Serial::RxIrq);

    Global::initialize();
    Thread InitializeTask(initializeTask);
    Thread ControlTask(controlTask);
    Thread AirspeedTask(airspeedTask);
    Thread CadenceTask(cadenceTask);
    Thread DisplayTask(displayTask);
    Thread XbeeTask(xbeeTask);
    printf("Task end\n");
    
    Thread::wait(osWaitForever);   
}