質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

シリアルポート

シリアルポートは一度に一ビットごと移行される物理的なインターフェイスです。一般的には、9ピンのd-subコネクタであるRS-232を指します。

checkbox

checkboxは、GUIのエレメントです。また、HTML<input>タグのtype属性で扱われる値を指します。

Q&A

解決済

1回答

7062閲覧

C#で認識可能な数値が見つかりませんでした、と出てしまうんですけど

ncncup

総合スコア13

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

シリアルポート

シリアルポートは一度に一ビットごと移行される物理的なインターフェイスです。一般的には、9ピンのd-subコネクタであるRS-232を指します。

checkbox

checkboxは、GUIのエレメントです。また、HTML<input>タグのtype属性で扱われる値を指します。

0グッド

0クリップ

投稿2016/07/26 06:22

こんにちは。ビジュアルスタジオでC#を使ってWindows Formsアプリを作成しています。質問なんですが、
シリアル通信で豆電球を点灯させたり、消灯させたりしています。
フォームには テキストボックスと送信ボタンとチェックボックス16個あります。
豆電球が16個ついている装置をUSBとつないでます。
チェックボックス1をチェックすると豆電球1が点灯します。チェックを外すと消灯します。

装置とアプリの関係は
・アプリでコマンド値(16進数)をテキストぼっくすに入力して送信ボタンを押すとシリアル通信でそのコマンドを送出する
・コマンド値は豆電球のオンオフをビットパターンで表していて、0x0001=豆電球1~0x8000=豆電球16に対応している。
・コマンド送信を実行すると、コマンド値でビットが1になっている豆電球について、アプリ側ではチェックボックスがオンになり装置側では豆電球が点灯する(ビットが0ならチェックがオフ、豆電球が消灯)

やりたいことは
テキストボックスに16進数の文字を入力して豆電球1,2,3を点灯させたり、豆電球3、5、7、9を点滅させて、その点滅させた豆電球の番号と、チェックボックスの番号を連動させてチェックさせたいです。

そしてデバックしてテキストボックスに"mh,ffff"と入力して送信すると豆電球は全部点灯するんですけど
”認識可能な数値が見つかりませんでした” とでできます。
なんか対処法はないでしょうか?ご教授お願いいたします。

コードは次のようになります。

try
{
//! シリアルポートからテキストを送信する.
serialPort1.Write(data +"\n");

//入力された16進数文字列を数値に変換 int value = Convert.ToInt32(data, 16); for (int i = 1; i <= 16; i++) { //画面上の処理対象チェックボックスコントロールを特定 Control[] cs = this.Controls.Find("CheckBox" + i.ToString(), true); //チェック対象ビットに1が立っていればチェックオン、0ならチェックオフ ((CheckBox)cs[0]).Checked = ((value & (1 << (i - 1))) > 0); } } catch (Exception ex) { MessageBox.Show(ex.Message); } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

テキストボックスに"mh,ffff"と入力して送信すると豆電球は全部点灯するんですけど

”認識可能な数値が見つかりませんでした” とでできます。

ということは、
提示されているソースの
data="mh,ffff"ということでしょうか?
ということであれば、
int value = Convert.ToInt32(data, 16);
では、固定長であればdata.substring(3,4)とか、
でffffだけにしてConvert.ToInt32にて変換しないとエラーになりますね。

投稿2016/07/26 06:46

KIYOSHI

総合スコア268

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ncncup

2016/07/26 06:56

ありがとうございます。 そうですね。テキストボックスに”mh,ffff”と入力しているので data="mh,ffff" となります。 まだ初心者で始めたばかりの者なので、 どのように書けばよいかご教授くださいませんか?よろしくお願いいたします。
KIYOSHI

2016/07/26 07:07

答え書いてますがわからないでしょうか? data="mh,ffff"として、 ffffは必ず4文字目から4文字とします。 条件が違う場合は修正してください。 string tValue = data.substring(3,4);  // これで"ffff"が取れます。 int value=Convert.toInt32(tValue,16);
ncncup

2016/07/26 08:28

本当にありがとうございます。本当に助かります。 最後にもう一つ質問いいですか? ”mh,ffff”で送信したら豆電球は点灯しチェックボックスの自動チェックに成功できました。 ただ、”aa,1”と送信するとチェックボックスが単体で点灯させることができるのですが、こうすると インデックスおよび長さは文字列の場所を参照しなければなりません。 パラメータ名:Length と表示されてしまいます。 たぶん送信する文字数が関係すると思うんですが どのようにコードを書いて解決するかご教授お願いいたします。 質問ばかりで本当に申し訳ないのですが、よろしくお願いいたします。
KIYOSHI

2016/07/26 08:42

エラーの原因は "aa,1"をSubstring(3,4)としたら、 4文字目以降が4文字無いのでエラーになります。
ncncup

2016/07/26 11:38

細かい説明とかほんとに感謝しています。ありがとうございます。 まだ始めたばかりで知識がまだぜんぜんなくて、 教えてもらったコードを足したんですけどなかなかできなくて。 ほんとに申し訳ないんですけど、どのようにコードを書けばいいか教えていただけませんか? すみません。よろしくお願いいたします。
KIYOSHI

2016/07/26 12:09

初心者としても、ヘルプとかみれば出てきますよ。 4文字目からというのは間違いないのであれば、 string tValue = data.substring(3); int value=Convert.toInt32(tValue,16); 4文字目からも違う場合もあるということであれば、 int startIndex = data.IndexOf(",")+1; // 開始位置","の次の文字位置 string tValue = data.Substring(startIndex);
ncncup

2016/07/27 02:59

コードなどもご教授ありがとうございました。 解決できました。本当に助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問