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.
Dependencies: mbed BufferedSerial
main.cpp@1:c6e8a41200d9, 2014-07-26 (annotated)
- 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?
User | Revision | Line number | New 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 | } |