RCサーボで動かすモグラたたきゲームの7台版をRaspberry Pi Pico を使って製作中です。

Seeeduino XIAO で3台版のプロトタイプは作っているので,コントロールするサーボを増やし,プログラムをPico用に少し変更しただけです(^^;;;;;。



せっかくPin数の多いPicoを使っているので,できるだけ部品点数を少なくしようと直結しました。さすがに7台をつなぐと配線が混雑します(^^)。




動作確認はOKでしたので,一安心です。
今の状態でもI2CやUARTのPinなどは十分確保できているので,表示やケースの制作にかかれますね(^^)。



arduino/picoでは特にサーボに指定Pinはなく,最大8台まではコントロールできます。ただデフォオルトでは動作角度が小さいのでArduino標準値に設定して使っています。

3台版からPicoの7台版用に変更したサーボ関係の設定部分です。
もっとスマートな書き方があるのでしょうが,,ベタに設定してcase文で呼び出しています。


/* Pico mogura test1
Servo Pin 6,7,8,9,10,11,12; LED Pin 13
Hit switch Pin 14,15,16,17,18,19,20
Start Pin 21; Sound Pin 22
*/

#include <Servo.h>

#define servo_Max 7

Servo myservo0;
Servo myservo1;
Servo myservo2;
Servo myservo3;
Servo myservo4;
Servo myservo5;
Servo myservo6;

const int L_Pos=65; // default servo position
const int M_Pos=95;
const int H_Pos=125;

void set_allservo(int ang){
for (int i=0; i < servo_Max; i++){
set_1servo(i, ang);
}
}

void set_1servo(int svn, int ang){
switch (svn) {
case 0:
myservo0.write(ang);
break;
case 1:
myservo1.write(ang);
break;
case 2:
myservo2.write(ang);
break;
case 3:
myservo3.write(ang);
break;
case 4:
myservo4.write(ang);
break;
case 5:
myservo5.write(ang);
break;
case 6:
myservo6.write(ang);
}
}

const int game_loop=30; // Init. game_basic_val
int hit_Max=0;

#define sePin 22


void setup() {

myservo0.attach(6,544,2400); // Servo Pin 6,7,8,9,10,11,12
myservo1.attach(7,544,2400);
myservo2.attach(8,544,2400);
myservo3.attach(9,544,2400);
myservo4.attach(10,544,2400);
myservo5.attach(11,544,2400);
myservo6.attach(12,544,2400);
set_allservo(L_Pos);

for (byte i=14; i<21; i++){ //hit_switch: Pin 14,15,16,17,18,19,20
pinMode(i, INPUT);
}

pinMode(13, OUTPUT); // LED: Pin13
digitalWrite(13, LOW);

pinMode(21, INPUT); // start_button: Pin 21

Serial.begin(9600); // Use UART

}




arduino/picoのサーボライブラリではPIO(Programmable I/O)を使っているので8台までという制限がありますが,動かしてみるとサーボはカチャつきなどなくスムースに動作しますね。

また3台版と同様にフェイク動作を入れています。7台になるとさすがに騙されやすくなります。

ゲームのプログラムはスピードや音の変化など,いろいろと考えられて楽しいのでぼちぼちとやっていきましょう(^^)。