昨晩一杯機嫌で開催した20周年記念行事のZoom会議
勢いがついて焼酎ボトルを引っ張り出したばっかりに
二日酔い orz
1日つぶれてしまった。
それでも夜中になってArduino勉強会ネタ、SG90雲台にプレステジョイスティックを追加してみた。
同時に動かすライブラリではないので、ぎこちない動きになるが、まあしょうがない。
/*
NANOは動きません。電力供給不足で落ちているようです
Servo 制御
GNDと5Vへ 茶色、赤ラインを接続
3・・・上下(黄)
9・・・左右(青)
バージョンアップしSONYジョイスティックで操作できるようにしてみた
SONYジョイスティックPin割り当て
黒:GRND
白:5V
灰:VRx → 橙 → A0
紫:VRy → 黄 → A1
青:SW → 青 → A2(DigitalRead)
※コントローラから手を離すと原点復帰するので、SW押すまで復帰しないように補正した
*/
#include "Servo.h"
Servo servo_rl;
Servo servo_ud;
void setup() {
servo_rl.attach(9);
servo_ud.attach(3);
pinMode(A0,INPUT);
pinMode(A1,INPUT);
pinMode(A2,INPUT);
Serial.begin(9600);
Serial.println("Sony JoyStick begin");
}
int x,y,sw;
void getJoystick(){
x = analogRead(A0);
y = analogRead(A1);
sw= analogRead(A2);
if (sw != 0) sw = 1;
}
void dspJyoData(){
Serial.print("Y:");
Serial.print(y);
Serial.print(" X:");
Serial.print(x);
Serial.print(" SW:");
Serial.println(sw);
}
int s1a,s2a; // サーボ1,2の角度
void loop() {
getJoystick();
dspJyoData();
if (sw == 1 ){ // ボタンが押されてない場合
int xydif,xdif,ydif; // 手を離した場合はxyとも500近くの値になっている
xdif = abs(x-500); ydif = abs(y-500); // 原点からどの程度離れているか計算させる
xydif=xdif + ydif;
if (xydif > 10){ //手を離したときは原点復帰するので、原点勝手復帰は何もしない
s1a = map(x, 0, 1023, 0,180);
s2a = map(y, 0, 1023, 0,180);
servo_rl.write(s1a);
servo_ud.write(s2a);
}
} else{ // 原点復帰:ちゅおうボタンを押下した時だけ
servo_rl.write(0);
servo_ud.write(0);
}
delay(300);
}