ryou sato / Mbed 2 deprecated PPA

Dependencies:   mbed

Committer:
ryousato
Date:
Fri Feb 19 09:37:34 2021 +0000
Revision:
0:5637e966d2f5
2021/2/19

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ryousato 0:5637e966d2f5 1 //メインプログラム・UARTコマンド受信
ryousato 0:5637e966d2f5 2 #include "mbed.h"
ryousato 0:5637e966d2f5 3 #include <cstdio>
ryousato 0:5637e966d2f5 4 #include <string>
ryousato 0:5637e966d2f5 5 #include "ColorSensor.h"
ryousato 0:5637e966d2f5 6
ryousato 0:5637e966d2f5 7 #define SirialComSpeed 38400 //シリアル通信のBPS設定
ryousato 0:5637e966d2f5 8
ryousato 0:5637e966d2f5 9 #define CommandNumber (sizeof CommandList) / (sizeof(CdListTable)) //コマンドの数(CommandNumber)
ryousato 0:5637e966d2f5 10
ryousato 0:5637e966d2f5 11 //変数定義
ryousato 0:5637e966d2f5 12 int servoflag = 0; //サーボホーン位置情報格納用
ryousato 0:5637e966d2f5 13 int *pservoflag; //ポインター
ryousato 0:5637e966d2f5 14 int off_width = 1720; //サーボホーン初期位置パルス幅[us]
ryousato 0:5637e966d2f5 15 int *poff_width; //ポインター
ryousato 0:5637e966d2f5 16 int on_width = 1500; //サーボホーン終端位置パルス幅[us]
ryousato 0:5637e966d2f5 17 int *pon_width; //ポインター
ryousato 0:5637e966d2f5 18
ryousato 0:5637e966d2f5 19 //シリアル関連
ryousato 0:5637e966d2f5 20 RawSerial SerialCom(SERIAL_TX, SERIAL_RX); //シリアル通信
ryousato 0:5637e966d2f5 21 std::string RcvCharStr = ""; //シリアル通信受信文字格納用
ryousato 0:5637e966d2f5 22
ryousato 0:5637e966d2f5 23 //ピン設定
ryousato 0:5637e966d2f5 24 DigitalOut led(LED1);
ryousato 0:5637e966d2f5 25 PwmOut servopwm(PA_0);
ryousato 0:5637e966d2f5 26 InterruptIn det0(PA_4); //POWER PKG 設置検知
ryousato 0:5637e966d2f5 27 InterruptIn det1(PC_1); //MAIN PKG 設置検知
ryousato 0:5637e966d2f5 28 InterruptIn det2(PC_0); //レバー降ろし検知
ryousato 0:5637e966d2f5 29 DigitalOut cmuxen(PA_8); //カラーセンサー用マルチプレクサENピン
ryousato 0:5637e966d2f5 30 BusOut cmuxaddr(PC_7,PA_9); //カラーセンサー用マルチプレクサADDRバス
ryousato 0:5637e966d2f5 31 DigitalOut rmuxen(PA_10); //リレー用マルチプレクサENピン
ryousato 0:5637e966d2f5 32 BusOut rmuxaddr(PB_10,PB_4,PB_5,PB_3); //リレー用マルチプレクサADDRバス
ryousato 0:5637e966d2f5 33 DigitalInOut relayctl1(PA_11, PIN_OUTPUT, OpenDrain, 0); //個別リレー用制御
ryousato 0:5637e966d2f5 34 DigitalInOut relayctl2(PB_12, PIN_OUTPUT, OpenDrain, 0); //個別リレー用制御
ryousato 0:5637e966d2f5 35 DigitalInOut relayctl3(PB_2, PIN_OUTPUT, OpenDrain, 0); //個別リレー用制御
ryousato 0:5637e966d2f5 36 DigitalInOut relayctl4(PB_1, PIN_OUTPUT, OpenDrain, 0); //個別リレー用制御
ryousato 0:5637e966d2f5 37 DigitalInOut relayctl5(PB_15, PIN_OUTPUT, OpenDrain, 0); //個別リレー用制御
ryousato 0:5637e966d2f5 38 DigitalInOut relayctl6(PB_14, PIN_OUTPUT, OpenDrain, 0); //個別リレー用制御
ryousato 0:5637e966d2f5 39 DigitalInOut relayctl7(PB_13, PIN_OUTPUT, OpenDrain, 0); //個別リレー用制御
ryousato 0:5637e966d2f5 40 DigitalInOut relayctl8(PC_4, PIN_OUTPUT, OpenDrain, 0); //個別リレー用制御
ryousato 0:5637e966d2f5 41
ryousato 0:5637e966d2f5 42 static std::string none;
ryousato 0:5637e966d2f5 43
ryousato 0:5637e966d2f5 44 //関数宣言
ryousato 0:5637e966d2f5 45 int help_mode(std::string para);
ryousato 0:5637e966d2f5 46 int relay_set(std::string para); //リレー用制御
ryousato 0:5637e966d2f5 47 void initial(); //初期化
ryousato 0:5637e966d2f5 48 int led_lum_check(std::string para); //カラーセンサー用マルチプレクサ制御 + 輝度確認
ryousato 0:5637e966d2f5 49 int led_all_check(std::string para);
ryousato 0:5637e966d2f5 50 int servo_turn(std::string para);
ryousato 0:5637e966d2f5 51 int pkg_detection(std::string para);
ryousato 0:5637e966d2f5 52 void main_uart_receive(); //コマンド文字列受信処理
ryousato 0:5637e966d2f5 53 void risedet_interrupt();
ryousato 0:5637e966d2f5 54 void falldet_interrupt();
ryousato 0:5637e966d2f5 55
ryousato 0:5637e966d2f5 56 //クラス名の定義
ryousato 0:5637e966d2f5 57 CsMode CsMode;
ryousato 0:5637e966d2f5 58
ryousato 0:5637e966d2f5 59 //コマンドの宣言
ryousato 0:5637e966d2f5 60 typedef struct {
ryousato 0:5637e966d2f5 61 std::string Commond;
ryousato 0:5637e966d2f5 62 int (* CommandFunction)(std::string para);
ryousato 0:5637e966d2f5 63 } CdListTable;
ryousato 0:5637e966d2f5 64
ryousato 0:5637e966d2f5 65 //コマンド一覧(左側がコマンド、右側が飛び先の関数)
ryousato 0:5637e966d2f5 66 CdListTable CommandList[] = {
ryousato 0:5637e966d2f5 67 {"help", help_mode},
ryousato 0:5637e966d2f5 68 {"led", led_lum_check},
ryousato 0:5637e966d2f5 69 {"led all", led_all_check},
ryousato 0:5637e966d2f5 70 {"relay", relay_set},
ryousato 0:5637e966d2f5 71 {"servo", servo_turn},
ryousato 0:5637e966d2f5 72 {"det", pkg_detection},
ryousato 0:5637e966d2f5 73 };
ryousato 0:5637e966d2f5 74
ryousato 0:5637e966d2f5 75 //ヘルプ用コマンド一覧
ryousato 0:5637e966d2f5 76 std::string HelpStr[] = {
ryousato 0:5637e966d2f5 77 "* Commands List **********************************************************",
ryousato 0:5637e966d2f5 78 "relayALLoff : relay control",
ryousato 0:5637e966d2f5 79 "relay1,2{on|off}",
ryousato 0:5637e966d2f5 80 "relay3{on|off}",
ryousato 0:5637e966d2f5 81 "relay4{on|off}",
ryousato 0:5637e966d2f5 82 "relay5{on|off}",
ryousato 0:5637e966d2f5 83 "relay21{on|off}",
ryousato 0:5637e966d2f5 84 "relay22,23{on|off}",
ryousato 0:5637e966d2f5 85 "relay24,25{on|off}",
ryousato 0:5637e966d2f5 86 "relay26{on|off}",
ryousato 0:5637e966d2f5 87 "relay26on20ms",
ryousato 0:5637e966d2f5 88 "relay26on73ms",
ryousato 0:5637e966d2f5 89 "relayMUXoff",
ryousato 0:5637e966d2f5 90 "relay6on",
ryousato 0:5637e966d2f5 91 "relay7on",
ryousato 0:5637e966d2f5 92 "relay8on",
ryousato 0:5637e966d2f5 93 "relay9on",
ryousato 0:5637e966d2f5 94 "relay10on",
ryousato 0:5637e966d2f5 95 "relay11on",
ryousato 0:5637e966d2f5 96 "relay12on",
ryousato 0:5637e966d2f5 97 "relay13on",
ryousato 0:5637e966d2f5 98 "relay14on",
ryousato 0:5637e966d2f5 99 "relay15on",
ryousato 0:5637e966d2f5 100 "relay16on",
ryousato 0:5637e966d2f5 101 "relay17on",
ryousato 0:5637e966d2f5 102 "relay18on",
ryousato 0:5637e966d2f5 103 "relay19on",
ryousato 0:5637e966d2f5 104 "relay20on",
ryousato 0:5637e966d2f5 105 "servo{on|off} : servo control",
ryousato 0:5637e966d2f5 106 "led{1|2|3} : LED luminance check",
ryousato 0:5637e966d2f5 107 "det : pkg,lever detection",
ryousato 0:5637e966d2f5 108 "**************************************************************************",
ryousato 0:5637e966d2f5 109 "", //helpの終わりを示す
ryousato 0:5637e966d2f5 110 };
ryousato 0:5637e966d2f5 111
ryousato 0:5637e966d2f5 112 //ヘルプ表示
ryousato 0:5637e966d2f5 113 int help_mode(std::string para)
ryousato 0:5637e966d2f5 114 {
ryousato 0:5637e966d2f5 115 int tmpCount = 0;
ryousato 0:5637e966d2f5 116
ryousato 0:5637e966d2f5 117 //HelpStrを空文字が出てくるまで繰り返し表示
ryousato 0:5637e966d2f5 118 while(HelpStr[tmpCount] != "") {
ryousato 0:5637e966d2f5 119 SerialCom.printf("%s\r\n",HelpStr[tmpCount].c_str());
ryousato 0:5637e966d2f5 120 tmpCount++;
ryousato 0:5637e966d2f5 121 }
ryousato 0:5637e966d2f5 122 return 0;
ryousato 0:5637e966d2f5 123 }
ryousato 0:5637e966d2f5 124
ryousato 0:5637e966d2f5 125 //リレー制御
ryousato 0:5637e966d2f5 126 int relay_set(std::string para)
ryousato 0:5637e966d2f5 127 {
ryousato 0:5637e966d2f5 128 //基板とレバーが未検知の時はコマンドを実行しない
ryousato 0:5637e966d2f5 129 int intdet0 = det0;
ryousato 0:5637e966d2f5 130 int intdet1 = det1;
ryousato 0:5637e966d2f5 131 int intdet2 = det2;
ryousato 0:5637e966d2f5 132 if(intdet0 == 1 | intdet1 == 1 | intdet2 == 1) {
ryousato 0:5637e966d2f5 133 SerialCom.printf ("\r\n Error! PKG, lever undetected!\r\n\r\n");
ryousato 0:5637e966d2f5 134 return 0;
ryousato 0:5637e966d2f5 135 }
ryousato 0:5637e966d2f5 136
ryousato 0:5637e966d2f5 137 //パラメータが
ryousato 0:5637e966d2f5 138 if(para.substr(0)=="ALLoff") {
ryousato 0:5637e966d2f5 139 relayctl1 = 0;
ryousato 0:5637e966d2f5 140 relayctl2 = 0;
ryousato 0:5637e966d2f5 141 relayctl3 = 0;
ryousato 0:5637e966d2f5 142 relayctl4 = 0;
ryousato 0:5637e966d2f5 143 relayctl5 = 0;
ryousato 0:5637e966d2f5 144 relayctl6 = 0;
ryousato 0:5637e966d2f5 145 relayctl7 = 0;
ryousato 0:5637e966d2f5 146 relayctl8 = 0;
ryousato 0:5637e966d2f5 147 rmuxen = 1;
ryousato 0:5637e966d2f5 148 rmuxaddr.write(0);
ryousato 0:5637e966d2f5 149 SerialCom.printf ("OK\r\n");
ryousato 0:5637e966d2f5 150 return 0;
ryousato 0:5637e966d2f5 151 } else if (para.substr(0)=="1,2on") {
ryousato 0:5637e966d2f5 152 relayctl1 = 1;
ryousato 0:5637e966d2f5 153
ryousato 0:5637e966d2f5 154 SerialCom.printf ("OK\r\n");
ryousato 0:5637e966d2f5 155 return 0;
ryousato 0:5637e966d2f5 156 } else if (para.substr(0)=="1,2off") {
ryousato 0:5637e966d2f5 157 relayctl1 = 0;
ryousato 0:5637e966d2f5 158 SerialCom.printf ("OK\r\n");
ryousato 0:5637e966d2f5 159 return 0;
ryousato 0:5637e966d2f5 160 } else if (para.substr(0)=="3on") {
ryousato 0:5637e966d2f5 161 relayctl2 = 1;
ryousato 0:5637e966d2f5 162 SerialCom.printf ("OK\r\n");
ryousato 0:5637e966d2f5 163 return 0;
ryousato 0:5637e966d2f5 164 } else if (para.substr(0)=="3off") {
ryousato 0:5637e966d2f5 165 relayctl2 = 0;
ryousato 0:5637e966d2f5 166 SerialCom.printf ("OK\r\n");
ryousato 0:5637e966d2f5 167 return 0;
ryousato 0:5637e966d2f5 168 } else if (para.substr(0)=="4on") {
ryousato 0:5637e966d2f5 169 relayctl3 = 1;
ryousato 0:5637e966d2f5 170 SerialCom.printf ("OK\r\n");
ryousato 0:5637e966d2f5 171 return 0;
ryousato 0:5637e966d2f5 172 } else if (para.substr(0)=="4off") {
ryousato 0:5637e966d2f5 173 relayctl3 = 0;
ryousato 0:5637e966d2f5 174 SerialCom.printf ("OK\r\n");
ryousato 0:5637e966d2f5 175 return 0;
ryousato 0:5637e966d2f5 176 } else if (para.substr(0)=="5on") {
ryousato 0:5637e966d2f5 177 relayctl4 = 1;
ryousato 0:5637e966d2f5 178 SerialCom.printf ("OK\r\n");
ryousato 0:5637e966d2f5 179 return 0;
ryousato 0:5637e966d2f5 180 } else if (para.substr(0)=="5off") {
ryousato 0:5637e966d2f5 181 relayctl4 = 0;
ryousato 0:5637e966d2f5 182 SerialCom.printf ("OK\r\n");
ryousato 0:5637e966d2f5 183 return 0;
ryousato 0:5637e966d2f5 184 } else if (para.substr(0)=="21on") {
ryousato 0:5637e966d2f5 185 relayctl5 = 1;
ryousato 0:5637e966d2f5 186 SerialCom.printf ("OK\r\n");
ryousato 0:5637e966d2f5 187 return 0;
ryousato 0:5637e966d2f5 188 } else if (para.substr(0)=="21off") {
ryousato 0:5637e966d2f5 189 relayctl5 = 0;
ryousato 0:5637e966d2f5 190 SerialCom.printf ("OK\r\n");
ryousato 0:5637e966d2f5 191 return 0;
ryousato 0:5637e966d2f5 192 } else if (para.substr(0)=="22,23on") {
ryousato 0:5637e966d2f5 193 relayctl6 = 1;
ryousato 0:5637e966d2f5 194 SerialCom.printf ("OK\r\n");
ryousato 0:5637e966d2f5 195 return 0;
ryousato 0:5637e966d2f5 196 } else if (para.substr(0)=="22,23off") {
ryousato 0:5637e966d2f5 197 relayctl6 = 0;
ryousato 0:5637e966d2f5 198 SerialCom.printf ("OK\r\n");
ryousato 0:5637e966d2f5 199 return 0;
ryousato 0:5637e966d2f5 200 } else if (para.substr(0)=="24,25on") {
ryousato 0:5637e966d2f5 201 relayctl7 = 1;
ryousato 0:5637e966d2f5 202 SerialCom.printf ("OK\r\n");
ryousato 0:5637e966d2f5 203 return 0;
ryousato 0:5637e966d2f5 204 } else if (para.substr(0)=="24,25off") {
ryousato 0:5637e966d2f5 205 relayctl7 = 0;
ryousato 0:5637e966d2f5 206 SerialCom.printf ("OK\r\n");
ryousato 0:5637e966d2f5 207 return 0;
ryousato 0:5637e966d2f5 208 } else if (para.substr(0)=="26on") {
ryousato 0:5637e966d2f5 209 relayctl8 = 1;
ryousato 0:5637e966d2f5 210 SerialCom.printf ("OK\r\n");
ryousato 0:5637e966d2f5 211 return 0;
ryousato 0:5637e966d2f5 212 } else if (para.substr(0)=="26off") {
ryousato 0:5637e966d2f5 213 relayctl8 = 0;
ryousato 0:5637e966d2f5 214 SerialCom.printf ("OK\r\n");
ryousato 0:5637e966d2f5 215 return 0;
ryousato 0:5637e966d2f5 216 } else if (para.substr(0)=="26on20ms") {
ryousato 0:5637e966d2f5 217 relayctl8 = 1;
ryousato 0:5637e966d2f5 218 wait(0.02);
ryousato 0:5637e966d2f5 219 relayctl8 = 0;
ryousato 0:5637e966d2f5 220 SerialCom.printf ("OK\r\n");
ryousato 0:5637e966d2f5 221 return 0;
ryousato 0:5637e966d2f5 222 } else if (para.substr(0)=="26on73ms") {
ryousato 0:5637e966d2f5 223 relayctl8 = 1;
ryousato 0:5637e966d2f5 224 wait(0.073);
ryousato 0:5637e966d2f5 225 relayctl8 = 0;
ryousato 0:5637e966d2f5 226 SerialCom.printf ("OK\r\n");
ryousato 0:5637e966d2f5 227 return 0;
ryousato 0:5637e966d2f5 228 } else if (para.substr(0)=="MUXoff") {
ryousato 0:5637e966d2f5 229 rmuxen = 1;
ryousato 0:5637e966d2f5 230 wait(0.01);
ryousato 0:5637e966d2f5 231 rmuxaddr.write(0);
ryousato 0:5637e966d2f5 232 SerialCom.printf ("OK\r\n");
ryousato 0:5637e966d2f5 233 return 0;
ryousato 0:5637e966d2f5 234 } else if (para.substr(0)=="6on") {
ryousato 0:5637e966d2f5 235 rmuxen = 1;
ryousato 0:5637e966d2f5 236 wait(0.01);
ryousato 0:5637e966d2f5 237 rmuxaddr.write(1);
ryousato 0:5637e966d2f5 238 wait(0.01);
ryousato 0:5637e966d2f5 239 rmuxen = 0;
ryousato 0:5637e966d2f5 240 SerialCom.printf ("OK\r\n");
ryousato 0:5637e966d2f5 241 return 0;
ryousato 0:5637e966d2f5 242 } else if (para.substr(0)=="7on") {
ryousato 0:5637e966d2f5 243 rmuxen = 1;
ryousato 0:5637e966d2f5 244 wait(0.01);
ryousato 0:5637e966d2f5 245 rmuxaddr.write(2);
ryousato 0:5637e966d2f5 246 wait(0.01);
ryousato 0:5637e966d2f5 247 rmuxen = 0;
ryousato 0:5637e966d2f5 248 SerialCom.printf ("OK\r\n");
ryousato 0:5637e966d2f5 249 return 0;
ryousato 0:5637e966d2f5 250 } else if (para.substr(0)=="8on") {
ryousato 0:5637e966d2f5 251 rmuxen = 1;
ryousato 0:5637e966d2f5 252 wait(0.01);
ryousato 0:5637e966d2f5 253 rmuxaddr.write(3);
ryousato 0:5637e966d2f5 254 wait(0.01);
ryousato 0:5637e966d2f5 255 rmuxen = 0;
ryousato 0:5637e966d2f5 256 SerialCom.printf ("OK\r\n");
ryousato 0:5637e966d2f5 257 return 0;
ryousato 0:5637e966d2f5 258 } else if (para.substr(0)=="9on") {
ryousato 0:5637e966d2f5 259 rmuxen = 1;
ryousato 0:5637e966d2f5 260 wait(0.01);
ryousato 0:5637e966d2f5 261 rmuxaddr.write(4);
ryousato 0:5637e966d2f5 262 wait(0.01);
ryousato 0:5637e966d2f5 263 rmuxen = 0;
ryousato 0:5637e966d2f5 264 SerialCom.printf ("OK\r\n");
ryousato 0:5637e966d2f5 265 return 0;
ryousato 0:5637e966d2f5 266 } else if (para.substr(0)=="10on") {
ryousato 0:5637e966d2f5 267 rmuxen = 1;
ryousato 0:5637e966d2f5 268 wait(0.01);
ryousato 0:5637e966d2f5 269 rmuxaddr.write(5);
ryousato 0:5637e966d2f5 270 wait(0.01);
ryousato 0:5637e966d2f5 271 rmuxen = 0;
ryousato 0:5637e966d2f5 272 SerialCom.printf ("OK\r\n");
ryousato 0:5637e966d2f5 273 return 0;
ryousato 0:5637e966d2f5 274 } else if (para.substr(0)=="11on") {
ryousato 0:5637e966d2f5 275 rmuxen = 1;
ryousato 0:5637e966d2f5 276 wait(0.01);
ryousato 0:5637e966d2f5 277 rmuxaddr.write(6);
ryousato 0:5637e966d2f5 278 wait(0.01);
ryousato 0:5637e966d2f5 279 rmuxen = 0;
ryousato 0:5637e966d2f5 280 SerialCom.printf ("OK\r\n");
ryousato 0:5637e966d2f5 281 return 0;
ryousato 0:5637e966d2f5 282 } else if (para.substr(0)=="12on") {
ryousato 0:5637e966d2f5 283 rmuxen = 1;
ryousato 0:5637e966d2f5 284 wait(0.01);
ryousato 0:5637e966d2f5 285 rmuxaddr.write(7);
ryousato 0:5637e966d2f5 286 wait(0.01);
ryousato 0:5637e966d2f5 287 rmuxen = 0;
ryousato 0:5637e966d2f5 288 SerialCom.printf ("OK\r\n");
ryousato 0:5637e966d2f5 289 return 0;
ryousato 0:5637e966d2f5 290 } else if (para.substr(0)=="13on") {
ryousato 0:5637e966d2f5 291 rmuxen = 1;
ryousato 0:5637e966d2f5 292 wait(0.01);
ryousato 0:5637e966d2f5 293 rmuxaddr.write(8);
ryousato 0:5637e966d2f5 294 wait(0.01);
ryousato 0:5637e966d2f5 295 rmuxen = 0;
ryousato 0:5637e966d2f5 296 SerialCom.printf ("OK\r\n");
ryousato 0:5637e966d2f5 297 return 0;
ryousato 0:5637e966d2f5 298 } else if (para.substr(0)=="14on") {
ryousato 0:5637e966d2f5 299 rmuxen = 1;
ryousato 0:5637e966d2f5 300 wait(0.01);
ryousato 0:5637e966d2f5 301 rmuxaddr.write(9);
ryousato 0:5637e966d2f5 302 wait(0.01);
ryousato 0:5637e966d2f5 303 rmuxen = 0;
ryousato 0:5637e966d2f5 304 SerialCom.printf ("OK\r\n");
ryousato 0:5637e966d2f5 305 return 0;
ryousato 0:5637e966d2f5 306 } else if (para.substr(0)=="15on") {
ryousato 0:5637e966d2f5 307 rmuxen = 1;
ryousato 0:5637e966d2f5 308 wait(0.01);
ryousato 0:5637e966d2f5 309 rmuxaddr.write(10);
ryousato 0:5637e966d2f5 310 wait(0.01);
ryousato 0:5637e966d2f5 311 rmuxen = 0;
ryousato 0:5637e966d2f5 312 SerialCom.printf ("OK\r\n");
ryousato 0:5637e966d2f5 313 return 0;
ryousato 0:5637e966d2f5 314 } else if (para.substr(0)=="16on") {
ryousato 0:5637e966d2f5 315 rmuxen = 1;
ryousato 0:5637e966d2f5 316 wait(0.01);
ryousato 0:5637e966d2f5 317 rmuxaddr.write(11);
ryousato 0:5637e966d2f5 318 wait(0.01);
ryousato 0:5637e966d2f5 319 rmuxen = 0;
ryousato 0:5637e966d2f5 320 SerialCom.printf ("OK\r\n");
ryousato 0:5637e966d2f5 321 return 0;
ryousato 0:5637e966d2f5 322 } else if (para.substr(0)=="17on") {
ryousato 0:5637e966d2f5 323 rmuxen = 1;
ryousato 0:5637e966d2f5 324 wait(0.01);
ryousato 0:5637e966d2f5 325 rmuxaddr.write(12);
ryousato 0:5637e966d2f5 326 wait(0.01);
ryousato 0:5637e966d2f5 327 rmuxen = 0;
ryousato 0:5637e966d2f5 328 SerialCom.printf ("OK\r\n");
ryousato 0:5637e966d2f5 329 return 0;
ryousato 0:5637e966d2f5 330 } else if (para.substr(0)=="18on") {
ryousato 0:5637e966d2f5 331 rmuxen = 1;
ryousato 0:5637e966d2f5 332 wait(0.01);
ryousato 0:5637e966d2f5 333 rmuxaddr.write(13);
ryousato 0:5637e966d2f5 334 wait(0.01);
ryousato 0:5637e966d2f5 335 rmuxen = 0;
ryousato 0:5637e966d2f5 336 SerialCom.printf ("OK\r\n");
ryousato 0:5637e966d2f5 337 return 0;
ryousato 0:5637e966d2f5 338 } else if (para.substr(0)=="19on") {
ryousato 0:5637e966d2f5 339 rmuxen = 1;
ryousato 0:5637e966d2f5 340 wait(0.01);
ryousato 0:5637e966d2f5 341 rmuxaddr.write(14);
ryousato 0:5637e966d2f5 342 wait(0.01);
ryousato 0:5637e966d2f5 343 rmuxen = 0;
ryousato 0:5637e966d2f5 344 SerialCom.printf ("OK\r\n");
ryousato 0:5637e966d2f5 345 return 0;
ryousato 0:5637e966d2f5 346 } else if (para.substr(0)=="20on") {
ryousato 0:5637e966d2f5 347 rmuxen = 1;
ryousato 0:5637e966d2f5 348 wait(0.01);
ryousato 0:5637e966d2f5 349 rmuxaddr.write(15);
ryousato 0:5637e966d2f5 350 wait(0.01);
ryousato 0:5637e966d2f5 351 rmuxen = 0;
ryousato 0:5637e966d2f5 352 SerialCom.printf ("OK\r\n");
ryousato 0:5637e966d2f5 353 return 0;
ryousato 0:5637e966d2f5 354 //パラメータが上記以外の場合
ryousato 0:5637e966d2f5 355 } else {
ryousato 0:5637e966d2f5 356 SerialCom.printf(" ERROR!\r\n");
ryousato 0:5637e966d2f5 357 return 0;
ryousato 0:5637e966d2f5 358 }
ryousato 0:5637e966d2f5 359 //return 0;
ryousato 0:5637e966d2f5 360 }
ryousato 0:5637e966d2f5 361
ryousato 0:5637e966d2f5 362 //LEDの明るさ取得
ryousato 0:5637e966d2f5 363 int led_lum_check(std::string para)
ryousato 0:5637e966d2f5 364 {
ryousato 0:5637e966d2f5 365 //基板とレバーが未検知の時はコマンドを実行しない
ryousato 0:5637e966d2f5 366 int intdet0 = det0;
ryousato 0:5637e966d2f5 367 int intdet1 = det1;
ryousato 0:5637e966d2f5 368 int intdet2 = det2;
ryousato 0:5637e966d2f5 369 if(intdet0 == 1 | intdet1 == 1 | intdet2 == 1) {
ryousato 0:5637e966d2f5 370 SerialCom.printf ("\r\n Error! PKG, lever undetected!\r\n\r\n");
ryousato 0:5637e966d2f5 371 return 0;
ryousato 0:5637e966d2f5 372 }
ryousato 0:5637e966d2f5 373
ryousato 0:5637e966d2f5 374 int tmpInt = atoi(para.c_str()); //パラメータを数字に変換
ryousato 0:5637e966d2f5 375 cmuxen = 1; //マルチプレクサのENピンをHIGHにする
ryousato 0:5637e966d2f5 376 wait(0.01);
ryousato 0:5637e966d2f5 377
ryousato 0:5637e966d2f5 378 //ADDRバス切替
ryousato 0:5637e966d2f5 379 cmuxaddr.write(tmpInt);
ryousato 0:5637e966d2f5 380 wait(0.01);
ryousato 0:5637e966d2f5 381
ryousato 0:5637e966d2f5 382 cmuxen = 0; //マルチプレクサのENピンをLOWにする
ryousato 0:5637e966d2f5 383 wait(0.01);
ryousato 0:5637e966d2f5 384
ryousato 0:5637e966d2f5 385 //選択したLED表示
ryousato 0:5637e966d2f5 386 //SerialCom.printf ("LED%d_", tmpInt);
ryousato 0:5637e966d2f5 387
ryousato 0:5637e966d2f5 388 //LEDの輝度表示
ryousato 0:5637e966d2f5 389 CsMode.SensorMain();
ryousato 0:5637e966d2f5 390
ryousato 0:5637e966d2f5 391 SerialCom.printf ("OK\r\n");
ryousato 0:5637e966d2f5 392 return 0;
ryousato 0:5637e966d2f5 393 }
ryousato 0:5637e966d2f5 394
ryousato 0:5637e966d2f5 395 int pkg_detection(std::string para)
ryousato 0:5637e966d2f5 396 {
ryousato 0:5637e966d2f5 397 int ppkgdet = det0;
ryousato 0:5637e966d2f5 398 int mpkgdet = det1;
ryousato 0:5637e966d2f5 399 int leverdet = det2;
ryousato 0:5637e966d2f5 400
ryousato 0:5637e966d2f5 401 SerialCom.printf("%d%d%d\r\n", leverdet, mpkgdet, ppkgdet);
ryousato 0:5637e966d2f5 402 SerialCom.printf ("OK\r\n");
ryousato 0:5637e966d2f5 403 return 0;
ryousato 0:5637e966d2f5 404 }
ryousato 0:5637e966d2f5 405
ryousato 0:5637e966d2f5 406 //コマンド文字列解析
ryousato 0:5637e966d2f5 407 void ReceiveCmdAnalyze()
ryousato 0:5637e966d2f5 408 {
ryousato 0:5637e966d2f5 409 //入力された文字列を1文字ずつ解析(文字列の長さ分まで繰り返す)
ryousato 0:5637e966d2f5 410 for(int y=0; y<=RcvCharStr.size(); y++) {
ryousato 0:5637e966d2f5 411
ryousato 0:5637e966d2f5 412 //コマンド全部と比較し一致しているのがあれば処理開始(前方一致)
ryousato 0:5637e966d2f5 413 for (int i=0; i<CommandNumber; i++) {
ryousato 0:5637e966d2f5 414 if(RcvCharStr.substr(0,y) == CommandList[i].Commond) {
ryousato 0:5637e966d2f5 415
ryousato 0:5637e966d2f5 416 //コマンド以降の文字列を引数にして関数呼び出し
ryousato 0:5637e966d2f5 417 (* *CommandList[i].CommandFunction)(RcvCharStr.substr(y));
ryousato 0:5637e966d2f5 418
ryousato 0:5637e966d2f5 419 //文字列のバッファクリア
ryousato 0:5637e966d2f5 420 RcvCharStr = "";
ryousato 0:5637e966d2f5 421 return;
ryousato 0:5637e966d2f5 422 }
ryousato 0:5637e966d2f5 423 }
ryousato 0:5637e966d2f5 424 }
ryousato 0:5637e966d2f5 425 //エラーメッセージ表示
ryousato 0:5637e966d2f5 426 SerialCom.printf (" ERROR!\r\n\r\n");
ryousato 0:5637e966d2f5 427 RcvCharStr = "";
ryousato 0:5637e966d2f5 428 return;
ryousato 0:5637e966d2f5 429 }
ryousato 0:5637e966d2f5 430
ryousato 0:5637e966d2f5 431 //UART受信
ryousato 0:5637e966d2f5 432 void main_uart_receive()
ryousato 0:5637e966d2f5 433 {
ryousato 0:5637e966d2f5 434 std::string tmpStr = ""; //シリアル通信受信文字格納(1文字)
ryousato 0:5637e966d2f5 435 tmpStr = SerialCom.getc(); //受信文字を配列に追加
ryousato 0:5637e966d2f5 436 SerialCom.printf("%s",tmpStr.c_str()); //エコーバック出力
ryousato 0:5637e966d2f5 437
ryousato 0:5637e966d2f5 438 //①改行文字が来た場合コマンド解析へ
ryousato 0:5637e966d2f5 439 if(tmpStr == "\r") {
ryousato 0:5637e966d2f5 440 SerialCom.printf ("\r\n"); //TeraTerm改行
ryousato 0:5637e966d2f5 441 ReceiveCmdAnalyze(); //コマンド解析
ryousato 0:5637e966d2f5 442 return;
ryousato 0:5637e966d2f5 443
ryousato 0:5637e966d2f5 444 //②バックスペースが来た場合は文字列の末尾を削除
ryousato 0:5637e966d2f5 445 } else if(tmpStr == "\b") {
ryousato 0:5637e966d2f5 446
ryousato 0:5637e966d2f5 447 //1文字もない場合は何もしない
ryousato 0:5637e966d2f5 448 if(RcvCharStr.size()>0) {
ryousato 0:5637e966d2f5 449 RcvCharStr.erase(RcvCharStr.length()-1,1);
ryousato 0:5637e966d2f5 450 }
ryousato 0:5637e966d2f5 451
ryousato 0:5637e966d2f5 452 //③上記以外の場合は受信した文字をRcvCharStrへ格納
ryousato 0:5637e966d2f5 453 } else {
ryousato 0:5637e966d2f5 454 RcvCharStr += tmpStr;
ryousato 0:5637e966d2f5 455 }
ryousato 0:5637e966d2f5 456 }
ryousato 0:5637e966d2f5 457
ryousato 0:5637e966d2f5 458 //サーボモータ制御
ryousato 0:5637e966d2f5 459 int servo_turn(std::string para)
ryousato 0:5637e966d2f5 460 {
ryousato 0:5637e966d2f5 461 //オフ時のパルス幅は上記で定義
ryousato 0:5637e966d2f5 462 //off_width = 1550;
ryousato 0:5637e966d2f5 463 //on_width = 1350;
ryousato 0:5637e966d2f5 464
ryousato 0:5637e966d2f5 465 //基板とレバーが未検知の時はコマンドを実行しない
ryousato 0:5637e966d2f5 466 int intdet0 = det0;
ryousato 0:5637e966d2f5 467 int intdet1 = det1;
ryousato 0:5637e966d2f5 468 int intdet2 = det2;
ryousato 0:5637e966d2f5 469 if(intdet0 == 1 | intdet1 == 1 | intdet2 == 1) {
ryousato 0:5637e966d2f5 470 SerialCom.printf ("\r\n Error! PKG, lever undetected!\r\n\r\n");
ryousato 0:5637e966d2f5 471 return 0;
ryousato 0:5637e966d2f5 472 }
ryousato 0:5637e966d2f5 473
ryousato 0:5637e966d2f5 474 int waitms = 5; //パルス時間変更後の待ち時間(ms) (動作速度:0.1秒/60度(サーボモータSG92仕様))
ryousato 0:5637e966d2f5 475
ryousato 0:5637e966d2f5 476 //パラメータがオフ(off)の時
ryousato 0:5637e966d2f5 477 if(para.substr(0)=="off") {
ryousato 0:5637e966d2f5 478 if(servoflag == 0) {
ryousato 0:5637e966d2f5 479 SerialCom.printf(" ERROR! already OFF\r\n");
ryousato 0:5637e966d2f5 480 return 0;
ryousato 0:5637e966d2f5 481 } else {
ryousato 0:5637e966d2f5 482 /*
ryousato 0:5637e966d2f5 483 int pulseus = on_width;
ryousato 0:5637e966d2f5 484 servopwm.period_ms(20); //PWMサイクル周期(サーボモータSG92仕様)
ryousato 0:5637e966d2f5 485 while (pulseus <= off_width) {
ryousato 0:5637e966d2f5 486 servopwm.pulsewidth_us(pulseus);
ryousato 0:5637e966d2f5 487 wait_ms(waitms);
ryousato 0:5637e966d2f5 488 pulseus = pulseus + 1;
ryousato 0:5637e966d2f5 489 }
ryousato 0:5637e966d2f5 490 */
ryousato 0:5637e966d2f5 491 int pulseus = off_width;
ryousato 0:5637e966d2f5 492 servopwm.period_ms(20);
ryousato 0:5637e966d2f5 493 servopwm.pulsewidth_us(pulseus);
ryousato 0:5637e966d2f5 494 servoflag = 0; //サーボホーン位置情報
ryousato 0:5637e966d2f5 495 }
ryousato 0:5637e966d2f5 496 }
ryousato 0:5637e966d2f5 497
ryousato 0:5637e966d2f5 498 //パラメータがオン(on)の時
ryousato 0:5637e966d2f5 499 else if(para.substr(0)=="on") {
ryousato 0:5637e966d2f5 500 //往路
ryousato 0:5637e966d2f5 501 if(servoflag == 1) {
ryousato 0:5637e966d2f5 502 SerialCom.printf(" ERROR! already ON\r\n");
ryousato 0:5637e966d2f5 503 return 0;
ryousato 0:5637e966d2f5 504 } else {
ryousato 0:5637e966d2f5 505 int pulseus = off_width;
ryousato 0:5637e966d2f5 506 servopwm.period_ms(20); //PWMサイクル周期(サーボモータSG92仕様)
ryousato 0:5637e966d2f5 507 while (pulseus >= on_width) {
ryousato 0:5637e966d2f5 508 servopwm.pulsewidth_us(pulseus);
ryousato 0:5637e966d2f5 509 wait_ms(waitms);
ryousato 0:5637e966d2f5 510 pulseus = pulseus - 1;
ryousato 0:5637e966d2f5 511 }
ryousato 0:5637e966d2f5 512 servoflag = 1; //サーボホーン位置情報
ryousato 0:5637e966d2f5 513 }
ryousato 0:5637e966d2f5 514
ryousato 0:5637e966d2f5 515 wait(1); //スイッチを押し切る時間を確保
ryousato 0:5637e966d2f5 516
ryousato 0:5637e966d2f5 517 //復路
ryousato 0:5637e966d2f5 518 if(servoflag == 0) {
ryousato 0:5637e966d2f5 519 SerialCom.printf(" ERROR! already OFF\r\n");
ryousato 0:5637e966d2f5 520 return 0;
ryousato 0:5637e966d2f5 521 } else {
ryousato 0:5637e966d2f5 522 int pulseus = on_width;
ryousato 0:5637e966d2f5 523 servopwm.period_ms(20); //PWMサイクル周期(サーボモータSG92仕様)
ryousato 0:5637e966d2f5 524 while (pulseus <= off_width) {
ryousato 0:5637e966d2f5 525 servopwm.pulsewidth_us(pulseus);
ryousato 0:5637e966d2f5 526 wait_ms(waitms);
ryousato 0:5637e966d2f5 527 pulseus = pulseus + 1;
ryousato 0:5637e966d2f5 528 }
ryousato 0:5637e966d2f5 529 servoflag = 0; //サーボホーン位置情報
ryousato 0:5637e966d2f5 530
ryousato 0:5637e966d2f5 531 SerialCom.printf ("OK\r\n");
ryousato 0:5637e966d2f5 532 }
ryousato 0:5637e966d2f5 533 }
ryousato 0:5637e966d2f5 534 //パラメータがオン時のパルス幅(****us)のとき
ryousato 0:5637e966d2f5 535 else {
ryousato 0:5637e966d2f5 536 int tmpInt = atoi(para.c_str());
ryousato 0:5637e966d2f5 537 int pulseus = off_width;
ryousato 0:5637e966d2f5 538 servopwm.period_ms(20); //PWMサイクル周期(サーボモータSG92仕様)
ryousato 0:5637e966d2f5 539 while (pulseus >= tmpInt) {
ryousato 0:5637e966d2f5 540 servopwm.pulsewidth_us(pulseus);
ryousato 0:5637e966d2f5 541 wait_ms(waitms);
ryousato 0:5637e966d2f5 542 pulseus = pulseus - 1;
ryousato 0:5637e966d2f5 543 }
ryousato 0:5637e966d2f5 544
ryousato 0:5637e966d2f5 545 wait(1);
ryousato 0:5637e966d2f5 546
ryousato 0:5637e966d2f5 547 pulseus = tmpInt;
ryousato 0:5637e966d2f5 548 //servopwm.period_ms(20); //PWMサイクル周期(サーボモータSG92仕様)
ryousato 0:5637e966d2f5 549 while (pulseus <= off_width) {
ryousato 0:5637e966d2f5 550 servopwm.pulsewidth_us(pulseus);
ryousato 0:5637e966d2f5 551 wait_ms(waitms);
ryousato 0:5637e966d2f5 552 pulseus = pulseus + 1;
ryousato 0:5637e966d2f5 553 }
ryousato 0:5637e966d2f5 554 SerialCom.printf ("OK\r\n");
ryousato 0:5637e966d2f5 555 }
ryousato 0:5637e966d2f5 556 return 0;
ryousato 0:5637e966d2f5 557 }
ryousato 0:5637e966d2f5 558
ryousato 0:5637e966d2f5 559 //リレーとマルチプレクサの初期設定
ryousato 0:5637e966d2f5 560 void initial()
ryousato 0:5637e966d2f5 561 {
ryousato 0:5637e966d2f5 562 relayctl1 = 0;
ryousato 0:5637e966d2f5 563 relayctl2 = 0;
ryousato 0:5637e966d2f5 564 relayctl3 = 0;
ryousato 0:5637e966d2f5 565 relayctl4 = 0;
ryousato 0:5637e966d2f5 566 relayctl5 = 0;
ryousato 0:5637e966d2f5 567 relayctl6 = 0;
ryousato 0:5637e966d2f5 568 relayctl7 = 0;
ryousato 0:5637e966d2f5 569 relayctl8 = 0;
ryousato 0:5637e966d2f5 570 rmuxen = 1;
ryousato 0:5637e966d2f5 571 rmuxaddr.write(0);
ryousato 0:5637e966d2f5 572
ryousato 0:5637e966d2f5 573 //LEDのマルチプレクサをOFFに
ryousato 0:5637e966d2f5 574 cmuxen = 1;
ryousato 0:5637e966d2f5 575
ryousato 0:5637e966d2f5 576 return;
ryousato 0:5637e966d2f5 577 }
ryousato 0:5637e966d2f5 578
ryousato 0:5637e966d2f5 579 //LED全チェック
ryousato 0:5637e966d2f5 580 int led_all_check(std::string para)
ryousato 0:5637e966d2f5 581 {
ryousato 0:5637e966d2f5 582 //基板とレバーが未検知の時はコマンドを実行しない
ryousato 0:5637e966d2f5 583 int intdet0 = det0;
ryousato 0:5637e966d2f5 584 int intdet1 = det1;
ryousato 0:5637e966d2f5 585 int intdet2 = det2;
ryousato 0:5637e966d2f5 586 if(intdet0 == 1 | intdet1 == 1 | intdet2 == 1) {
ryousato 0:5637e966d2f5 587 SerialCom.printf ("\r\n Error! PKG, lever undetected!\r\n\r\n");
ryousato 0:5637e966d2f5 588 return 0;
ryousato 0:5637e966d2f5 589 }
ryousato 0:5637e966d2f5 590
ryousato 0:5637e966d2f5 591 char buf[2];
ryousato 0:5637e966d2f5 592
ryousato 0:5637e966d2f5 593 //led_lum_checkをLED1-24まで実施
ryousato 0:5637e966d2f5 594 for (int x = 1; x <= 3; x++) {
ryousato 0:5637e966d2f5 595 snprintf(buf, 12, "%d", x);
ryousato 0:5637e966d2f5 596 std::string str(buf, 2);
ryousato 0:5637e966d2f5 597 led_lum_check(str);
ryousato 0:5637e966d2f5 598 }
ryousato 0:5637e966d2f5 599 return 0;
ryousato 0:5637e966d2f5 600 }
ryousato 0:5637e966d2f5 601
ryousato 0:5637e966d2f5 602 void risedet_interrupt()
ryousato 0:5637e966d2f5 603 {
ryousato 0:5637e966d2f5 604 wait(0.001);
ryousato 0:5637e966d2f5 605 led = 0;
ryousato 0:5637e966d2f5 606 int intdet0 = det0;
ryousato 0:5637e966d2f5 607 int intdet1 = det1;
ryousato 0:5637e966d2f5 608 int intdet2 = det2;
ryousato 0:5637e966d2f5 609 if(intdet0 == 1 | intdet1 == 1 | intdet2 == 1) {
ryousato 0:5637e966d2f5 610 SerialCom.printf("\r\n Error! PKG, lever undetected! initializing...\r\n");
ryousato 0:5637e966d2f5 611
ryousato 0:5637e966d2f5 612 //初期設定
ryousato 0:5637e966d2f5 613 initial();
ryousato 0:5637e966d2f5 614
ryousato 0:5637e966d2f5 615 //サーボがonの場合はoffへ
ryousato 0:5637e966d2f5 616 if(servoflag == 1) {
ryousato 0:5637e966d2f5 617 servo_turn("off");
ryousato 0:5637e966d2f5 618 }
ryousato 0:5637e966d2f5 619
ryousato 0:5637e966d2f5 620 //PKGとレバーが検知されるのを待つ
ryousato 0:5637e966d2f5 621 SerialCom.printf ("\r\n Waiting for PKG installation...\r\n");
ryousato 0:5637e966d2f5 622 intdet0 = det0;
ryousato 0:5637e966d2f5 623 intdet1 = det1;
ryousato 0:5637e966d2f5 624 intdet2 = det2;
ryousato 0:5637e966d2f5 625 while(intdet0 == 1 | intdet1 == 1 | intdet2 == 1) {
ryousato 0:5637e966d2f5 626 intdet0 = det0;
ryousato 0:5637e966d2f5 627 intdet1 = det1;
ryousato 0:5637e966d2f5 628 intdet2 = det2;
ryousato 0:5637e966d2f5 629 if (SerialCom.readable()) { //読み込む文字があるかどうか判定
ryousato 0:5637e966d2f5 630 main_uart_receive();
ryousato 0:5637e966d2f5 631 }
ryousato 0:5637e966d2f5 632 }
ryousato 0:5637e966d2f5 633 SerialCom.printf("\r\n PKG, lever detected!\r\n\r\n restart!\r\n\r\n");
ryousato 0:5637e966d2f5 634 }
ryousato 0:5637e966d2f5 635 led = 1;
ryousato 0:5637e966d2f5 636 }
ryousato 0:5637e966d2f5 637
ryousato 0:5637e966d2f5 638 int main()
ryousato 0:5637e966d2f5 639 {
ryousato 0:5637e966d2f5 640 led = 0;
ryousato 0:5637e966d2f5 641
ryousato 0:5637e966d2f5 642 //UART ボーレート設定
ryousato 0:5637e966d2f5 643 SerialCom.baud(SirialComSpeed);
ryousato 0:5637e966d2f5 644
ryousato 0:5637e966d2f5 645 //起動表示
ryousato 0:5637e966d2f5 646 SerialCom.printf ("PCU-1L Unitchecker Initializing...\r\n");
ryousato 0:5637e966d2f5 647
ryousato 0:5637e966d2f5 648 /* 基板上にプルアップを入れたのでコメントアウト
ryousato 0:5637e966d2f5 649 //ピン変化割込みポートモード設定
ryousato 0:5637e966d2f5 650 det0.mode(PullUp);
ryousato 0:5637e966d2f5 651 det1.mode(PullUp);
ryousato 0:5637e966d2f5 652 det2.mode(PullUp);
ryousato 0:5637e966d2f5 653 */
ryousato 0:5637e966d2f5 654
ryousato 0:5637e966d2f5 655 //初期設定
ryousato 0:5637e966d2f5 656 initial();
ryousato 0:5637e966d2f5 657
ryousato 0:5637e966d2f5 658 //LEDチェック
ryousato 0:5637e966d2f5 659 led_all_check(none);
ryousato 0:5637e966d2f5 660
ryousato 0:5637e966d2f5 661 //サーボモータ第一初期化
ryousato 0:5637e966d2f5 662 pservoflag = &servoflag; //ポインター(サーボホーン位置情報格納用)
ryousato 0:5637e966d2f5 663 poff_width = &off_width;
ryousato 0:5637e966d2f5 664 pon_width = &on_width;
ryousato 0:5637e966d2f5 665 servopwm.period_ms(20); //PWMサイクル周期(サーボモータSG92仕様)
ryousato 0:5637e966d2f5 666 servopwm.pulsewidth_us(off_width); //角度が決まる
ryousato 0:5637e966d2f5 667
ryousato 0:5637e966d2f5 668 //PKGとレバーが検知されるのを待つ
ryousato 0:5637e966d2f5 669 int intdet0 = det0;
ryousato 0:5637e966d2f5 670 int intdet1 = det1;
ryousato 0:5637e966d2f5 671 int intdet2 = det2;
ryousato 0:5637e966d2f5 672 if(intdet0 == 1 | intdet1 == 1 | intdet2 == 1) {
ryousato 0:5637e966d2f5 673 SerialCom.printf ("\r\n Waiting for PKG installation...\r\n");
ryousato 0:5637e966d2f5 674 while(intdet0 == 1 | intdet1 == 1 | intdet2 == 1) {
ryousato 0:5637e966d2f5 675 //wait(1);
ryousato 0:5637e966d2f5 676 intdet0 = det0;
ryousato 0:5637e966d2f5 677 intdet1 = det1;
ryousato 0:5637e966d2f5 678 intdet2 = det2;
ryousato 0:5637e966d2f5 679 if (SerialCom.readable()) { //読み込む文字があるかどうか判定
ryousato 0:5637e966d2f5 680 main_uart_receive();
ryousato 0:5637e966d2f5 681 }
ryousato 0:5637e966d2f5 682 }
ryousato 0:5637e966d2f5 683 SerialCom.printf("\r\n PKG, lever detected!\r\n\r\n");
ryousato 0:5637e966d2f5 684 }
ryousato 0:5637e966d2f5 685
ryousato 0:5637e966d2f5 686 led = 1;
ryousato 0:5637e966d2f5 687
ryousato 0:5637e966d2f5 688 //PKG,レバー未検知割込みを起動
ryousato 0:5637e966d2f5 689 det0.rise(&risedet_interrupt);
ryousato 0:5637e966d2f5 690 det1.rise(&risedet_interrupt);
ryousato 0:5637e966d2f5 691 det2.rise(&risedet_interrupt);
ryousato 0:5637e966d2f5 692
ryousato 0:5637e966d2f5 693 SerialCom.printf (" ready!\r\n\r\n");
ryousato 0:5637e966d2f5 694 //メインループ
ryousato 0:5637e966d2f5 695 while(1) {
ryousato 0:5637e966d2f5 696 if (SerialCom.readable()) { //読み込む文字があるかどうか判定
ryousato 0:5637e966d2f5 697 main_uart_receive();
ryousato 0:5637e966d2f5 698 }
ryousato 0:5637e966d2f5 699 }
ryousato 0:5637e966d2f5 700 }