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

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

新規登録して質問してみよう
ただいま回答率
85.46%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

シリアルポート

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

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Q&A

解決済

1回答

3174閲覧

ExcelとArduinoのシリアル通信において、Excelがシリアルで受信したらグラフ化する方法

uimaro

総合スコア14

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

シリアルポート

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

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

0グッド

0クリップ

投稿2020/04/06 08:18

編集2020/04/07 02:56
Option Explicit Sub EasyCommTest() Dim A$ Dim n '①初期設定 ec.COMn = 11 'COM4を指定します ec.Setting = "9600,n,8,2" '通信条件(ボーレート,パリティビット数,データビット数,ストップビット数)の設定 ec.HandShaking = ec.HANDSHAKEs.RTSCTS '通信ハンドシェークの設定 ec.Delimiter = "CR" 'データの区切りをCrに設定する A$ = ec.AsciiLine 'デリミタの手前までの受信文字列をA$に代入します. ec.InBufferClear '受信バッファをクリア '1行ずつデータを入れていく n = Cells(Rows.Count, "A").End(xlUp).Row + 1 Range("A" & n).Value = A$ '1秒おきにデータを見に行く If Range("A10") = "" Then Application.OnTime Now() + TimeValue("00:00:01"), "EasyCommTest" Else Range("A1:A10").Clear End If '⑤ポートを閉じる ec.COMn = -1 '終了処理 End Sub ************************************************** コード

EasyCommというモジュールを使用して、Arduinoからのシリアルを変数の中に格納することはできたのですが、
Arduino側でデータを不定期に吐き出す場合、Excel側でデータを受信したときに何かアクションを起こすということがしたいです。

例えば、Arduino側からシリアルが来たら、Excelのセルにその値を入れるなどです。

何か方法あればご教示ください。

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

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

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

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

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

y_waiwai

2020/04/06 08:34

その変数の中に格納できたというコードを提示しましょう
uimaro

2020/04/07 02:33

下記のコードで、A$に格納したデータを順番にセルに書き込んでいくということはできました。 ただこのコードだと、1秒おきにしかデータを更新できません。 これを、Arduinoからシリアルを受信したタイミングでデータを更新するという流れにしたいです。 プログラム初心者のため、わかりにくい点もあるかと思いますが、 よろしくお願いします。 ************************************************** Option Explicit Sub EasyCommTest() Dim A$ Dim n '①初期設定 ec.COMn = 11 'COM4を指定します ec.Setting = "9600,n,8,2" '通信条件(ボーレート,パリティビット数,データビット数,ストップビット数)の設定 ec.HandShaking = ec.HANDSHAKEs.RTSCTS '通信ハンドシェークの設定 ec.Delimiter = "CR" 'データの区切りをCrに設定する A$ = ec.AsciiLine 'デリミタの手前までの受信文字列をA$に代入します. ec.InBufferClear '受信バッファをクリア '1行ずつデータを入れていく n = Cells(Rows.Count, "A").End(xlUp).Row + 1 Range("A" & n).Value = A$ '1秒おきにデータを見に行く If Range("A10") = "" Then Application.OnTime Now() + TimeValue("00:00:01"), "EasyCommTest" Else Range("A1:A10").Clear End If '⑤ポートを閉じる ec.COMn = -1 '終了処理 End Sub **************************************************
y_waiwai

2020/04/07 02:50

そのコードを質問に追記しましょう 質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
uimaro

2020/04/07 02:56

ご指導ありがとうございます。
guest

回答1

0

自己解決

バッファにデータが無いときはdoを使用してその中をループさせることで、
データが入ったときにだけデータを表に挿入する方法で、解決することができました。

Do While ec.InBuffer = 0
DoEvents
Loop

data = ec.AsciiLine

if data <> "" Then
’以降、データがあるときの処理

投稿2020/04/09 23:42

uimaro

総合スコア14

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問