suu pen / Mbed 2 deprecated serial_dummy

Dependencies:   mbed BufferedSerial

Committer:
suupen
Date:
Sat Jul 26 23:58:24 2014 +0000
Revision:
1:c6e8a41200d9
Parent:
0:7c6ad253848a
Child:
2:52002844d0c6
???????????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
suupen 0:7c6ad253848a 1 /**
suupen 0:7c6ad253848a 2 serial data 送信ツール
suupen 0:7c6ad253848a 3
suupen 0:7c6ad253848a 4 V00.01 : 140719
suupen 0:7c6ad253848a 5
suupen 0:7c6ad253848a 6
suupen 0:7c6ad253848a 7 <使い方>
suupen 0:7c6ad253848a 8 "data.txt" に送信する文字列を設定し、mbedに保管する。
suupen 0:7c6ad253848a 9 mbedに通電するかRESET SW を押すとUSB-serialから文字列を出力する
suupen 0:7c6ad253848a 10
suupen 0:7c6ad253848a 11 <data.txtの設定方法>
suupen 0:7c6ad253848a 12 1.コマンド
suupen 0:7c6ad253848a 13 USB-serialのbaudrate
suupen 0:7c6ad253848a 14 9600[bps]を設定する場合
suupen 0:7c6ad253848a 15 >B9600
suupen 0:7c6ad253848a 16 >b9600
suupen 0:7c6ad253848a 17
suupen 0:7c6ad253848a 18 文字列間の送信間隔
suupen 0:7c6ad253848a 19 1000[ms]を設定する場合
suupen 0:7c6ad253848a 20 >T1000
suupen 0:7c6ad253848a 21 2.送信文字列
suupen 0:7c6ad253848a 22 asciiコードで文字を記述していく
suupen 0:7c6ad253848a 23 送信は一行毎となる
suupen 0:7c6ad253848a 24
suupen 0:7c6ad253848a 25 3.data.txt設定例
suupen 0:7c6ad253848a 26 次の行から-----------------
suupen 0:7c6ad253848a 27 >B9600
suupen 0:7c6ad253848a 28 >T100
suupen 0:7c6ad253848a 29 123456789
suupen 0:7c6ad253848a 30 >T200
suupen 0:7c6ad253848a 31 abcdefghi
suupen 0:7c6ad253848a 32 >T300
suupen 0:7c6ad253848a 33 ABCDEFGHI
suupen 0:7c6ad253848a 34
suupen 0:7c6ad253848a 35 >B9600
suupen 0:7c6ad253848a 36 >T1000
suupen 0:7c6ad253848a 37 123
suupen 0:7c6ad253848a 38 abc
suupen 0:7c6ad253848a 39 ABC
suupen 0:7c6ad253848a 40 ひとつ前の行まで-------------
suupen 0:7c6ad253848a 41
suupen 0:7c6ad253848a 42 <USB-Serialの通信設定値>
suupen 0:7c6ad253848a 43 baudrate : data.txtで設定可能(初期値=9600[bps]
suupen 0:7c6ad253848a 44 bits : 8bit
suupen 0:7c6ad253848a 45 parity : none
suupen 0:7c6ad253848a 46 stopbit : 1bit
suupen 0:7c6ad253848a 47
suupen 0:7c6ad253848a 48
suupen 0:7c6ad253848a 49 */
suupen 0:7c6ad253848a 50 #include "mbed.h"
suupen 0:7c6ad253848a 51 #include "ctype.h"
suupen 0:7c6ad253848a 52
suupen 0:7c6ad253848a 53 LocalFileSystem local("local"); // local file systemの設定
suupen 0:7c6ad253848a 54
suupen 1:c6e8a41200d9 55 //Serial pc(USBTX, USBRX); // usb-serialの設定
suupen 1:c6e8a41200d9 56 Serial pc(p9, p10);
suupen 1:c6e8a41200d9 57 Timeout txSend; // 送信間隔作成用
suupen 0:7c6ad253848a 58
suupen 0:7c6ad253848a 59 DigitalOut ledopen(LED1); // 1:file open 0:file close
suupen 1:c6e8a41200d9 60 DigitalOut ledout(LED2); // 1: serial out
suupen 0:7c6ad253848a 61 //DigitalOut lederror(LED4);
suupen 0:7c6ad253848a 62
suupen 0:7c6ad253848a 63 char buffer[500]; // 読みだしたデータの保管先
suupen 0:7c6ad253848a 64
suupen 1:c6e8a41200d9 65 // 送信処理状態遷移
suupen 1:c6e8a41200d9 66 typedef enum {
suupen 1:c6e8a41200d9 67 Z_txIdle,
suupen 1:c6e8a41200d9 68 Z_txStart,
suupen 1:c6e8a41200d9 69 Z_txSend
suupen 1:c6e8a41200d9 70 } txSend_t;
suupen 1:c6e8a41200d9 71 txSend_t M_txSend = Z_txIdle; // 0:受信完了(STX送信待ち) 1:STX以降CRまでの送信中
suupen 1:c6e8a41200d9 72
suupen 1:c6e8a41200d9 73
suupen 1:c6e8a41200d9 74 /**
suupen 1:c6e8a41200d9 75 * 割り込み処理
suupen 1:c6e8a41200d9 76 * 送信データ送信処理
suupen 1:c6e8a41200d9 77 * 受信完了から送信開始の20[ms]の遅延
suupen 1:c6e8a41200d9 78 * 送信データ1byte毎に2[ms]の遅延
suupen 1:c6e8a41200d9 79 * を入れて送信する
suupen 1:c6e8a41200d9 80 */
suupen 1:c6e8a41200d9 81 void txDataSend(void)
suupen 1:c6e8a41200d9 82 {
suupen 1:c6e8a41200d9 83 static char *p;
suupen 1:c6e8a41200d9 84
suupen 1:c6e8a41200d9 85 switch(M_txSend) {
suupen 1:c6e8a41200d9 86
suupen 1:c6e8a41200d9 87 case Z_txStart:
suupen 1:c6e8a41200d9 88 // STX ~ CR 送信
suupen 1:c6e8a41200d9 89 p = buffer;
suupen 1:c6e8a41200d9 90 M_txSend = Z_txSend;
suupen 1:c6e8a41200d9 91 //brak;
suupen 1:c6e8a41200d9 92 case Z_txSend:
suupen 1:c6e8a41200d9 93 if(*p != 0x00) {
suupen 1:c6e8a41200d9 94 pc.putc(*p++);
suupen 1:c6e8a41200d9 95 txSend.attach_us(&txDataSend, 1); // 次回送信開始まで2[us]セット(時間は可変設定にする)
suupen 1:c6e8a41200d9 96 }
suupen 1:c6e8a41200d9 97
suupen 1:c6e8a41200d9 98 else {
suupen 1:c6e8a41200d9 99 // 送信完了
suupen 1:c6e8a41200d9 100 M_txSend = Z_txIdle;
suupen 1:c6e8a41200d9 101 txSend.detach();
suupen 1:c6e8a41200d9 102 }
suupen 1:c6e8a41200d9 103 break;
suupen 1:c6e8a41200d9 104 case Z_txIdle: // defaultと同じ処理
suupen 1:c6e8a41200d9 105 default:
suupen 1:c6e8a41200d9 106 // nothing
suupen 1:c6e8a41200d9 107 break;
suupen 1:c6e8a41200d9 108 }
suupen 1:c6e8a41200d9 109
suupen 1:c6e8a41200d9 110 }
suupen 1:c6e8a41200d9 111
suupen 1:c6e8a41200d9 112 /**
suupen 1:c6e8a41200d9 113 * main処理
suupen 1:c6e8a41200d9 114 * 受信終了から送信開始までの20[ms]遅延設定
suupen 1:c6e8a41200d9 115 *
suupen 1:c6e8a41200d9 116 */
suupen 1:c6e8a41200d9 117 void txDataWait(int wait_ms)
suupen 1:c6e8a41200d9 118 {
suupen 1:c6e8a41200d9 119 txSend.attach_us(&txDataSend, wait_ms * 1000); // 受信完了から20[ms]経過待ち
suupen 1:c6e8a41200d9 120 M_txSend = Z_txStart;
suupen 1:c6e8a41200d9 121 }
suupen 1:c6e8a41200d9 122
suupen 1:c6e8a41200d9 123 /**
suupen 1:c6e8a41200d9 124 * 送信終了判定
suupen 1:c6e8a41200d9 125 * @@para int 戻り値 送信処理状況 1:送信完了 0:送信中
suupen 1:c6e8a41200d9 126 */
suupen 1:c6e8a41200d9 127 int txSendEndCheck(void)
suupen 1:c6e8a41200d9 128 {
suupen 1:c6e8a41200d9 129 int ans;
suupen 1:c6e8a41200d9 130 if(M_txSend == Z_txIdle) {
suupen 1:c6e8a41200d9 131 ans = 1;
suupen 1:c6e8a41200d9 132 } else {
suupen 1:c6e8a41200d9 133 ans = 0;
suupen 1:c6e8a41200d9 134 }
suupen 1:c6e8a41200d9 135
suupen 1:c6e8a41200d9 136 return(ans);
suupen 1:c6e8a41200d9 137 }
suupen 1:c6e8a41200d9 138
suupen 1:c6e8a41200d9 139
suupen 1:c6e8a41200d9 140
suupen 1:c6e8a41200d9 141
suupen 1:c6e8a41200d9 142
suupen 1:c6e8a41200d9 143
suupen 0:7c6ad253848a 144
suupen 0:7c6ad253848a 145 int main()
suupen 0:7c6ad253848a 146 {
suupen 0:7c6ad253848a 147 FILE *fp;
suupen 0:7c6ad253848a 148 int ans;
suupen 0:7c6ad253848a 149 char *p;
suupen 0:7c6ad253848a 150 int timer; // serial送信時間間隔 ( 1/1 [ms]/bit)
suupen 0:7c6ad253848a 151 int baud; // usb-serialのbaudrate ( 1/1 [bps]/bit)
suupen 0:7c6ad253848a 152
suupen 0:7c6ad253848a 153 fp = fopen("/local/data.txt", "r");
suupen 0:7c6ad253848a 154 ledopen = 1;
suupen 0:7c6ad253848a 155
suupen 0:7c6ad253848a 156
suupen 0:7c6ad253848a 157 while(1) {
suupen 0:7c6ad253848a 158 ans = fscanf(fp,"%s",buffer);
suupen 0:7c6ad253848a 159 if(ans != -1) {
suupen 0:7c6ad253848a 160 p = buffer;
suupen 0:7c6ad253848a 161 // 文字列 or 制御コマンド
suupen 0:7c6ad253848a 162 if(*p++ == '>') {
suupen 0:7c6ad253848a 163 // コマンドとして処理する
suupen 0:7c6ad253848a 164 switch(*p++) {
suupen 0:7c6ad253848a 165 case 'T':
suupen 0:7c6ad253848a 166 case 't':
suupen 0:7c6ad253848a 167 // serial data の送信間隔時間を設定
suupen 0:7c6ad253848a 168 timer = 0;
suupen 0:7c6ad253848a 169 while(isdigit(*p) == 1) {
suupen 0:7c6ad253848a 170 timer *= 10;
suupen 0:7c6ad253848a 171 timer += (*p++ - '0');
suupen 0:7c6ad253848a 172 }
suupen 0:7c6ad253848a 173 break;
suupen 0:7c6ad253848a 174 case 'B':
suupen 0:7c6ad253848a 175 case 'b':
suupen 0:7c6ad253848a 176 // baudrate 設定
suupen 0:7c6ad253848a 177 baud = 0;
suupen 0:7c6ad253848a 178 while(isdigit(*p) == 1) {
suupen 0:7c6ad253848a 179 baud *= 10;
suupen 0:7c6ad253848a 180 baud += (*p++ - '0');
suupen 0:7c6ad253848a 181 }
suupen 0:7c6ad253848a 182 pc.baud(baud);
suupen 0:7c6ad253848a 183 break;
suupen 0:7c6ad253848a 184 default:
suupen 0:7c6ad253848a 185 // nothing
suupen 0:7c6ad253848a 186 break;
suupen 0:7c6ad253848a 187 }
suupen 0:7c6ad253848a 188
suupen 0:7c6ad253848a 189 } else {
suupen 0:7c6ad253848a 190 // 出力文字列として処理する
suupen 1:c6e8a41200d9 191
suupen 1:c6e8a41200d9 192 txDataWait(1);
suupen 1:c6e8a41200d9 193 while(txSendEndCheck() == 0){
suupen 1:c6e8a41200d9 194 // 割り込みで送信中
suupen 1:c6e8a41200d9 195 ledout = !ledout; // この行がないとwhile文から抜けなくなる。原因不明
suupen 1:c6e8a41200d9 196 }
suupen 1:c6e8a41200d9 197
suupen 1:c6e8a41200d9 198 // pc.printf("%s\n",buffer);
suupen 0:7c6ad253848a 199 wait_ms(timer);
suupen 0:7c6ad253848a 200 }
suupen 0:7c6ad253848a 201 } else {
suupen 0:7c6ad253848a 202 // 読みだすデータがなくなったら、先頭に戻す
suupen 0:7c6ad253848a 203 fclose(fp);
suupen 0:7c6ad253848a 204 ledopen = 0;
suupen 0:7c6ad253848a 205
suupen 0:7c6ad253848a 206 wait_ms(timer);
suupen 0:7c6ad253848a 207
suupen 0:7c6ad253848a 208 fp = fopen("/local/data.txt", "r");
suupen 0:7c6ad253848a 209 ledopen = 1;
suupen 0:7c6ad253848a 210 }
suupen 0:7c6ad253848a 211 }
suupen 0:7c6ad253848a 212 }