スマホでロボットアームを動かす

 

 

スマホでロボットアームを動かす

 

続き

あれから色々とやってみました。

 

先ず、ロボットアームを再分解してパターンを追い直しましたが、問題なし。

プログラムも見直しましたが、問題が有る様には思えません。

そもそもパラレルポートとのやり取りに何か勘違いが有るかもと、「パラレルポート 通信方法」他、関係するであろうワードで検索の旅に出ましたが分からず仕舞いでした。

 

そんな中

を見ていてはッと気づいた事が有ります。

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を送る 改行コード

 

このプログラムですべてを準備して、

ストローブ信号を送る左タクトスイッチをポチッ。

・・・何も起こりません。

ここまでは一緒

続けて

右タクトスイッチをポチッ。

徐にモータが回りだしました。ハンドもゆっくりと開いていきます。

 

やりました!

 

ついに動きました。(この時思わず小躍りしてしまった。)

 

ハンドが開いていく様子


www.youtube.com

ゆっくりゆっくり開いていきます。

 

これで第一関門通過です。

 

次はBluetoothスマホとのやり取りです。

 

また、更新します。

 

mckeechan.hatenadiary.jp