kubtss / Mbed 2 deprecated BIRD2017

Dependencies:   mbed-rtos mbed

Committer:
naoya1687
Date:
Wed Mar 01 14:34:27 2017 +0000
Revision:
34:770a6bbb4d63
Parent:
26:a53c3208ac35
Child:
35:63ccdae58da4
ServoSend.h

Who changed what in which revision?

UserRevisionLine numberNew contents of line
shimogamo 9:d1fc0805ec7d 1 #include "mbed.h"
shimogamo 9:d1fc0805ec7d 2 #include "Global.h"
shimogamo 9:d1fc0805ec7d 3 #include "Init.h"
shimogamo 9:d1fc0805ec7d 4 #include <string>
shimogamo 9:d1fc0805ec7d 5 #include <iostream>
shimogamo 9:d1fc0805ec7d 6
shimogamo 9:d1fc0805ec7d 7 std::string Init::strbuf;
shimogamo 9:d1fc0805ec7d 8
shimogamo 26:a53c3208ac35 9 //2016年度で追加したコマンド方式のニュートラル調整システム
shimogamo 26:a53c3208ac35 10 //RTOS前提のプログラムとなっているが、RTOSを廃止しても同じようなものは作れるはず
shimogamo 26:a53c3208ac35 11 //mbedとPCをUSBで接続してシリアル通信でデータを送信することによって、mainのpc_rx()でそのデータがGlobal::initqueueに格納される。
shimogamo 26:a53c3208ac35 12 //それはinitializeTask()で常時待機しているgetSerialで読み込まれる。
shimogamo 26:a53c3208ac35 13 //また、設定されたパラメータはGlobal::filewrite()することにより、mbedのLocalFileSystemで不揮発メモリにINIT.csvというファイル名で書き込まれる。
shimogamo 26:a53c3208ac35 14 //そのINIT.csvは、mbed起動時にGlobal::fileread()によって読み込まれ、パラメータが更新される。(これにより電源が落ちてもパラメータは保持される)
shimogamo 26:a53c3208ac35 15
shimogamo 9:d1fc0805ec7d 16 void Init::getSerial(){
shimogamo 12:8e39bb45c61c 17 osEvent evt = Global::initqueue.get();
shimogamo 9:d1fc0805ec7d 18 if(evt.status == osEventMessage){
shimogamo 9:d1fc0805ec7d 19 char temp = evt.value.v;
shimogamo 9:d1fc0805ec7d 20 strbuf.push_back(temp);
shimogamo 9:d1fc0805ec7d 21 if(temp == '\n'){
shimogamo 9:d1fc0805ec7d 22 std::string::size_type spaceIndex = strbuf.find(" ");
shimogamo 9:d1fc0805ec7d 23
shimogamo 9:d1fc0805ec7d 24 if (spaceIndex != std::string::npos) {//数値データがあるコマンド(" "がある場合)
shimogamo 9:d1fc0805ec7d 25 char *gomi;
shimogamo 9:d1fc0805ec7d 26 std::string command = strbuf.substr(0, spaceIndex);
shimogamo 9:d1fc0805ec7d 27 double num = strtod(strbuf.substr(spaceIndex+1, strbuf.size()-2).c_str(), &gomi);//strbuf.size()-1には'\n'が入っている
shimogamo 9:d1fc0805ec7d 28 printf("coms=%s, num=%f\n", command.c_str(), num);
shimogamo 9:d1fc0805ec7d 29 setting(command, num);
shimogamo 9:d1fc0805ec7d 30
shimogamo 9:d1fc0805ec7d 31 }else{//数値データがないコマンド(" "がない場合)
shimogamo 9:d1fc0805ec7d 32 std::string command = strbuf.substr(0,strbuf.size()-2);
shimogamo 9:d1fc0805ec7d 33 setting(command);
shimogamo 9:d1fc0805ec7d 34 }
shimogamo 9:d1fc0805ec7d 35 strbuf.clear();
shimogamo 9:d1fc0805ec7d 36 }
naoya1687 34:770a6bbb4d63 37 if(strbuf.size() > 30){
naoya1687 34:770a6bbb4d63 38 strbuf.clear();
naoya1687 34:770a6bbb4d63 39 }
shimogamo 9:d1fc0805ec7d 40 }
shimogamo 9:d1fc0805ec7d 41 }
shimogamo 9:d1fc0805ec7d 42
shimogamo 9:d1fc0805ec7d 43
shimogamo 9:d1fc0805ec7d 44 void Init::setting(std::string command, double num){
shimogamo 9:d1fc0805ec7d 45 if(command == "eleneu"){
shimogamo 9:d1fc0805ec7d 46 Global::setneutralpitch(num);
shimogamo 9:d1fc0805ec7d 47 }else if(command == "elemax"){
shimogamo 9:d1fc0805ec7d 48 Global::setmaxpitch(num);
shimogamo 9:d1fc0805ec7d 49 }else if(command == "elemin"){
shimogamo 9:d1fc0805ec7d 50 Global::setminpitch(num);
shimogamo 9:d1fc0805ec7d 51 }else if(command == "rudneu"){
shimogamo 9:d1fc0805ec7d 52 Global::setneutralyaw(num);
shimogamo 9:d1fc0805ec7d 53 }else if(command == "rudmax"){
shimogamo 9:d1fc0805ec7d 54 Global::setmaxyaw(num);
shimogamo 9:d1fc0805ec7d 55 }else if(command == "rudmin"){
shimogamo 9:d1fc0805ec7d 56 Global::setminyaw(num);
shimogamo 9:d1fc0805ec7d 57
shimogamo 9:d1fc0805ec7d 58 }else if(command == "eleneudeg"){
shimogamo 9:d1fc0805ec7d 59 Global::setneutralpitchdegree(num);
shimogamo 9:d1fc0805ec7d 60 }else if(command == "elemaxdeg"){
shimogamo 9:d1fc0805ec7d 61 Global::setmaxpitchdegree(num);
shimogamo 9:d1fc0805ec7d 62 }else if(command == "elemindeg"){
shimogamo 9:d1fc0805ec7d 63 Global::setminpitchdegree(num);
shimogamo 9:d1fc0805ec7d 64 }else if(command == "rudneudeg"){
shimogamo 9:d1fc0805ec7d 65 Global::setneutralyawdegree(num);
shimogamo 9:d1fc0805ec7d 66 }else if(command == "rudmaxdeg"){
shimogamo 9:d1fc0805ec7d 67 Global::setmaxyawdegree(num);
shimogamo 9:d1fc0805ec7d 68 }else if(command == "rudmindeg"){
shimogamo 9:d1fc0805ec7d 69 Global::setminyawdegree(num);
shimogamo 9:d1fc0805ec7d 70
shimogamo 9:d1fc0805ec7d 71 }else if(command == "elemaxplay"){
shimogamo 9:d1fc0805ec7d 72 Global::setmaxpitchplayratio(num);
shimogamo 9:d1fc0805ec7d 73 }else if(command == "eleminplay"){
shimogamo 9:d1fc0805ec7d 74 Global::setminpitchplayratio(num);
shimogamo 9:d1fc0805ec7d 75 }else if(command == "rudmaxplay"){
shimogamo 9:d1fc0805ec7d 76 Global::setmaxyawplayratio(num);
shimogamo 9:d1fc0805ec7d 77 }else if(command == "rudminplay"){
shimogamo 9:d1fc0805ec7d 78 Global::setminyawplayratio(num);
shimogamo 9:d1fc0805ec7d 79 }else if(command == "eletrim"){
shimogamo 9:d1fc0805ec7d 80 Global::settrimpitchrate(num);
shimogamo 9:d1fc0805ec7d 81
shimogamo 9:d1fc0805ec7d 82 }else{
shimogamo 9:d1fc0805ec7d 83 printf("Invalid Input\n");
shimogamo 9:d1fc0805ec7d 84 }
shimogamo 9:d1fc0805ec7d 85 }
shimogamo 9:d1fc0805ec7d 86
shimogamo 9:d1fc0805ec7d 87 void Init::setting(std::string command){
shimogamo 9:d1fc0805ec7d 88 if(command == "eleneu"){
shimogamo 21:b1419813f2d4 89 Global::setneutralpitch(Global::getpitch()+Global::getneutralpitch());
shimogamo 9:d1fc0805ec7d 90 }else if(command == "elemax"){
shimogamo 21:b1419813f2d4 91 Global::setmaxpitch(Global::getpitch()+Global::getneutralpitch());
shimogamo 9:d1fc0805ec7d 92 }else if(command == "elemin"){
shimogamo 21:b1419813f2d4 93 Global::setminpitch(Global::getpitch()+Global::getneutralpitch());
shimogamo 9:d1fc0805ec7d 94 }else if(command == "rudneu"){
shimogamo 21:b1419813f2d4 95 Global::setneutralyaw(Global::getyaw()+Global::getneutralyaw());
shimogamo 9:d1fc0805ec7d 96 }else if(command == "rudmax"){
shimogamo 21:b1419813f2d4 97 Global::setmaxyaw(Global::getyaw()+Global::getneutralyaw());
shimogamo 9:d1fc0805ec7d 98 }else if(command == "rudmin"){
shimogamo 21:b1419813f2d4 99 Global::setminyaw(Global::getyaw()+Global::getneutralyaw());
shimogamo 9:d1fc0805ec7d 100
shimogamo 9:d1fc0805ec7d 101 }else if(command == "eleneudeg"){
shimogamo 9:d1fc0805ec7d 102 Global::setneutralpitchdegree(Global::getpitchdegree());
shimogamo 9:d1fc0805ec7d 103 }else if(command == "elemaxdeg"){
shimogamo 9:d1fc0805ec7d 104 Global::setmaxpitchdegree(Global::getpitchdegree());
shimogamo 9:d1fc0805ec7d 105 }else if(command == "elemindeg"){
shimogamo 9:d1fc0805ec7d 106 Global::setminpitchdegree(Global::getpitchdegree());
shimogamo 9:d1fc0805ec7d 107 }else if(command == "rudneudeg"){
shimogamo 9:d1fc0805ec7d 108 Global::setneutralyawdegree(Global::getyawdegree());
shimogamo 9:d1fc0805ec7d 109 }else if(command == "rudmaxdeg"){
shimogamo 9:d1fc0805ec7d 110 Global::setmaxyawdegree(Global::getyawdegree());
shimogamo 9:d1fc0805ec7d 111 }else if(command == "rudmindeg"){
shimogamo 9:d1fc0805ec7d 112 Global::setminyawdegree(Global::getyawdegree());
shimogamo 10:0a4bf8c82493 113
shimogamo 9:d1fc0805ec7d 114 }else if(command == "show"){
shimogamo 9:d1fc0805ec7d 115 showParam();
shimogamo 22:c85649ff834b 116
shimogamo 22:c85649ff834b 117 }else if(command == "write"){
shimogamo 22:c85649ff834b 118 //ここで,ニュートラル情報をLocalFileに保存
naoya1687 34:770a6bbb4d63 119 //Global::filewrite();
shimogamo 9:d1fc0805ec7d 120
shimogamo 9:d1fc0805ec7d 121 }else{
shimogamo 9:d1fc0805ec7d 122 printf("Invalid Input\n");
shimogamo 9:d1fc0805ec7d 123 }
shimogamo 9:d1fc0805ec7d 124 }
shimogamo 9:d1fc0805ec7d 125
shimogamo 9:d1fc0805ec7d 126 void Init::showParam(){
shimogamo 17:887cfe1d309f 127 printf("------Servo Parameter------\n");
shimogamo 17:887cfe1d309f 128 printf("elevatorNeutral(eleneu) = %f\n", Global::getneutralpitch());
shimogamo 17:887cfe1d309f 129 printf("elevatorMax(elemax) = %f\n", Global::getmaxpitch());
shimogamo 17:887cfe1d309f 130 printf("elevatorMin(elemin) = %f\n", Global::getminpitch());
shimogamo 17:887cfe1d309f 131 printf("rudderNeutral(rudneu) = %f\n", Global::getneutralyaw());
shimogamo 17:887cfe1d309f 132 printf("rudderMax(rudmax) = %f\n", Global::getmaxyaw());
shimogamo 17:887cfe1d309f 133 printf("rudderMin(rudmin) = %f\n", Global::getminyaw());
shimogamo 9:d1fc0805ec7d 134 printf("----Controller Parameter----\n");
shimogamo 17:887cfe1d309f 135 printf("elevatorNeutral(eleneudeg) = %f\n", Global::getneutralpitchdegree());
shimogamo 17:887cfe1d309f 136 printf("elevatorMax(elemaxdeg) = %f\n", Global::getmaxpitchdegree());
shimogamo 17:887cfe1d309f 137 printf("elevatorMin(elemindeg) = %f\n", Global::getminpitchdegree());
shimogamo 17:887cfe1d309f 138 printf("rudderNeutral(rudneudeg) = %f\n", Global::getneutralyawdegree());
shimogamo 17:887cfe1d309f 139 printf("rudderMax(rudmaxdeg) = %f\n", Global::getmaxyawdegree());
shimogamo 17:887cfe1d309f 140 printf("rudderMin(rudmindeg) = %f\n", Global::getminyawdegree());
shimogamo 17:887cfe1d309f 141 printf("-------Play Parameter-------\n");
shimogamo 17:887cfe1d309f 142 printf("elevatorMaxPlay(elemaxplay) = %f\n", Global::getmaxpitchplayratio());
shimogamo 17:887cfe1d309f 143 printf("elevatorMinPlay(eleminplay) = %f\n", Global::getminpitchplayratio());
shimogamo 17:887cfe1d309f 144 printf("rudderMaxPlay(rudmaxplay) = %f\n", Global::getmaxyawplayratio());
shimogamo 17:887cfe1d309f 145 printf("rudderMinPlay(rudminplay) = %f\n", Global::getminyawplayratio());
shimogamo 9:d1fc0805ec7d 146 printf("-------Trim Parameter-------\n");
shimogamo 17:887cfe1d309f 147 printf("elevatorTrimRate(eletrim) = %f\n", Global::gettrimpitchrate());
shimogamo 17:887cfe1d309f 148 printf("----------------------------\n");
shimogamo 9:d1fc0805ec7d 149 }