Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of TCD_BD_JIG by
main.cpp@0:03dfcdd06518, 2014-10-29 (annotated)
- Committer:
- abem
- Date:
- Wed Oct 29 02:52:51 2014 +0000
- Revision:
- 0:03dfcdd06518
- Child:
- 1:40527b0f0dfa
TCD Jig
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
abem | 0:03dfcdd06518 | 1 | #include "mbed.h" |
abem | 0:03dfcdd06518 | 2 | |
abem | 0:03dfcdd06518 | 3 | /* DA設定 */ |
abem | 0:03dfcdd06518 | 4 | AnalogOut da1(p18); |
abem | 0:03dfcdd06518 | 5 | |
abem | 0:03dfcdd06518 | 6 | /* LED設定 */ |
abem | 0:03dfcdd06518 | 7 | DigitalOut myled1(LED1); |
abem | 0:03dfcdd06518 | 8 | DigitalOut myled2(LED2); |
abem | 0:03dfcdd06518 | 9 | DigitalOut myled3(LED3); |
abem | 0:03dfcdd06518 | 10 | DigitalOut myled4(LED4); |
abem | 0:03dfcdd06518 | 11 | |
abem | 0:03dfcdd06518 | 12 | /* DIO設定 */ |
abem | 0:03dfcdd06518 | 13 | DigitalIn inDrvAlm(p21); // DRV-ALM |
abem | 0:03dfcdd06518 | 14 | DigitalIn inReady(p22); // READY |
abem | 0:03dfcdd06518 | 15 | DigitalOut outRSTDRV(p23); // RST-DRV |
abem | 0:03dfcdd06518 | 16 | DigitalOut outPWMON(p24); // PWM-ON |
abem | 0:03dfcdd06518 | 17 | |
abem | 0:03dfcdd06518 | 18 | /* SIO設定 */ |
abem | 0:03dfcdd06518 | 19 | Serial pc(USBTX, USBRX); // USB-SIO |
abem | 0:03dfcdd06518 | 20 | Serial sio1(p9, p10); // SIO1 |
abem | 0:03dfcdd06518 | 21 | Serial sio2(p13, p14); // SIO2 |
abem | 0:03dfcdd06518 | 22 | |
abem | 0:03dfcdd06518 | 23 | /* タイマー設定 */ |
abem | 0:03dfcdd06518 | 24 | Timeout flipper; |
abem | 0:03dfcdd06518 | 25 | Ticker led4flic; |
abem | 0:03dfcdd06518 | 26 | |
abem | 0:03dfcdd06518 | 27 | /* 関数宣言 */ |
abem | 0:03dfcdd06518 | 28 | void initSIO(void); // シリアルイニシャライズ |
abem | 0:03dfcdd06518 | 29 | |
abem | 0:03dfcdd06518 | 30 | void cmdSIOpc(void); // コマンド処理 pc-SIO |
abem | 0:03dfcdd06518 | 31 | void cmdSIOsio2(void); // コマンド処理 SIO1 |
abem | 0:03dfcdd06518 | 32 | void cmdSIOsio1(void); // コマンド処理 SIO2 |
abem | 0:03dfcdd06518 | 33 | |
abem | 0:03dfcdd06518 | 34 | int trgADcmp(short ADdata, unsigned short ch); // ターゲット取得AD値比較処理 |
abem | 0:03dfcdd06518 | 35 | |
abem | 0:03dfcdd06518 | 36 | |
abem | 0:03dfcdd06518 | 37 | /* 定数宣言 */ |
abem | 0:03dfcdd06518 | 38 | // DA固定出力(0-2.5-5V) |
abem | 0:03dfcdd06518 | 39 | unsigned short outDA0v0 =0; |
abem | 0:03dfcdd06518 | 40 | unsigned short outDA2v5 =19200; |
abem | 0:03dfcdd06518 | 41 | //unsigned short outDA2v5 =10000; |
abem | 0:03dfcdd06518 | 42 | unsigned short outDA5v0 =62000; |
abem | 0:03dfcdd06518 | 43 | |
abem | 0:03dfcdd06518 | 44 | // ターゲットAD判定閾値(0-2.5-5V) |
abem | 0:03dfcdd06518 | 45 | // 出力範囲:0-5V(ターゲット:-2047~2048) |
abem | 0:03dfcdd06518 | 46 | short AD0v0l =-2048; |
abem | 0:03dfcdd06518 | 47 | short AD0v0h =-1800; |
abem | 0:03dfcdd06518 | 48 | short AD2v5l =-100; |
abem | 0:03dfcdd06518 | 49 | short AD2v5h =100; |
abem | 0:03dfcdd06518 | 50 | short AD5v0l =1800; |
abem | 0:03dfcdd06518 | 51 | short AD5v0h =2047; |
abem | 0:03dfcdd06518 | 52 | |
abem | 0:03dfcdd06518 | 53 | // SIOコマンド |
abem | 0:03dfcdd06518 | 54 | // 個別 |
abem | 0:03dfcdd06518 | 55 | char cmdCHK[] = "CHK"; // シリアルチェック |
abem | 0:03dfcdd06518 | 56 | char cmdIO1[] = "IO1"; // RST_DRV-DRV_ALMチェック |
abem | 0:03dfcdd06518 | 57 | char cmdIO2[] = "IO2"; // PWM_ON-READYチェック |
abem | 0:03dfcdd06518 | 58 | char cmdIOC[] = "IOC"; // DI/Oシーケンシャルチェック |
abem | 0:03dfcdd06518 | 59 | char cmdDAC[] = "DAC"; // 指令電圧チェック |
abem | 0:03dfcdd06518 | 60 | char cmdDAM[] = "DAM"; // 指令電圧マニュアル出力 |
abem | 0:03dfcdd06518 | 61 | |
abem | 0:03dfcdd06518 | 62 | /* 変数宣言 */ |
abem | 0:03dfcdd06518 | 63 | // DA用 |
abem | 0:03dfcdd06518 | 64 | unsigned short u16OutDA; |
abem | 0:03dfcdd06518 | 65 | short TrgAD; |
abem | 0:03dfcdd06518 | 66 | |
abem | 0:03dfcdd06518 | 67 | unsigned short cmpADch; |
abem | 0:03dfcdd06518 | 68 | |
abem | 0:03dfcdd06518 | 69 | // pc-SIO |
abem | 0:03dfcdd06518 | 70 | char rx_buf_PC[50]; |
abem | 0:03dfcdd06518 | 71 | char rx_ch_PC; |
abem | 0:03dfcdd06518 | 72 | short rx_cnt_PC; |
abem | 0:03dfcdd06518 | 73 | short rx_endflg_PC; |
abem | 0:03dfcdd06518 | 74 | |
abem | 0:03dfcdd06518 | 75 | // SIO1 |
abem | 0:03dfcdd06518 | 76 | char rx_buf_SIO1[50]; |
abem | 0:03dfcdd06518 | 77 | char rx_ch_SIO1; |
abem | 0:03dfcdd06518 | 78 | short rx_cnt_SIO1; |
abem | 0:03dfcdd06518 | 79 | short rx_endflg_SIO1; |
abem | 0:03dfcdd06518 | 80 | |
abem | 0:03dfcdd06518 | 81 | // SIO2 |
abem | 0:03dfcdd06518 | 82 | char rx_buf_SIO2[50]; |
abem | 0:03dfcdd06518 | 83 | char rx_ch_SIO2; |
abem | 0:03dfcdd06518 | 84 | short rx_cnt_SIO2; |
abem | 0:03dfcdd06518 | 85 | short rx_endflg_SIO2; |
abem | 0:03dfcdd06518 | 86 | |
abem | 0:03dfcdd06518 | 87 | // 汎用 |
abem | 0:03dfcdd06518 | 88 | short i; |
abem | 0:03dfcdd06518 | 89 | |
abem | 0:03dfcdd06518 | 90 | int len; |
abem | 0:03dfcdd06518 | 91 | int intdaout; |
abem | 0:03dfcdd06518 | 92 | int intbuf; |
abem | 0:03dfcdd06518 | 93 | |
abem | 0:03dfcdd06518 | 94 | char cbufstr[50]; |
abem | 0:03dfcdd06518 | 95 | |
abem | 0:03dfcdd06518 | 96 | // Flag |
abem | 0:03dfcdd06518 | 97 | unsigned short flgCHKrun; |
abem | 0:03dfcdd06518 | 98 | unsigned short flgRxAD; |
abem | 0:03dfcdd06518 | 99 | |
abem | 0:03dfcdd06518 | 100 | /* 割込ハンドラ */ |
abem | 0:03dfcdd06518 | 101 | /* pc-SIO_受信 */ |
abem | 0:03dfcdd06518 | 102 | void isr_Rx_PC() |
abem | 0:03dfcdd06518 | 103 | { |
abem | 0:03dfcdd06518 | 104 | rx_ch_PC = pc.getc(); |
abem | 0:03dfcdd06518 | 105 | rx_buf_PC[rx_cnt_PC] = rx_ch_PC; |
abem | 0:03dfcdd06518 | 106 | if( rx_ch_PC == '\r'){ |
abem | 0:03dfcdd06518 | 107 | rx_endflg_PC = 1; |
abem | 0:03dfcdd06518 | 108 | myled3 = 1; |
abem | 0:03dfcdd06518 | 109 | }else{ |
abem | 0:03dfcdd06518 | 110 | rx_cnt_PC++; |
abem | 0:03dfcdd06518 | 111 | myled2 = 1; |
abem | 0:03dfcdd06518 | 112 | } |
abem | 0:03dfcdd06518 | 113 | } |
abem | 0:03dfcdd06518 | 114 | |
abem | 0:03dfcdd06518 | 115 | /* SIO1_受信 */ |
abem | 0:03dfcdd06518 | 116 | void isr_Rx_SIO1() |
abem | 0:03dfcdd06518 | 117 | { |
abem | 0:03dfcdd06518 | 118 | rx_ch_SIO1 = sio1.getc(); |
abem | 0:03dfcdd06518 | 119 | rx_buf_SIO1[rx_cnt_SIO1] = rx_ch_SIO1; |
abem | 0:03dfcdd06518 | 120 | if( rx_ch_SIO1 == '\r'){ |
abem | 0:03dfcdd06518 | 121 | rx_endflg_SIO1 = 1; |
abem | 0:03dfcdd06518 | 122 | }else{ |
abem | 0:03dfcdd06518 | 123 | rx_cnt_SIO1++; |
abem | 0:03dfcdd06518 | 124 | myled2 = 1; |
abem | 0:03dfcdd06518 | 125 | } |
abem | 0:03dfcdd06518 | 126 | } |
abem | 0:03dfcdd06518 | 127 | /* SIO2_受信 */ |
abem | 0:03dfcdd06518 | 128 | void isr_Rx_SIO2() |
abem | 0:03dfcdd06518 | 129 | { |
abem | 0:03dfcdd06518 | 130 | rx_ch_SIO2 = sio2.getc(); |
abem | 0:03dfcdd06518 | 131 | rx_buf_SIO2[rx_cnt_SIO2] = rx_ch_SIO2; |
abem | 0:03dfcdd06518 | 132 | if( rx_ch_SIO2 == '\r'){ |
abem | 0:03dfcdd06518 | 133 | rx_endflg_SIO2 = 1; |
abem | 0:03dfcdd06518 | 134 | myled3 = 1; |
abem | 0:03dfcdd06518 | 135 | }else{ |
abem | 0:03dfcdd06518 | 136 | rx_cnt_SIO2++; |
abem | 0:03dfcdd06518 | 137 | myled2 = 1; |
abem | 0:03dfcdd06518 | 138 | } |
abem | 0:03dfcdd06518 | 139 | } |
abem | 0:03dfcdd06518 | 140 | |
abem | 0:03dfcdd06518 | 141 | /* flip_設定時間後ワンショット動作 */ |
abem | 0:03dfcdd06518 | 142 | void flip() |
abem | 0:03dfcdd06518 | 143 | { |
abem | 0:03dfcdd06518 | 144 | led4flic.detach(); |
abem | 0:03dfcdd06518 | 145 | // タイムアウトにてLED点灯 |
abem | 0:03dfcdd06518 | 146 | myled4 = 1; |
abem | 0:03dfcdd06518 | 147 | flgCHKrun = 0; |
abem | 0:03dfcdd06518 | 148 | pc.puts("TimeOut CHK\r"); |
abem | 0:03dfcdd06518 | 149 | sio1.puts("NG\r"); |
abem | 0:03dfcdd06518 | 150 | } |
abem | 0:03dfcdd06518 | 151 | |
abem | 0:03dfcdd06518 | 152 | /* flic_設定時間繰り返し動作 */ |
abem | 0:03dfcdd06518 | 153 | void flic() |
abem | 0:03dfcdd06518 | 154 | { |
abem | 0:03dfcdd06518 | 155 | myled4 = !myled4; |
abem | 0:03dfcdd06518 | 156 | } |
abem | 0:03dfcdd06518 | 157 | |
abem | 0:03dfcdd06518 | 158 | |
abem | 0:03dfcdd06518 | 159 | /* main */ |
abem | 0:03dfcdd06518 | 160 | int main() { |
abem | 0:03dfcdd06518 | 161 | /* シリアル初期化 */ |
abem | 0:03dfcdd06518 | 162 | initSIO(); |
abem | 0:03dfcdd06518 | 163 | |
abem | 0:03dfcdd06518 | 164 | /* mbed上LED初期化 */ |
abem | 0:03dfcdd06518 | 165 | myled2 = 0; |
abem | 0:03dfcdd06518 | 166 | myled3 = 0; |
abem | 0:03dfcdd06518 | 167 | /* 出力ポート初期化 */ |
abem | 0:03dfcdd06518 | 168 | outRSTDRV = 1; // '1'=Hi(mbed),出力=Open |
abem | 0:03dfcdd06518 | 169 | outPWMON = 1; // '1'=Hi(mbed),出力=Open |
abem | 0:03dfcdd06518 | 170 | |
abem | 0:03dfcdd06518 | 171 | /* DA出力初期化 */ |
abem | 0:03dfcdd06518 | 172 | da1.write_u16(0); |
abem | 0:03dfcdd06518 | 173 | flgRxAD = 0; // ターゲットAD受信フラグ |
abem | 0:03dfcdd06518 | 174 | |
abem | 0:03dfcdd06518 | 175 | /* 起動出力 */ |
abem | 0:03dfcdd06518 | 176 | pc.printf("SIOpc test start \r"); |
abem | 0:03dfcdd06518 | 177 | sio1.printf("PW ON\r"); |
abem | 0:03dfcdd06518 | 178 | myled1 = 1; |
abem | 0:03dfcdd06518 | 179 | |
abem | 0:03dfcdd06518 | 180 | while(1){ |
abem | 0:03dfcdd06518 | 181 | /* SIO処理 */ |
abem | 0:03dfcdd06518 | 182 | if( rx_endflg_PC == 1 ){ |
abem | 0:03dfcdd06518 | 183 | cmdSIOpc(); // コマンド処理 pc-SIO |
abem | 0:03dfcdd06518 | 184 | }else if( rx_endflg_SIO1 == 1 ){ |
abem | 0:03dfcdd06518 | 185 | cmdSIOsio1(); // コマンド処理 SIO1 |
abem | 0:03dfcdd06518 | 186 | }else if( rx_endflg_SIO2 == 1 ){ |
abem | 0:03dfcdd06518 | 187 | cmdSIOsio2(); // コマンド処理 SIO2 |
abem | 0:03dfcdd06518 | 188 | } |
abem | 0:03dfcdd06518 | 189 | |
abem | 0:03dfcdd06518 | 190 | /* AD値判定処理 */ |
abem | 0:03dfcdd06518 | 191 | if( flgRxAD == 1){ |
abem | 0:03dfcdd06518 | 192 | trgADcmp(TrgAD, cmpADch); |
abem | 0:03dfcdd06518 | 193 | } |
abem | 0:03dfcdd06518 | 194 | } |
abem | 0:03dfcdd06518 | 195 | } |
abem | 0:03dfcdd06518 | 196 | |
abem | 0:03dfcdd06518 | 197 | |
abem | 0:03dfcdd06518 | 198 | /* 関数 */ |
abem | 0:03dfcdd06518 | 199 | /* シリアルイニシャライズ */ |
abem | 0:03dfcdd06518 | 200 | void initSIO(void) |
abem | 0:03dfcdd06518 | 201 | { |
abem | 0:03dfcdd06518 | 202 | /* シリアル-割込ハンドラ登録 */ |
abem | 0:03dfcdd06518 | 203 | /* pc-SIO */ |
abem | 0:03dfcdd06518 | 204 | pc.attach(isr_Rx_PC,Serial::RxIrq); // 受信割込ハンドラ |
abem | 0:03dfcdd06518 | 205 | /* SIO1 */ |
abem | 0:03dfcdd06518 | 206 | sio1.attach(isr_Rx_SIO1,Serial::RxIrq); // 受信割込ハンドラ |
abem | 0:03dfcdd06518 | 207 | /* SIO2 */ |
abem | 0:03dfcdd06518 | 208 | sio2.attach(isr_Rx_SIO2,Serial::RxIrq); // 受信割込ハンドラ |
abem | 0:03dfcdd06518 | 209 | |
abem | 0:03dfcdd06518 | 210 | /* シリアル初期化 */ |
abem | 0:03dfcdd06518 | 211 | /* pc-SIO */ |
abem | 0:03dfcdd06518 | 212 | pc.baud(38400); |
abem | 0:03dfcdd06518 | 213 | pc.format(8, SerialBase::None ,1); |
abem | 0:03dfcdd06518 | 214 | /* pc-SIO */ |
abem | 0:03dfcdd06518 | 215 | sio1.baud(38400); |
abem | 0:03dfcdd06518 | 216 | sio1.format(8, SerialBase::None ,1); |
abem | 0:03dfcdd06518 | 217 | /* pc-SIO */ |
abem | 0:03dfcdd06518 | 218 | sio2.baud(38400); |
abem | 0:03dfcdd06518 | 219 | sio2.format(8, SerialBase::None ,1); |
abem | 0:03dfcdd06518 | 220 | |
abem | 0:03dfcdd06518 | 221 | /* pc-SIO チェック用初期化 */ |
abem | 0:03dfcdd06518 | 222 | rx_cnt_PC = 0; |
abem | 0:03dfcdd06518 | 223 | rx_endflg_PC = 0; |
abem | 0:03dfcdd06518 | 224 | /* SIO1 チェック用初期化 */ |
abem | 0:03dfcdd06518 | 225 | rx_cnt_SIO1 = 0; |
abem | 0:03dfcdd06518 | 226 | rx_endflg_SIO1 = 0; |
abem | 0:03dfcdd06518 | 227 | /* SIO2 チェック用初期化 */ |
abem | 0:03dfcdd06518 | 228 | rx_cnt_SIO2 = 0; |
abem | 0:03dfcdd06518 | 229 | rx_endflg_SIO2 = 0; |
abem | 0:03dfcdd06518 | 230 | |
abem | 0:03dfcdd06518 | 231 | /* 受信領域初期化 */ |
abem | 0:03dfcdd06518 | 232 | memset(cbufstr,'\0',sizeof(cbufstr)); |
abem | 0:03dfcdd06518 | 233 | memset(rx_buf_PC,'\0',sizeof(rx_buf_PC)); |
abem | 0:03dfcdd06518 | 234 | memset(rx_buf_SIO1,'\0',sizeof(rx_buf_SIO1)); |
abem | 0:03dfcdd06518 | 235 | memset(rx_buf_SIO2,'\0',sizeof(rx_buf_SIO2)); |
abem | 0:03dfcdd06518 | 236 | } |
abem | 0:03dfcdd06518 | 237 | |
abem | 0:03dfcdd06518 | 238 | |
abem | 0:03dfcdd06518 | 239 | /* コマンド処理 */ |
abem | 0:03dfcdd06518 | 240 | /* 20141008 現状ではターミネート受信後返信処理 */ |
abem | 0:03dfcdd06518 | 241 | /* SIO-pc */ |
abem | 0:03dfcdd06518 | 242 | void cmdSIOpc(void) |
abem | 0:03dfcdd06518 | 243 | { |
abem | 0:03dfcdd06518 | 244 | memset(cbufstr,'\0',sizeof(cbufstr)); |
abem | 0:03dfcdd06518 | 245 | |
abem | 0:03dfcdd06518 | 246 | /* 文字長チェック */ |
abem | 0:03dfcdd06518 | 247 | len = strlen(rx_buf_PC); |
abem | 0:03dfcdd06518 | 248 | strncpy(cbufstr,rx_buf_PC,3); |
abem | 0:03dfcdd06518 | 249 | |
abem | 0:03dfcdd06518 | 250 | /* コマンド判定 */ |
abem | 0:03dfcdd06518 | 251 | if( strlen(rx_buf_PC) <= 4){ |
abem | 0:03dfcdd06518 | 252 | if(strcmp(cbufstr,cmdCHK) == 0){ |
abem | 0:03dfcdd06518 | 253 | // コマンド可 |
abem | 0:03dfcdd06518 | 254 | pc.puts("Res CHK\r"); |
abem | 0:03dfcdd06518 | 255 | flipper.detach(); |
abem | 0:03dfcdd06518 | 256 | led4flic.detach(); |
abem | 0:03dfcdd06518 | 257 | if( flgCHKrun == 1){ |
abem | 0:03dfcdd06518 | 258 | flgCHKrun = 0; |
abem | 0:03dfcdd06518 | 259 | myled4 = 0; |
abem | 0:03dfcdd06518 | 260 | sio1.puts("OK\r"); |
abem | 0:03dfcdd06518 | 261 | } |
abem | 0:03dfcdd06518 | 262 | }else{ |
abem | 0:03dfcdd06518 | 263 | // コマンド不可 |
abem | 0:03dfcdd06518 | 264 | pc.puts("No CHK\r"); |
abem | 0:03dfcdd06518 | 265 | } |
abem | 0:03dfcdd06518 | 266 | }else if( strlen(rx_buf_PC) <= 10){ |
abem | 0:03dfcdd06518 | 267 | if(strcmp(cbufstr,cmdDAC) == 0){ |
abem | 0:03dfcdd06518 | 268 | // コマンド可 DAC |
abem | 0:03dfcdd06518 | 269 | strncpy(cbufstr,&rx_buf_PC[4],5); |
abem | 0:03dfcdd06518 | 270 | intbuf = atoi( cbufstr ); |
abem | 0:03dfcdd06518 | 271 | TrgAD = (short)intbuf; |
abem | 0:03dfcdd06518 | 272 | flgRxAD = 1; |
abem | 0:03dfcdd06518 | 273 | }else{ |
abem | 0:03dfcdd06518 | 274 | // コマンド不可 |
abem | 0:03dfcdd06518 | 275 | pc.puts("No DAC\r"); |
abem | 0:03dfcdd06518 | 276 | } |
abem | 0:03dfcdd06518 | 277 | |
abem | 0:03dfcdd06518 | 278 | }else{ |
abem | 0:03dfcdd06518 | 279 | pc.puts("Lengs error\r"); |
abem | 0:03dfcdd06518 | 280 | pc.puts(cbufstr); |
abem | 0:03dfcdd06518 | 281 | } |
abem | 0:03dfcdd06518 | 282 | |
abem | 0:03dfcdd06518 | 283 | memset(rx_buf_PC,'\0',sizeof(rx_buf_PC)); |
abem | 0:03dfcdd06518 | 284 | rx_cnt_PC = 0; |
abem | 0:03dfcdd06518 | 285 | myled2 = 0; |
abem | 0:03dfcdd06518 | 286 | myled3 = 0; |
abem | 0:03dfcdd06518 | 287 | rx_endflg_PC = 0; |
abem | 0:03dfcdd06518 | 288 | } |
abem | 0:03dfcdd06518 | 289 | |
abem | 0:03dfcdd06518 | 290 | /* SIO1 */ |
abem | 0:03dfcdd06518 | 291 | void cmdSIOsio1(void) |
abem | 0:03dfcdd06518 | 292 | { |
abem | 0:03dfcdd06518 | 293 | memset(cbufstr,'\0',sizeof(cbufstr)); |
abem | 0:03dfcdd06518 | 294 | /* 文字長チェック */ |
abem | 0:03dfcdd06518 | 295 | len = strlen(rx_buf_SIO1); |
abem | 0:03dfcdd06518 | 296 | /* コマンド判定 */ |
abem | 0:03dfcdd06518 | 297 | strncpy(cbufstr,rx_buf_SIO1,3); |
abem | 0:03dfcdd06518 | 298 | if( len == 4){ |
abem | 0:03dfcdd06518 | 299 | if(strcmp(cbufstr,cmdCHK) == 0){ |
abem | 0:03dfcdd06518 | 300 | // コマンド可:CHK |
abem | 0:03dfcdd06518 | 301 | if( flgCHKrun == 1){ |
abem | 0:03dfcdd06518 | 302 | flipper.detach(); |
abem | 0:03dfcdd06518 | 303 | led4flic.detach(); |
abem | 0:03dfcdd06518 | 304 | } |
abem | 0:03dfcdd06518 | 305 | flipper.attach(&flip,5.0); |
abem | 0:03dfcdd06518 | 306 | led4flic.attach(&flic,0.3); |
abem | 0:03dfcdd06518 | 307 | flgCHKrun = 1; |
abem | 0:03dfcdd06518 | 308 | sio2.puts("CHK\r"); |
abem | 0:03dfcdd06518 | 309 | }else{ |
abem | 0:03dfcdd06518 | 310 | // コマンド不可 |
abem | 0:03dfcdd06518 | 311 | sio1.puts("CMD Error 3\r"); |
abem | 0:03dfcdd06518 | 312 | } |
abem | 0:03dfcdd06518 | 313 | }else if( len == 6){ |
abem | 0:03dfcdd06518 | 314 | if(strcmp(cbufstr,cmdIO1) == 0){ |
abem | 0:03dfcdd06518 | 315 | // コマンド可:IO1 |
abem | 0:03dfcdd06518 | 316 | sio1.puts("res IO1\r"); |
abem | 0:03dfcdd06518 | 317 | if( rx_buf_SIO1[4] == '0' ){ |
abem | 0:03dfcdd06518 | 318 | outRSTDRV = 1; |
abem | 0:03dfcdd06518 | 319 | wait(0.5); |
abem | 0:03dfcdd06518 | 320 | if( inDrvAlm == 1 ){ |
abem | 0:03dfcdd06518 | 321 | sio1.puts("OK\r"); |
abem | 0:03dfcdd06518 | 322 | }else{ |
abem | 0:03dfcdd06518 | 323 | sio1.puts("NG\r"); |
abem | 0:03dfcdd06518 | 324 | } |
abem | 0:03dfcdd06518 | 325 | }else if(rx_buf_SIO1[4] == '1'){ |
abem | 0:03dfcdd06518 | 326 | outRSTDRV = 0; |
abem | 0:03dfcdd06518 | 327 | wait(0.5); |
abem | 0:03dfcdd06518 | 328 | if( inDrvAlm == 0 ){ |
abem | 0:03dfcdd06518 | 329 | sio1.puts("OK\r"); |
abem | 0:03dfcdd06518 | 330 | }else{ |
abem | 0:03dfcdd06518 | 331 | sio1.puts("NG\r"); |
abem | 0:03dfcdd06518 | 332 | } |
abem | 0:03dfcdd06518 | 333 | }else{ |
abem | 0:03dfcdd06518 | 334 | sio1.puts("Data Error cmdIO1\r"); |
abem | 0:03dfcdd06518 | 335 | } |
abem | 0:03dfcdd06518 | 336 | }else if(strcmp(cbufstr,cmdIO2) == 0){ |
abem | 0:03dfcdd06518 | 337 | // コマンド可:IO2 |
abem | 0:03dfcdd06518 | 338 | sio1.puts("res IO2\r"); |
abem | 0:03dfcdd06518 | 339 | if( rx_buf_SIO1[4] == '0' ){ |
abem | 0:03dfcdd06518 | 340 | outPWMON = 1; |
abem | 0:03dfcdd06518 | 341 | wait(0.5); |
abem | 0:03dfcdd06518 | 342 | if( inReady == 1 ){ |
abem | 0:03dfcdd06518 | 343 | sio1.puts("OK\r"); |
abem | 0:03dfcdd06518 | 344 | }else{ |
abem | 0:03dfcdd06518 | 345 | sio1.puts("NG\r"); |
abem | 0:03dfcdd06518 | 346 | } |
abem | 0:03dfcdd06518 | 347 | }else if(rx_buf_SIO1[4] == '1'){ |
abem | 0:03dfcdd06518 | 348 | outPWMON = 0; |
abem | 0:03dfcdd06518 | 349 | wait(0.5); |
abem | 0:03dfcdd06518 | 350 | if( inReady == 0 ){ |
abem | 0:03dfcdd06518 | 351 | sio1.puts("OK\r"); |
abem | 0:03dfcdd06518 | 352 | }else{ |
abem | 0:03dfcdd06518 | 353 | sio1.puts("NG\r"); |
abem | 0:03dfcdd06518 | 354 | } |
abem | 0:03dfcdd06518 | 355 | }else{ |
abem | 0:03dfcdd06518 | 356 | sio1.puts("Data Error cmdIO2\r"); |
abem | 0:03dfcdd06518 | 357 | } |
abem | 0:03dfcdd06518 | 358 | }else if(strcmp(cbufstr,cmdDAC) == 0){ |
abem | 0:03dfcdd06518 | 359 | // コマンド可:DAC |
abem | 0:03dfcdd06518 | 360 | sio1.puts("res DAC\r"); |
abem | 0:03dfcdd06518 | 361 | if(rx_buf_SIO1[4] == '1'){ |
abem | 0:03dfcdd06518 | 362 | sprintf(cbufstr,"DAC,%05d\r",outDA0v0); |
abem | 0:03dfcdd06518 | 363 | sio1.puts(cbufstr); |
abem | 0:03dfcdd06518 | 364 | da1.write_u16(outDA0v0); |
abem | 0:03dfcdd06518 | 365 | |
abem | 0:03dfcdd06518 | 366 | wait(0.2); |
abem | 0:03dfcdd06518 | 367 | sio2.puts("DAC\r"); |
abem | 0:03dfcdd06518 | 368 | // pc.puts("DAC\r"); |
abem | 0:03dfcdd06518 | 369 | cmpADch = 1; // 比較用chセット |
abem | 0:03dfcdd06518 | 370 | }else if(rx_buf_SIO1[4] == '2'){ |
abem | 0:03dfcdd06518 | 371 | sprintf(cbufstr,"DAC,%05d\r",outDA2v5); |
abem | 0:03dfcdd06518 | 372 | sio1.puts(cbufstr); |
abem | 0:03dfcdd06518 | 373 | da1.write_u16(outDA2v5); |
abem | 0:03dfcdd06518 | 374 | |
abem | 0:03dfcdd06518 | 375 | wait(0.2); |
abem | 0:03dfcdd06518 | 376 | sio2.puts("DAC\r"); |
abem | 0:03dfcdd06518 | 377 | // pc.puts("DAC\r"); |
abem | 0:03dfcdd06518 | 378 | cmpADch = 2; // 比較用chセット |
abem | 0:03dfcdd06518 | 379 | }else if(rx_buf_SIO1[4] == '3'){ |
abem | 0:03dfcdd06518 | 380 | sprintf(cbufstr,"DAC,%05d\r",outDA5v0); |
abem | 0:03dfcdd06518 | 381 | sio1.puts(cbufstr); |
abem | 0:03dfcdd06518 | 382 | da1.write_u16(outDA5v0); |
abem | 0:03dfcdd06518 | 383 | |
abem | 0:03dfcdd06518 | 384 | wait(0.2); |
abem | 0:03dfcdd06518 | 385 | sio2.puts("DAC\r"); |
abem | 0:03dfcdd06518 | 386 | // pc.puts("DAC\r"); |
abem | 0:03dfcdd06518 | 387 | cmpADch = 3; // 比較用chセット |
abem | 0:03dfcdd06518 | 388 | }else{ |
abem | 0:03dfcdd06518 | 389 | sio1.puts("Data Error cmdDAC\r"); |
abem | 0:03dfcdd06518 | 390 | } |
abem | 0:03dfcdd06518 | 391 | }else{ |
abem | 0:03dfcdd06518 | 392 | // コマンド不可 |
abem | 0:03dfcdd06518 | 393 | sio1.puts("CMD Error 5\r"); |
abem | 0:03dfcdd06518 | 394 | sio1.printf("SIO1Rx= %s ",rx_buf_SIO1); |
abem | 0:03dfcdd06518 | 395 | } |
abem | 0:03dfcdd06518 | 396 | }else if( len == 10){ |
abem | 0:03dfcdd06518 | 397 | if(strcmp(cbufstr,cmdDAM) == 0){ |
abem | 0:03dfcdd06518 | 398 | // コマンド可:DAM |
abem | 0:03dfcdd06518 | 399 | sio1.puts("res DAM\r"); |
abem | 0:03dfcdd06518 | 400 | strncpy(cbufstr,&rx_buf_SIO1[4],5); |
abem | 0:03dfcdd06518 | 401 | intdaout = atoi( cbufstr ); |
abem | 0:03dfcdd06518 | 402 | // DA出力設定 |
abem | 0:03dfcdd06518 | 403 | da1.write_u16((unsigned short)intdaout); |
abem | 0:03dfcdd06518 | 404 | |
abem | 0:03dfcdd06518 | 405 | }else{ |
abem | 0:03dfcdd06518 | 406 | // コマンド不可 |
abem | 0:03dfcdd06518 | 407 | sio1.puts("CMD Error 9\r"); |
abem | 0:03dfcdd06518 | 408 | } |
abem | 0:03dfcdd06518 | 409 | }else{ |
abem | 0:03dfcdd06518 | 410 | sio1.puts("CMD Lengs Error\r"); |
abem | 0:03dfcdd06518 | 411 | } |
abem | 0:03dfcdd06518 | 412 | |
abem | 0:03dfcdd06518 | 413 | memset(rx_buf_SIO1,'\0',sizeof(rx_buf_SIO1)); |
abem | 0:03dfcdd06518 | 414 | rx_cnt_SIO1 = 0; |
abem | 0:03dfcdd06518 | 415 | myled2 = 0; |
abem | 0:03dfcdd06518 | 416 | myled3 = 0; |
abem | 0:03dfcdd06518 | 417 | rx_endflg_SIO1 = 0; |
abem | 0:03dfcdd06518 | 418 | } |
abem | 0:03dfcdd06518 | 419 | |
abem | 0:03dfcdd06518 | 420 | /* SIO2 */ |
abem | 0:03dfcdd06518 | 421 | void cmdSIOsio2(void) |
abem | 0:03dfcdd06518 | 422 | { |
abem | 0:03dfcdd06518 | 423 | memset(cbufstr,'\0',sizeof(cbufstr)); |
abem | 0:03dfcdd06518 | 424 | |
abem | 0:03dfcdd06518 | 425 | /* 文字長チェック */ |
abem | 0:03dfcdd06518 | 426 | len = strlen(rx_buf_SIO2); |
abem | 0:03dfcdd06518 | 427 | strncpy(cbufstr,rx_buf_SIO2,3); |
abem | 0:03dfcdd06518 | 428 | |
abem | 0:03dfcdd06518 | 429 | /* コマンド判定 */ |
abem | 0:03dfcdd06518 | 430 | if( strlen(rx_buf_SIO2) <= 4){ |
abem | 0:03dfcdd06518 | 431 | if(strcmp(cbufstr,cmdCHK) == 0){ |
abem | 0:03dfcdd06518 | 432 | // コマンド可 |
abem | 0:03dfcdd06518 | 433 | pc.puts("Res CHK\r"); |
abem | 0:03dfcdd06518 | 434 | flipper.detach(); |
abem | 0:03dfcdd06518 | 435 | led4flic.detach(); |
abem | 0:03dfcdd06518 | 436 | if( flgCHKrun == 1){ |
abem | 0:03dfcdd06518 | 437 | flgCHKrun = 0; |
abem | 0:03dfcdd06518 | 438 | myled4 = 0; |
abem | 0:03dfcdd06518 | 439 | sio1.puts("OK\r"); |
abem | 0:03dfcdd06518 | 440 | } |
abem | 0:03dfcdd06518 | 441 | }else{ |
abem | 0:03dfcdd06518 | 442 | // コマンド不可 |
abem | 0:03dfcdd06518 | 443 | pc.puts("No CHK\r"); |
abem | 0:03dfcdd06518 | 444 | } |
abem | 0:03dfcdd06518 | 445 | }else if( strlen(rx_buf_SIO2) <= 10){ |
abem | 0:03dfcdd06518 | 446 | if(strcmp(cbufstr,cmdDAC) == 0){ |
abem | 0:03dfcdd06518 | 447 | // コマンド可 DAC |
abem | 0:03dfcdd06518 | 448 | strncpy(cbufstr,&rx_buf_SIO2[4],5); |
abem | 0:03dfcdd06518 | 449 | intbuf = atoi( cbufstr ); |
abem | 0:03dfcdd06518 | 450 | TrgAD = (short)intbuf; |
abem | 0:03dfcdd06518 | 451 | flgRxAD = 1; |
abem | 0:03dfcdd06518 | 452 | }else{ |
abem | 0:03dfcdd06518 | 453 | // コマンド不可 |
abem | 0:03dfcdd06518 | 454 | pc.puts("No DAC\r"); |
abem | 0:03dfcdd06518 | 455 | } |
abem | 0:03dfcdd06518 | 456 | |
abem | 0:03dfcdd06518 | 457 | }else{ |
abem | 0:03dfcdd06518 | 458 | pc.puts("Lengs error\r"); |
abem | 0:03dfcdd06518 | 459 | pc.puts(cbufstr); |
abem | 0:03dfcdd06518 | 460 | } |
abem | 0:03dfcdd06518 | 461 | |
abem | 0:03dfcdd06518 | 462 | memset(rx_buf_SIO2,'\0',sizeof(rx_buf_SIO2)); |
abem | 0:03dfcdd06518 | 463 | rx_cnt_SIO2 = 0; |
abem | 0:03dfcdd06518 | 464 | myled2 = 0; |
abem | 0:03dfcdd06518 | 465 | myled3 = 0; |
abem | 0:03dfcdd06518 | 466 | rx_endflg_SIO2 = 0; |
abem | 0:03dfcdd06518 | 467 | } |
abem | 0:03dfcdd06518 | 468 | |
abem | 0:03dfcdd06518 | 469 | |
abem | 0:03dfcdd06518 | 470 | /* ターゲットAD値判定処理 */ |
abem | 0:03dfcdd06518 | 471 | /* 引数: */ |
abem | 0:03dfcdd06518 | 472 | /* unsigned short ADdata :判定値(受信ADデータ) */ |
abem | 0:03dfcdd06518 | 473 | /* unsigned short ch :判定レンジ指定[1:0V0,2:2v5,3,5v0] */ |
abem | 0:03dfcdd06518 | 474 | /* 戻値:int 1:OK, 0:NG */ |
abem | 0:03dfcdd06518 | 475 | /* */ |
abem | 0:03dfcdd06518 | 476 | int trgADcmp(short ADdata, unsigned short ch) |
abem | 0:03dfcdd06518 | 477 | { |
abem | 0:03dfcdd06518 | 478 | // フラグリセット |
abem | 0:03dfcdd06518 | 479 | flgRxAD = 0; |
abem | 0:03dfcdd06518 | 480 | |
abem | 0:03dfcdd06518 | 481 | memset(cbufstr,'\0',sizeof(cbufstr)); |
abem | 0:03dfcdd06518 | 482 | |
abem | 0:03dfcdd06518 | 483 | // 比較範囲チェック |
abem | 0:03dfcdd06518 | 484 | if( ch == 1 ){ |
abem | 0:03dfcdd06518 | 485 | // 0V比較 |
abem | 0:03dfcdd06518 | 486 | if( ADdata >= AD0v0l && ADdata <= AD0v0h){ |
abem | 0:03dfcdd06518 | 487 | // OK |
abem | 0:03dfcdd06518 | 488 | sprintf(cbufstr,"OK,%05d\r",(int)ADdata); |
abem | 0:03dfcdd06518 | 489 | sio1.puts(cbufstr); |
abem | 0:03dfcdd06518 | 490 | return 1; |
abem | 0:03dfcdd06518 | 491 | }else{ |
abem | 0:03dfcdd06518 | 492 | // NG |
abem | 0:03dfcdd06518 | 493 | sprintf(cbufstr,"NG,%05d\r",(int)ADdata); |
abem | 0:03dfcdd06518 | 494 | sio1.puts(cbufstr); |
abem | 0:03dfcdd06518 | 495 | return 0; |
abem | 0:03dfcdd06518 | 496 | } |
abem | 0:03dfcdd06518 | 497 | }else if( ch == 2 ){ |
abem | 0:03dfcdd06518 | 498 | // 2V5比較 |
abem | 0:03dfcdd06518 | 499 | if( ADdata >= AD2v5l && ADdata <= AD2v5h){ |
abem | 0:03dfcdd06518 | 500 | // OK |
abem | 0:03dfcdd06518 | 501 | sprintf(cbufstr,"OK,%05d\r",(int)ADdata); |
abem | 0:03dfcdd06518 | 502 | sio1.puts(cbufstr); |
abem | 0:03dfcdd06518 | 503 | return 1; |
abem | 0:03dfcdd06518 | 504 | }else{ |
abem | 0:03dfcdd06518 | 505 | // NG |
abem | 0:03dfcdd06518 | 506 | sprintf(cbufstr,"NG,%05d\r",(int)ADdata); |
abem | 0:03dfcdd06518 | 507 | sio1.puts(cbufstr); |
abem | 0:03dfcdd06518 | 508 | return 0; |
abem | 0:03dfcdd06518 | 509 | } |
abem | 0:03dfcdd06518 | 510 | }else if( ch == 3 ){ |
abem | 0:03dfcdd06518 | 511 | // 5V0比較 |
abem | 0:03dfcdd06518 | 512 | if( ADdata >= AD5v0l && ADdata <= AD5v0h){ |
abem | 0:03dfcdd06518 | 513 | // OK |
abem | 0:03dfcdd06518 | 514 | sprintf(cbufstr,"OK,%05d\r",(int)ADdata); |
abem | 0:03dfcdd06518 | 515 | sio1.puts(cbufstr); |
abem | 0:03dfcdd06518 | 516 | return 1; |
abem | 0:03dfcdd06518 | 517 | }else{ |
abem | 0:03dfcdd06518 | 518 | // NG |
abem | 0:03dfcdd06518 | 519 | sprintf(cbufstr,"NG,%05d\r",(int)ADdata); |
abem | 0:03dfcdd06518 | 520 | sio1.puts(cbufstr); |
abem | 0:03dfcdd06518 | 521 | return 0; |
abem | 0:03dfcdd06518 | 522 | } |
abem | 0:03dfcdd06518 | 523 | }else{ |
abem | 0:03dfcdd06518 | 524 | // ch error |
abem | 0:03dfcdd06518 | 525 | sio1.puts("error ADch\r"); |
abem | 0:03dfcdd06518 | 526 | return 0; |
abem | 0:03dfcdd06518 | 527 | } |
abem | 0:03dfcdd06518 | 528 | } |