電子工作

arduinoでファミコンコントローラ型マウス (ArduinoMouse)

  • 閲覧数: 7834
  • 12

作品画像

  • C.120x80.220dce020cb7fb288a0d33712ba8c483
  • C.120x80.1024813eaef0105ed35d27d4fd318b92
  • C.120x80.a36370aa99c6190cda9bd0db7d2c8701
  • C.120x80.5a2b41dc1aadf346a8e634da9c359544
  • C.120x80.4e1adf2a0a34628b8aa83553db2f55ea

作品説明

Arduino leonardoでマウスやキーボードを操作できるとのことでしたのでファミコンのゲームパッドでマウスを作りました。

以下操作方法
Aボタン: 左クリック
Bボタン: Bダッシュ
Xボタン: マウスホイールをカチカチするやつ
Yボタン: 右クリック
十字キー: マウスの操作
L・Rボタン: スクロール
STARTボタン: マウスポインタのコントロールを開始(PCに接続してもここを押さないとポインタが動かない)
SELECTボタン: マウスポインタのコントロールを終了
START + ↓・↑: マウスの移動速度の増減

どのOSでも動きます。
ゆったりネットサーフィンとかしたい時とかゲームしてる感出したい時に使える。
操作は慣れる必要があるかも

レシピ

使うもの
・arduino leonardo
・ファミコンの海外製コントローラ(中古で300円くらいで買いました。)

これだけ。

arduinoにライブラリがあったのでこれを使ってコントローラからコマンドを受け取る
http://code.google.com/p/nespad/

コントローラーには純正と海外製で線の色が変わっているので結構注意が必要です。

プラグラムは
https://gist.github.com/4363732

#include <SNESpad.h>
 
#define STROBE 1
#define CLOCK 3
#define DATA 5
 
SNESpad pad = SNESpad(STROBE,CLOCK,DATA);
int wheel;
int defaultSpeed;
int changeSpeed = 0;
boolean isbegin = false;
 
void setup();
void loop();
 
void setup()
{
Serial.begin(115200);
}
void loop()
{
defaultSpeed = 2;
wheel = 1;
int input;
// SNES_B, SNES_Y, SNES_A, SNES_X
// SNES_UP, SNES_DOWN, SNES_LEFT, SNES_RIGHT
// SNES_SELECT, SNES_START, SNES_L, SNES_R
input = pad.buttons();
if(input & SNES_SELECT){
// mouse emulate end
Mouse.end();
isbegin = false;
}else if(input & SNES_START){
// mouse emulate start
Mouse.begin();
isbegin = true;
}
if(input == (SNES_START + SNES_UP)){
changeSpeed++;
delay(100);
}else if(input == (SNES_START + SNES_DOWN)){
changeSpeed--;
if(changeSpeed < 0){
changeSpeed = 0;
}
delay(100);
}
if(isbegin){
// button release if press button
if((Mouse.isPressed() || Mouse.isPressed(MOUSE_RIGHT) ||
                Mouse.isPressed(MOUSE_MIDDLE)) && input == 0){
if(Mouse.isPressed()){
Mouse.release();
}else if(Mouse.isPressed(MOUSE_RIGHT)){
Mouse.release(MOUSE_RIGHT);
}else if(Mouse.isPressed(MOUSE_MIDDLE)){
Mouse.release(MOUSE_MIDDLE);
}
}
// command A, B, X, Y
if(input & SNES_A){
Mouse.press();
input -= SNES_A;
}else if(input & SNES_B){
// speed up
defaultSpeed = changeSpeed + 4;
wheel = 3;
input -= SNES_B;
}else if(input & SNES_X){
Mouse.press(MOUSE_MIDDLE);
input -= SNES_X;
}else if(input & SNES_Y){
// default MOUSE_LEFT
Mouse.press(MOUSE_RIGHT);
input -= SNES_Y;
}
// move cursor
int mouseSpeed = defaultSpeed + changeSpeed;
if(input == (SNES_UP + SNES_LEFT)){
Mouse.move(-mouseSpeed, -mouseSpeed, 0);
}else if(input == (SNES_LEFT + SNES_DOWN)){
Mouse.move(-mouseSpeed, mouseSpeed, 0);
}else if(input == (SNES_DOWN + SNES_RIGHT)){
Mouse.move(mouseSpeed, mouseSpeed, 0);
}else if(input == (SNES_RIGHT + SNES_UP)){
Mouse.move(mouseSpeed, -mouseSpeed, 0);
}else{
if(input & SNES_UP){
Mouse.move(0, -mouseSpeed, 0);
}else if(input & SNES_LEFT){
Mouse.move(-mouseSpeed, 0, 0);
}else if(input & SNES_DOWN){
Mouse.move(0, mouseSpeed, 0);
}else if(input & SNES_RIGHT){
Mouse.move(mouseSpeed, 0, 0);
}
}
// scroll page
if(input & SNES_L){
Mouse.move(0, 0, wheel);
}else if(input & SNES_R){
Mouse.move(0,0, -(wheel));
}
}
delay(10);
}


コメント (1件)

マリオペイントのマウスのマウスとかスーパースコープのマウスが作れそう

2013/08/05 18:00