初版作成 2021.5.28
最終更新 2024.04.01
Excel に組み込むアドインらしい。 これを組み込むと、Excel から仮想シリアルポートを読み書きできるように なる。 ● アドインを有効化する (1) ファイル --- オプション --- アドイン (2) Microsoft Data Streamer for Excel の行を選択 (3) 管理を Excel アドイン ---> COM アドインに変更して「設定」 (4) Microsoft Data Streamer for Excel にチェックを入れて OK Data Streamer というリボンが現れる。 (5) デバイスの接続を実行すると以下のシートが自動生成される 入力データ 出力データ 設定 マニフェスト
(1) デバイスの接続で arduino を接続しておく (2) 詳細:詳細(歯車マーク)---> 設定 でボーレートを設定
「データの開始」をクリックすると、シリアルからの入力を 取り込むモードに入る。抜けるには「データの停止」 arduino から 1,2,3,4(改行) のような文字列を送信すると、シート「入力データ」の ch1 -- ch4 に入る。チャンネルはデータの順番を表すようだ。 改行は (0x0d 0x0a), (0x0a) のどちらでも可 ○ Arduino におけるサンプルプログラム int i = 0; char moji[100]; void loop() { sprintf(moji, "%d,%d,%d%c%c", i, i*10, i*100,13, 10); i++; Serial.print(moji); delay(1000); } 上記のプログラムを実行すると ch1 -- ch3 に数値が入る。
シート「出力データ」において、enter キーを押すと、 その時点での ch1 -- ch10 のうち、空でないセルについて、 1,2,3(改行) のように送出する。 ○ Arduino サンプルプログラム #define PIN1 2 #define PIN2 13 int serial_read_char(); // 1 個読み込む void serial_read_line(char buf[],int n); // 1 行読み込む void setup() { Serial.begin(9600); pinMode(PIN1, OUTPUT); pinMode(PIN2, OUTPUT); } int serial_read_char(){ // 未使用 int cha; while(1){ cha = Serial.read(); // 入力なしのとき -1 if ( cha != -1 ) break; // 何か入力があったなら、ループ脱出 } return cha; } void serial_read_line(char buf[], int n){ int i = 0, input; while(1){ input = Serial.read(); if ( input == -1 ) continue; if ( input == int('\n') ) { buf[i] = '\0'; return; } buf[i] = input; i++; if ( i >= n-1 ) { buf[n-1] = '\0'; return; } } } void loop() { char moji[1000]; int a, b; serial_read_line(moji, 1000); sscanf(moji, "%d,%d", &a, &b); if ( a == 1 ){ digitalWrite(PIN1, HIGH); } else { digitalWrite(PIN1, LOW); } if ( b == 1 ){ digitalWrite(PIN2, HIGH); } else { digitalWrite(PIN2, LOW); } }
arduino のようなマイコンでは、シリアルの入力と出力を 別のプロセス(あるいはプロセス)で処理するのが難しいので、 Raspberry Pi の方が Excel との相性がよいかも知れない。 ラズパイならマルチプロセス、マルチスレッドが可能である。