スマホでロボットアームを動かす
続き
あれから色々とやってみました。
先ず、ロボットアームを再分解してパターンを追い直しましたが、問題なし。
プログラムも見直しましたが、問題が有る様には思えません。
そもそもパラレルポートとのやり取りに何か勘違いが有るかもと、「パラレルポート 通信方法」他、関係するであろうワードで検索の旅に出ましたが分からず仕舞いでした。
そんな中
を見ていてはッと気づいた事が有ります。
1760行のLPRINT "H" : LPRINT "S5"ですが続けてコマンドを送っています。
この時、記憶が一気によみがえりました。あ、そうだ改行コードが要る
急いでプログラムを書き直しました。
書き直したプログラム
byte ledPins[] = {15, 2, 0, 4, 5, 18, 19, 21};
int ledCounts;
boolean strobe_flag = false;
void setup() {
ledCounts = sizeof(ledPins);
for (int i = 0; i < ledCounts; i++) {
pinMode(ledPins[i], OUTPUT);
}
pinMode(22, OUTPUT);
pinMode(23, INPUT);
pinMode(34, INPUT);
pinMode(35, INPUT);
digitalWrite(22, HIGH);
}
void loop() {
if (digitalRead(34) == LOW) {
digitalWrite(ledPins[0], LOW);
digitalWrite(ledPins[1], HIGH);
digitalWrite(ledPins[2], LOW);
digitalWrite(ledPins[3], LOW);
digitalWrite(ledPins[4], LOW);
digitalWrite(ledPins[5], HIGH);
digitalWrite(ledPins[6], HIGH);
digitalWrite(ledPins[7], LOW);
delay(100);
strobe();
}
else if (digitalRead(35) == LOW) {
digitalWrite(ledPins[0], LOW);
digitalWrite(ledPins[1], LOW);
digitalWrite(ledPins[2], LOW);
digitalWrite(ledPins[3], LOW);
digitalWrite(ledPins[4], HIGH);
digitalWrite(ledPins[5], LOW);
digitalWrite(ledPins[6], HIGH);
digitalWrite(ledPins[7], LOW);
delay(100);
strobe();
}
else
all_off();
}
void all_off() {
for (int i = 0; i < ledCounts; i++) {
digitalWrite(ledPins[i], LOW);
}
strobe_flag = false;
}
void strobe() {
if (strobe_flag)
return;
strobe_flag = true;
digitalWrite(22, LOW);
delay(100);
digitalWrite(22, HIGH);
}
左のタクトスイッチで0x46を送る ハンドオープン
右のタクトスイッチで0x0aを送る 改行コード
このプログラムですべてを準備して、
ストローブ信号を送る左タクトスイッチをポチッ。
・・・何も起こりません。
ここまでは一緒
続けて
右タクトスイッチをポチッ。
徐にモータが回りだしました。ハンドもゆっくりと開いていきます。
やりました!
ついに動きました。(この時思わず小躍りしてしまった。)
ハンドが開いていく様子
ゆっくりゆっくり開いていきます。
これで第一関門通過です。
また、更新します。