Microsoft Excel Data Streamer 7話
まさかの質問をもらいました
第6話までチビチビ書いていましたが、気が付けばソコソコのアクセス数が出ていました。
まさかレトロゲームのクリア動画ばかり作っている私ですが、文字で人が呼べることに感激です。
ふと携帯を見ると、質問をもらってました。
、、、とは言え、仕事が多忙でArduinoの知識が薄まってしまいズバッと答えが書けません。スミマセン!
ですが、昔に作ったソースは出てきたんで、そのまま載せます。
その前に迷惑を掛けない程度にコピペさせて頂き、質問内容を読み解かせていただきます。
頂いた質問
御サイト(特に第四、五、話)拝見致しました。貴重な情報、ありがとうございます。
私の目的は Data-Streamer から Arduino へ指示を送りサーボモーターを任意の角度回転させることです
御記事ではランプを点滅させるために( 0,1,) の二進法数値を使用されているのではないかと憶測しております。 例えば、サーボモーターを47.5°に回転させたい場合どのような手順を踏めばよいのかを御教示いただければ幸甚至極です。
質問からやることを分解
こうして質問されるとうれしいですね。
※会社ではウケが悪かったので初めての理解者様ですよ!
やることを分解すると下記の3個に分かれますね。
Arduinoでのサーボモータ角度制御
Data Streamerでデータの入出力
上記1と2を合体させてプログラムをブラッシュアップ
Arduinoでのサーボモータ角度制御
こちらはご自身でお願いします。
とは言っても、ネットに素材は多いです。
、、、わかります!ネットの素材は書き手が上級者から下級者まで様々なので真似しても上手くいかなかったり苦しい時があるでしょう。
しかし、自分を引き上げるしかないのです!
※これを言っている私自身が下級者ですけどww
Data Streamerでデータの入出力
当時、Shts!さんのサイトで見よう見まねを数時間繰り返したらできました。
なぜカンマ区切りが必要か?と言うと、Data Streamerはエクセルのアドインで、エクセルのデータをシリアル通信で送るとセルの間がカンマ区切りになります。
逆を言うと、カンマ区切りで数値を送り放題です。
ご質問者様、頑張って耐えて勉強するしかねえですぜ!
プログラムを合体させてブラッシュアップ
だいたい動き出すと、寝る間を惜しんでもブラッシュアップしたくなるzoneに入る時があります。
(別名:初心者が何かが達成しそうなワクワクが止まらないzone)
質問者様にも来るように願ってます。
Data Streamerでデータの入出力のサンプル
Shts!さんのプログラムをArduino IDEにコピペして、少し手を加えたらこんな感じです。
3年前?の作りかけソース、当時の実行環境がないので未確認でスマン!
unsigned long sw1 = 0, sw2 = 0, sw3 = 0, sw4 = 0, i = 0 ,now = 0, timec = 0;
char buff[100];
void setup() {
Serial.begin(9600);
now = millis();
}
void loop() {
if (Serial.available() > 0) {
buff[i] = Serial.read();
if (buff[i] == 'e') {
buff[i] == '\0';
sw1 = atol(strtok(buff, ","));
sw2 = atol(strtok(NULL, ","));
sw3 = atol(strtok(NULL, ","));
sw4 = atol(strtok(NULL, ","));
i = 0;
} else {
i += 1;
}
}
if (millis() > (now+500)) {
buff[i] = Serial.read();
Serial.print(sw1);
Serial.print(",");
Serial.print(sw2);
Serial.print(",");
Serial.print(sw3);
Serial.print(",");
Serial.println(sw4);
now = millis();
}
}
これをArduinoに入れて、Data Streamerから入出力を設定すると、Data StreamerからArduinoへ飛ばした数値をData Streamerに返してくるはずです。
当時の私はスイッチのON/OFFを大量に渡したかったのでunsigned long型でSW1~SW4とセル4個を読んで返すようにしていました。
(unsigned long型なのでセル1個が0~ffffffffとなり、2進数に展開して0をOFF/1をONにすると、32個のON/OFF信号にできます)
ここらへんは、質問者さんの角度データや、回転スタート信号に置き換えられますね。
あと、このソースではセル4個以上は受け付けないので、5個目までで「e」を打つと読み込み終了となります。
これをチョコチョコ触って使って改善して、「動くやーん!」って声が出たら勝ちです。
あとは、打ち込みながら考えて自分色に染めてくださいw