vb.net 2010からPICへのデータ送信方法と受信処理の問題

このQ&Aのポイント
  • vb.net2010のシリアルポートコントロールを使用してPICへデータを送り、受信した文字によって制御を変えることができない問題が発生しています。
  • PCからはデータを正常に受信できていることを確認しましたが、文字列(例えば01やABなど)を送信した場合がうまくいきません。
  • どのような原因が考えられるでしょうか?
回答を見る
  • ベストアンサー

vb.net 2010からPICへのデータ送信

vb.net2010のシリアルポートコントロールを使用してPICへデータを送り、受信した文字によって,制御を変えようとしています。 先日、こちらで質問させていただき,文字の送信はできるようになり、受信した文字によって制御を変えることができるようになりました。 しかし、文字列(例えば01やABなど)を送信した場合がうまくいきません。 文字列がきちんと受信できていないのかと思い、PCからデータ受信後、PICからPC文字列をそのままリターンすると問題なく受信できているようです。 このような場合、どういったことが原因と考えられるでしょうか? PIC側は受信割り込み内で、以下のようなコードです。      char buf[10]; buf[i]=getc(); if(buf[i] == '\r')//改行を受信するまで、配列に文字を格納 { buf[i]= '\0'; printf(buf);//PCに受信文字列をリターン if (i == 'ABC') { //受信文字列がABCの場合の処理 } else{           //受信文字列がABC以外の場合の処理 } }

質問者が選んだベストアンサー

  • ベストアンサー
  • YUI_AI
  • ベストアンサー率45% (303/661)
回答No.2

No1です。 C言語の場合、文字列をシングルクオートで囲むのは間違いです。 以下のURLでも参照して下さい。 http://exp1gw.ec.t.kanazawa-u.ac.jp/PCIF-2001/C-string.html 文字列で比較を行う場合は、下記URLの様な処理を行います。 http://masudahp.web.fc2.com/cl/strpnt/c1021.html シングルクオートで1文字ずつIfの入れ子で処理するのもありですが、効率は良くないです。 ※特にPIC等メモリ容量が少ない場合は直ぐにメモリを圧迫してしまうでしょう。

con014057
質問者

お礼

ありがとうございました! strcmpを使用することで希望の動作が可能になりました!

その他の回答 (1)

  • YUI_AI
  • ベストアンサー率45% (303/661)
回答No.1

if (i == 'ABC') 「i」は char buf[] の添え字ですよね? i が'ABC'になる事はないと思いますがいかがでしょうか?

con014057
質問者

お礼

ご回答ありがとうございます。 投稿する際に誤記をしてしまいました。   i → buf でした。 よろしくお願い致します。

