/* ---------------------------------------- シリアル通信プログラム ---------------------------------------- */ #include #include #include HANDLE h; void main() { int i=0; char sBuf[1]; char rBuf[1]; char str[100]; int baudRate = 9600; unsigned long nn; DCB dcb; COMMTIMEOUTS cto; int ReadFlag=1; /* ---------------------------------------------- ファイルのクリエイト/オープン ---------------------------------------------- */ // クリエイトしたファイルのファイルハンドラを返す h = CreateFile( "COM1", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0 ); if ( h == INVALID_HANDLE_VALUE ) { printf("Open Error!\n"); exit(1); } /* ---------------------------------------------- シリアルポートの状態操作 ---------------------------------------------- */ GetCommState( h, &dcb ); // シリアルポートの状態を取得 dcb.BaudRate = baudRate; SetCommState( h, &dcb ); // シリアルポートの状態を設定 /* ---------------------------------------------- シリアルポートのタイムアウト状態操作 ---------------------------------------------- */ GetCommTimeouts( h, &cto ); // タイムアウトの設定状態を取得 cto.ReadIntervalTimeout = 1000; cto.ReadTotalTimeoutMultiplier = 0; cto.ReadTotalTimeoutConstant = 1000; cto.WriteTotalTimeoutMultiplier = 0; cto.WriteTotalTimeoutConstant = 0; SetCommTimeouts( h, &cto ); // タイムアウトの状態を設定 /* ---------------------------------------------- 受信データの読み込み(1行分の文字列) ---------------------------------------------- */ while(1) { //ReadFlag=1;//出力後読み取り準備完了 printf("送信文字を入力してください\n"); sBuf[0]=getchar(); WriteFile( h, sBuf, 1, &nn, 0 ); // シリアルポートに対する読み込み printf("%sを入力しました\n",sBuf); getchar(); /* while(ReadFlag) { ReadFile( h, sBuf, 1, &nn, 0 ); // シリアルポートに対する読み込み if ( nn==1 ) { if ( sBuf[0]==10 || sBuf[0]==13 ) { // '\r'や'\n'を受信すると文字列を閉じる if ( i!=0 ) { str[i] = '\0'; i=0; printf("%sが出力されました\n",str); ReadFlag=0;//読み取り終了 } } else { str[i] = sBuf[0]; i++; } } }//while(ReadFlag) */ }//while(1) }