初版作成 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 との相性がよいかも知れない。 ラズパイならマルチプロセス、マルチスレッドが可能である。