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
Diff: main.cpp
- Revision:
- 2:52002844d0c6
- Parent:
- 1:c6e8a41200d9
- Child:
- 3:327bb0fcdf45
--- a/main.cpp Sat Jul 26 23:58:24 2014 +0000 +++ b/main.cpp Sat Aug 02 10:05:35 2014 +0000 @@ -1,9 +1,9 @@ /** serial data 送信ツール - + V00.01 : 140719 - - + + <使い方> "data.txt" に送信する文字列を設定し、mbedに保管する。 mbedに通電するかRESET SW を押すとUSB-serialから文字列を出力する @@ -47,20 +47,34 @@ */ + +//#define DEBUG + #include "mbed.h" +#include <stdio.h> #include "ctype.h" +//#include <string.h> +#include "BufferedSerial.h" LocalFileSystem local("local"); // local file systemの設定 +//Serial pc(USBTX, USBRX); // usb-serialの設定 +#ifdef DEBUG +Serial chk(USBTX, USBRX); +#endif // DEBUG -//Serial pc(USBTX, USBRX); // usb-serialの設定 -Serial pc(p9, p10); +BufferedSerial pc(USBTX, USBRX); +//BufferedSerial pc(p9, p10); Timeout txSend; // 送信間隔作成用 DigitalOut ledopen(LED1); // 1:file open 0:file close DigitalOut ledout(LED2); // 1: serial out //DigitalOut lederror(LED4); -char buffer[500]; // 読みだしたデータの保管先 +#define Z_bufferNumber (500) +char buffer[Z_bufferNumber]; // 読みだしたデータの保管先 + +int D_start_wait_us = 100; // 送信開始時の待ち時間 (1/1 [us]/bit) min = 100[us] +int D_char_wait_us = 100; // キャラクタ間の送信間隔 ( 1/1 [ms]/bit) min = 100[us] // 送信処理状態遷移 typedef enum { @@ -92,7 +106,7 @@ case Z_txSend: if(*p != 0x00) { pc.putc(*p++); - txSend.attach_us(&txDataSend, 1); // 次回送信開始まで2[us]セット(時間は可変設定にする) + txSend.attach_us(&txDataSend, D_char_wait_us); // 次回送信開始まで2[us]セット(時間は可変設定にする) } else { @@ -101,7 +115,7 @@ txSend.detach(); } break; - case Z_txIdle: // defaultと同じ処理 + case Z_txIdle: // defaultと同じ処理 default: // nothing break; @@ -114,10 +128,11 @@ * 受信終了から送信開始までの20[ms]遅延設定 * */ -void txDataWait(int wait_ms) +void txDataWait(void) { - txSend.attach_us(&txDataSend, wait_ms * 1000); // 受信完了から20[ms]経過待ち + txSend.attach_us(&txDataSend, D_start_wait_us); // 受信完了からx[ms]経過待ち M_txSend = Z_txStart; + } /** @@ -144,8 +159,9 @@ int main() { + pc.baud(9600); FILE *fp; - int ans; +// int ans; char *p; int timer; // serial送信時間間隔 ( 1/1 [ms]/bit) int baud; // usb-serialのbaudrate ( 1/1 [bps]/bit) @@ -155,58 +171,108 @@ while(1) { - ans = fscanf(fp,"%s",buffer); - if(ans != -1) { + if(fgets(buffer, Z_bufferNumber, fp) != NULL){ +// ans = fscanf(fp,"%s",buffer); +// if(ans != -1) { p = buffer; // 文字列 or 制御コマンド - if(*p++ == '>') { + //ここ + switch(*p){ + case '>': +// if(*p == '>') { // コマンドとして処理する + p++; switch(*p++) { case 'T': case 't': - // serial data の送信間隔時間を設定 - timer = 0; - while(isdigit(*p) == 1) { - timer *= 10; - timer += (*p++ - '0'); + switch(*p++) { + case 'F': + case 'f': + // serial data の送信間隔時間を設定 + timer = 0; + while(isdigit(*p) != 0) { + timer *= 10; + timer += (*p++ - '0'); + } + if(timer == 0) { + // 設定値が0の時は、最小値1[us]を設定する + // 100[us]以下にすると割り込みがかからなくなるのでその対策 + D_start_wait_us = 100; + } else { + D_start_wait_us = timer * 1000; + } +#ifdef DEBUG + chk.printf("timer = %06d\r\n",timer); +#endif // DEBUG + break; + case 'C': + case 'c': + // キャラクタ間隔時間(第二引数)の確認 + timer = 0; + while(isdigit(*p) != 0) { + timer *= 10; + timer += (*p++ - '0'); + } + if(timer == 0) { + // 設定値が0の時は、最小値1[us]を設定する + // 100[us]以下にすると割り込みがかからなくなるのでその対策 + D_char_wait_us = 100; + } else { + D_char_wait_us = timer * 1000; + } + break; + default: + break; } break; - case 'B': - case 'b': - // baudrate 設定 + case 'B': + case 'b': + // baudrate 設定 baud = 0; - while(isdigit(*p) == 1) { + while(isdigit(*p) != 0) { baud *= 10; baud += (*p++ - '0'); } pc.baud(baud); +#ifdef DEBUG + chk.printf("baud = %d\r\n",baud); +#endif //DEBUG break; default: // nothing break; } - - } else { + //ここ + break; + case ';': + // comment + break; + default: + // } else { // 出力文字列として処理する - txDataWait(1); - while(txSendEndCheck() == 0){ + txDataWait(); + while(txSendEndCheck() == 0) { // 割り込みで送信中 ledout = !ledout; // この行がないとwhile文から抜けなくなる。原因不明 - } + } + - // pc.printf("%s\n",buffer); +// pc.printf("%s\n",buffer); wait_ms(timer); + //ここ + break; } } else { // 読みだすデータがなくなったら、先頭に戻す fclose(fp); ledopen = 0; - - wait_ms(timer); +// wait_ms(timer); fp = fopen("/local/data.txt", "r"); ledopen = 1; } } } + +