2つスイッチ&サーボ→5つスイッチ&サーボへ
Posted: 2014年7月10日(木) 21:10
初めて質問させて頂きます。
スイッチ2つでサーボを2つ駆動するコードは動作確認ができています。
それを改良して【5つのスイッチをそれぞれ対応させた5つのサーボを駆動】するコードを作りたいのですが、setup以降のloop内の条件分岐で困っております。
二つサーボ用のコードを載せさせて頂きます。ご教授お願いします。(抜本的にもっとシンプルなコードなどがあれば教えて頂ければと思います。)
よろしくお願い致します。
int out1 = 1; //サーボ1=1PIN
int out2 = 2; //サーボ2=2PIN
int out3 = 3; //サーボ3=3PIN 追加行
int out4 = 4; //サーボ4=4PIN 追加行
int out5 = 5; //サーボ5=5PIN 追加行
int in1 = 8; //サーボ1用スイッチ=8PIN
int in2 = 9; //サーボ2用スイッチ=9PIN
int in3 = 10; //サーボ3用スイッチ=10PIN 追加行
int in4 = 11; //サーボ4用スイッチ=11PIN 追加行
int in5 = 12; //サーボ5用スイッチ=12PIN 追加行
void setup(){
//パルス出力ピンの設定
pinMode(out1,OUTPUT);
pinMode(out2,OUTPUT);
pinMode(out3,OUTPUT);//追加行
pinMode(out4,OUTPUT);//追加行
pinMode(out5,OUTPUT);//追加行
// デジタル入力のプルアップ抵抗を有効にする
pinMode(in1, INPUT_PULLUP);
pinMode(in2, INPUT_PULLUP);
pinMode(in3, INPUT_PULLUP); //追加行
pinMode(in4, INPUT_PULLUP); //追加行
pinMode(in5, INPUT_PULLUP); //追加行
}
//以下 2つのサーボバージョンです
void loop(){
int val1;
int val2;
if (digitalRead(in1) == HIGH) {
val1 = 1750; //サーボ1のON位置設定
}
else {
val1 = 250; //サーボ1のOFF位置設定
}
if (digitalRead(in2) == HIGH) {
val2 = 1750; //サーボ2のON位置設定
}
else {
val2 = 250; //サーボ2のON位置設定
}
//パルス:HIGHを出力
digitalWrite(out1,HIGH);
digitalWrite(out2,HIGH);
if (val2 < val1) { //サーボ2の方が早い
delayMicroseconds(val2+500);
digitalWrite(out2,LOW); //サーボ2を先に出力
delayMicroseconds(val1-val2);
digitalWrite(out1,LOW); //サーボ1を後に出力
val2 = val1; //遅い方をセット
}
else {
delayMicroseconds(val1+500);
digitalWrite(out1,LOW); //サーボ1を先に出力
if (val1 < val2) { //サーボ1の方が早い(同時の場合は飛ばす)
delayMicroseconds(val2-val1);
}
digitalWrite(out2,LOW); //サーボ2を後に出力
}
//HIGHの継続時間を差引いて周期を20000usに調整
delayMicroseconds(10000-(val2+500));
delayMicroseconds(10000);
}
スイッチ2つでサーボを2つ駆動するコードは動作確認ができています。
それを改良して【5つのスイッチをそれぞれ対応させた5つのサーボを駆動】するコードを作りたいのですが、setup以降のloop内の条件分岐で困っております。
二つサーボ用のコードを載せさせて頂きます。ご教授お願いします。(抜本的にもっとシンプルなコードなどがあれば教えて頂ければと思います。)
よろしくお願い致します。
int out1 = 1; //サーボ1=1PIN
int out2 = 2; //サーボ2=2PIN
int out3 = 3; //サーボ3=3PIN 追加行
int out4 = 4; //サーボ4=4PIN 追加行
int out5 = 5; //サーボ5=5PIN 追加行
int in1 = 8; //サーボ1用スイッチ=8PIN
int in2 = 9; //サーボ2用スイッチ=9PIN
int in3 = 10; //サーボ3用スイッチ=10PIN 追加行
int in4 = 11; //サーボ4用スイッチ=11PIN 追加行
int in5 = 12; //サーボ5用スイッチ=12PIN 追加行
void setup(){
//パルス出力ピンの設定
pinMode(out1,OUTPUT);
pinMode(out2,OUTPUT);
pinMode(out3,OUTPUT);//追加行
pinMode(out4,OUTPUT);//追加行
pinMode(out5,OUTPUT);//追加行
// デジタル入力のプルアップ抵抗を有効にする
pinMode(in1, INPUT_PULLUP);
pinMode(in2, INPUT_PULLUP);
pinMode(in3, INPUT_PULLUP); //追加行
pinMode(in4, INPUT_PULLUP); //追加行
pinMode(in5, INPUT_PULLUP); //追加行
}
//以下 2つのサーボバージョンです
void loop(){
int val1;
int val2;
if (digitalRead(in1) == HIGH) {
val1 = 1750; //サーボ1のON位置設定
}
else {
val1 = 250; //サーボ1のOFF位置設定
}
if (digitalRead(in2) == HIGH) {
val2 = 1750; //サーボ2のON位置設定
}
else {
val2 = 250; //サーボ2のON位置設定
}
//パルス:HIGHを出力
digitalWrite(out1,HIGH);
digitalWrite(out2,HIGH);
if (val2 < val1) { //サーボ2の方が早い
delayMicroseconds(val2+500);
digitalWrite(out2,LOW); //サーボ2を先に出力
delayMicroseconds(val1-val2);
digitalWrite(out1,LOW); //サーボ1を後に出力
val2 = val1; //遅い方をセット
}
else {
delayMicroseconds(val1+500);
digitalWrite(out1,LOW); //サーボ1を先に出力
if (val1 < val2) { //サーボ1の方が早い(同時の場合は飛ばす)
delayMicroseconds(val2-val1);
}
digitalWrite(out2,LOW); //サーボ2を後に出力
}
//HIGHの継続時間を差引いて周期を20000usに調整
delayMicroseconds(10000-(val2+500));
delayMicroseconds(10000);
}