2019/08/12(月)18:02
Visual Studio 2019 の C# でアプリを作ってみた
今日は晴れ時々曇りでそこそこ暑かった。
朝から仏壇の掃除をして、フナ水槽の掃除をしました。お盛りもんと花をセッティングすれば、お盆の準備は何とかなりそうです。
フナ水槽はキレイになった
その後、Arduino Uno 互換ボード+センサで作ってる温湿度計の制御を Windows 側から行うアプリケーションを作ってみようと思い、Visual Studio 2019をインストール。C++かC#でWindowsアプリをビルドできるようなオプションでインストールしてみました。調べてみるとC#の方が敷居が低そうなので、C#でチャレンジすることに。
やりたいのはArduinoとのシリアル通信をGUIで行うこと。Webの情報を色々調べてみると、C#フォームプログラムでのシリアル通信の仕方というページがあったので、ここを参考に作ることにしました。が、Visual Studio 2019ではWindowsフォームでのプロジェクト作成ができないようで(ホントかな?(^^;)、WPFとかいう形式でWindowsアプリを作り始めました。
大体のところは参考にしたページの内容を読めば分かったんですが、シリアル受信のデータをテキストボックスに貼り付けようとして、ハタと困ってしまいました。(^^;; WindowsフォームではテキストボックスのInvokeRequiredプロパティを見て、何やらInvokeしてごにょごにょする(まだ理解できてない(^^;;)のですが、WPFでInvokeRequiredプロパティが無いのです。うーむ、分からん... と調べてると、c# – WpfでInvokeRequiredっちゅうページが見つかりました。すると、何やらディスパッチャにInvokeメソッドがあるので、ごにゃごにゃ(まだ理解できてない)と書いてありました。それを頼りに何とかシリアル受信データをテキストボックスに貼り付けることができました。コードは下記のようになったのですが、ちゃんと理解できてない... (^^;;
delegate void SetTextCallback(string text);
private void Response(string text)
{
if (textRX.Dispatcher.CheckAccess() == false)
{
SetTextCallback d = new SetTextCallback(Response);
Dispatcher.Invoke(d, new object[] { text });
} else
{
textRX.AppendText(text);
}
}
private void portA_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
if (portA.IsOpen == true)
{
try
{
string str = portA.ReadExisting();
Response(str);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
} else
{
return;
}
}
こんなんでいいんやろか... (^^;; と思いつつも、何とかアプリは形になり、Arduino側に送るコマンドのインターフェースやテキストボックス内容の保存もできるようになりました。テキストボックス内容の保存で参考にした(ほぼパクった(^^;;)ページはC#で「名前を付けて保存」ダイアログを使ってみたです。参考になりました。ありがとうございました。
っちゅうことで、今現在のアプリの外観はこんな感じ。
殺風景な見た目やけど機能的には問題ない(^^;;
Arduinoが専用のアプリで制御できると操作が楽ちんになって良いです。C#でのアプリづくりもナカナカおもしろいです。
--- 18:00 ---