関連するQ&A

  • picからpicへのデータ送信方法について

    pic16f690間でUSARTを使用して、データのやり取りを行おうとしています。 送信側から1~25の10進数を送信し、受信側で受けとった数値の回数の処理を行おうとしています。 コンパイラはCCS社のものを使用しています。 データ送信側は printf("%2x",送りたいデータ) 受信側は usart受信割り込みで  getc(受信したデータを入れる変数) 上記のようにコードを書いています。 しかし、受信側で正しい数値を受信できていないようです。 ただ単に1又は2桁の数値を受信する場合はどのようにすればいいでしょうか? よろしくお願い致します。

  • PICのシリアル通信のWIN_APIプログラムについて

    PICとPCとのシリアル通信の WIN_APIプログラムについてどなたかご存知の方は教えてください. 現状,API関数を用いて,シリアル通信をできるようにプログラムを作成したのですが,送信はできるのですが,受信データが"C0"をPICから送付しているのに,"FFFFFFFC0"と受信されてしまいます. 先の"FFFFFFF"をとるにはどうしたらいいでしょうか? 現状:受信プログラム // シリアルポートに対する書き込み(PICに送信命令) WriteFile(hCom, w_com_Buf,lstrlen(w_com_Buf), &n, 0 ); // シリアルポートに対する読み込み ReadFile(hCom, s_com_Buf,1, &n, 0 ); mikroC上のUSARTターミナルでは送受信は適正で, 上記のプログラマで 送信はPIC側で受信していることは7SEGを使って確認しています. しかし,PC側では, s_com_Buf[0]には,"C0"が入ったり,"FFFFFFC0"が入ったりします. PICは現状,多チャンネルAD変換をしているため, 送信に対する受信データのやり取りができなくて困っています. どなたか先生教えてください.

  • PIC16F1823 SPI通信

    PIC16F1823をマスターとして、スレーブデバイスから、SPI通信にてデータを読み込もうとしています。オシロスコープで波形を見ると、期待したデータをスレーブ側は出力しています。しかし、PICでは、0x00のデータしか受信されません。 PIC側のマスター受信では、SSP1BUFをダミーで読み込み、SPIでコマンドを送信、SSP1BUF.BFをみて、さらにSSP1BUFをダミーで読み込み、次にデータ受信用にダミーデータと受信を行い、SSP1BUF.BFをみて、SSP1BUFを読んでいます。気を付けて確認しなけらばならないレジスタ等あったら教えてください。

  • PIC-PCシリアル通信プログラム

    PICとPCでRS232のシリアル通信を行おうとしているんですけれど、 PICからPCに文字列を送ろうと たとえば PIC側からプログラムで puts("A\0");とデータを送信して ReadFile()関数でPC側で受信しているんですけれど、 受信したデータを画面表示されると Aフフフフフフフフフフフフフフフフフフフフフフフフと表示されてしまいます。 ちなみに送信データをNULLだけにしても フフフフフフフフフフフフフフフフフフフフフフフフフを表示されます。 これを解決する方法がわかりません。 どなたか教えてください。

  • usartによるpic18fからpic16fへの…

    usartによるpic18fからpic16fへのデータの受け渡しについて いつもお世話になります。 pic18f2680からpic16f690へデータを渡すためにusartを使用して行おうとしていますがうまくいきません。 送り側(18f2680)で i=3 itoa(i,f);//int f,char i putsUSART(f); 上記のように送信し, 受け側(16f690)で     c= getc();//int c printf("%u",c); と、受けたところ000000000000000000000000510と表示されてしまいます。 printfなどの書式を変えても問題が治りません。 どなたかお詳しい方がいらっしゃいましたらご教授よろしくお願い致します。

  • PCからPICへのデータ送信について

    VB2010をのserialport機能を用いて,外部機器にデータを送るプログラムを作成しています。 外部機器から送信されてきたデータの受信は問題なくできましたが,PCからの送信がうまく出来ません。 Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click If TextBox2.Text.Length = 0 Then MessageBox.Show("送信文字列を入力してください", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error) TextBox2.Focus() Exit Sub End If Try SerialPort1.WriteLine(TextBox2.Text) Catch ex As Exception MessageBox.Show(ex.Message, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try End Sub プログラムは上記のようになります。(microsoftのサンプルそのままです。) 上記のプログラムで 数字の「1」を送信したいのですが,うまく送ることができません。 外部機器は,データが送信されたことは感知していますが, 「1」 が送られたことは認識できていないようです。 serialdebug2というソフトを使用して,「1」 を送信した場合は,問題ありませんでした。  ほかのサイトでも質問させてもらい,VBの文字コードを変換するようにとのアドバイスを頂き,実行しましたが,うまくデータが送信できませんでした。 どうすれば,上記のような問題を解決できるでしょうか?

  • ポインタ…(゜Д゜≡゜Д゜)?

    え~C言語初心者です。 ポインタ、文字列等の比較を教えて下さいm(._.)m ペコッ 下記ソースでおかしいところがあれば指摘お願いします。 (1)数値の比較  int i = 10;  if(i == 10){処理} (2)文字の比較  char c = 'c';  if(c == 'c'){処理} (3)文字列の比較  char *c = "abc";  if(c == "abc") {処理}   ↑これだとポインタと文字列の比較になるんですよね?  if(0 == strcmp("abc",c)){処理}   ↑この書き方で問題ないのでしょうか?  if(0 == strcmp("abc",*c)){処理}                ~~  だとダメなのでしょうか? ※int型のポインタを使う場合  int *i = 0;  if(0 == *i){処理}   になるのでしょうか?

  • PICのUSARTについて

    PICのUSARTについて PICのUSART機能を使おうかと思い色々読んでいてPICのUSART(非同期の場合)は (1)基本的に1対1でしか接続できない。 (2)(非同期では)互いは平等でマスター、スレーブ関係はない (3)それぞれ送信側を制御し意図的に受信をする事はできない。 (その場合は相手に取り決めたコードを送ってデータを要求する) という感じでよろしいのでしょうか。 またPICの通信機能としてはSSPのSPIに近いような感じはしますがどちらが簡単でしょうか?

  • ■ソケット通信 送信文字列のオーム返し

    こんにちは。Win2000、VB6.0(SP5)でソケット通信をしようと思っています。 接続や、送信・受信をすることはできたのですが、受信したとき、送信文字列も受信され困っています。 <例> 送信:abc 受信:abc    12345(期待する返答) という感じです。 期待する返答の文字数が決まっているので、それ以外はゴミとして扱うこともできるのですが、時々ですが、abc12345のように、送信文字列と受信文字列がくっついてきてしまうこともあり、解決するならしたいと思っています。 telnetでテストすると、オーム返しはありません。 あと、相手の装置には、オーム返しの機能はないそうです。 よろしくお願いします。

  • PICのプログラムで困っています。

    現在、PICと表示器(タッチパネル)による制御のプログラムを作成中です。 まだ始めたばかりで、初心者です。表示器(松下電工GT11)とPIC(C言語CCS)を使用していますが、PICからの送信はprintf文で比較的簡単でしたが、受信がうまくできません。 経験者の方でアドバイスがありましたら、お願い致します。