ここから本文です

解決済みの質問

シリアル通信について

mr_adult_childさん

シリアル通信について

R232Cを使ってモーターを制御することを考えています。
teratermを用いて動かすことには成功したのですが、C言語のプログラムから
動かしたいと考え、以下のようなプログラムを作りましたが動きません。
問題点を教えていただけないでしょうか。具体的には、書き込み(WriteFile()に失敗しています)
ポート、ボーレート、データ、パリティなどはこの設定であっています。

#include <windows.h>
#include <stdio.h>

int main( void )
{
HANDLE hComm; /* シリアルポートのハンドル */
DCB dcb; /* 通信パラメータ */
char* str="r0,010\n"; /* 送信データを格納する */
DWORD writesize; /* ポートへ書き込んだバイト数 */

hComm = CreateFile(
"COM2", /* シリアルポートの指定 */
GENERIC_READ | GENERIC_WRITE, /* アクセスモード */
0, /* 共有モード */
NULL, /* セキュリティ属性 */
OPEN_EXISTING, /* 作成フラグ */
FILE_ATTRIBUTE_NORMAL, /* 属性 */
NULL /* テンプレートのハンドル */
);

GetCommState(hComm, &dcb); /* DCB を取得 */
dcb.BaudRate = 9600;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
SetCommState(hComm, &dcb); /* DCB を設定 */

if(WriteFile(hComm, str, strlen(str), &writesize, NULL) == 0){
printf("Write Error\n");
}else{
printf("Write Success\n");
}
/* シリアルポートに書き込み */

printf("%d / %d have already written \n",writesize,strlen(str));

if(CloseHandle(hComm) != 0){
printf("Close Error\n");
}else{
printf("Close Success\n");
}

return(0);
}


よろしくお願いします。

補足
うまくいってました。特にエラーは起こってませんでした。
ただ、
char* str="r0,010\n"; /* 送信データを格納する */
の\nがうまくおくられてないのか、改行コードが転送されていないことがわかりました。

シリアル通信で改行コードを送るにはどのようにすればよいのでしょうか?

違反報告

ベストアンサーに選ばれた回答

sapporoquestさん

GetLastError()を使って、どんなエラーなのか取得してください。
GetLastError()は、呼び出し側のスレッドが持つ最新のエラーコードを取得します。
システムエラーコードに対応するエラー文字列を取得するには、FormatMessage 関数を使います。

この質問は投票によってベストアンサーが選ばれました!

この質問・回答は役に立ちましたか?
役に立った!

お役立ち度:お役立ち度 3点(5点満点中)4人が役に立つと評価しています。

知恵ノートとは?

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。

お客様自身の責任と判断で、ご利用ください。

話題のキーワード

[カテゴリ:プログラミング]

違いがわかる知恵袋

[カテゴリ:プログラミング]

ただいまの回答者

14時40分現在

2795
人が回答!!

1時間以内に5,045件の回答が寄せられています。

>>回答ひろばに行く


知恵コレに追加する

閉じる

知恵コレクションをするID/ニックネームを選択し、「追加する」ボタンを押してください。
※知恵コレクションに追加された質問や知恵ノートは選択されたID/ニックネームのMy知恵袋で確認できます。

ほかのID/ニックネームで利用登録する