Arduino Leonardo いい

誰でも簡単にアレできると評判のArduinoですが、Leonardoになってキーボードとマウスのエミュレーション機能がついたので超簡単にこういうことができます。


自動nomolk

ペイントソフト側からは普通にマウス動かして絵を描いているように見えている。のでマウスでカーソル移動できてクリックで描画するソフトなら何でも使える。

この機能使えばなんとか専用コントローラみたいなやつ作り放題なので超いい感じですね。

f:id:slideglide:20130114010150j:plain

なんか描画中はLED光らせようとした形跡がブレッドボード上にもコード上にもあるんだけどGNDが繋がっていなくて光ってない、しかし製作途中の段階でそもそも光らせようとしていたこと自体忘れているので不具合に全く気づいていないまま動画をアップしている。

拙いコードですがご参考まで

void setup() {
  pinMode(12, INPUT_PULLUP);
  pinMode(10, OUTPUT);
  Mouse.begin();
  
}

void loop() {
  int bodyXArray[] = {1,1,1,1,1,1,0,1,0,1,1,1,1,1,0,1,0,0,0,0,0,0,-1,0,-1,0,0,1,1,0,0,-1,-1,-1,-1,-1,-1,0,0,0,0,1,0,1,1,-1,-1,-1,-1, 0,-1, 0,-1, 0,-1,-1,-1,0,0,0,-1, 0,-1,-1,-1,-1, 0, 0, 0, 0, 0, 1, 0,-1,-1,0,-1,-1,-1, 0, 0, 1, 1, 0, 1,-1,-1,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0,-1,-1,-1,-1,-1, 0, 0, 1, 1,1,1,1,1,1,1,0,1,0,1, 1,1, 1, 0, 0,-1, 0,-1, 0, 1};
  int bodyYArray[] = {0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1, 1,1,1,1,1,1,1, 1, 0,-1, 0, 0, 1,1,1,1,1,1,1,1,1, 1, 0, 0, 0,-1, 0,-1, 0,-1,-1, 0, 0,1,1,1, 1, 1, 0, 0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 1,1, 1,-1, 0,-1,-1,-1,-1,-1,-1, 1, 0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,1,1,1,1,1,1,1,0,-1,0,-1,-1,-1,-1,-1,-1,-1,-1};
  int face1XArray[] = { 1,1,1,-1,-1,-1,-1,-1,-1,0,-1,-1,-1,-1,-1,0,1,1,1,1,1,1,1,1,1,1,1,1, 1, 1, 1, 0, 0, 0,-1,-1,-1,-1};
  int face1YArray[] = {-1,0,1, 1, 0,-1, 0, 0, 0,1, 0, 1, 1, 1, 1,1,1,0,0,1,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1, 0, 0};
  int face2XArray[] = {0};
  int face2YArray[] = {1};
  int face3XArray[] = {-1,-1,-1};
  int face3YArray[] = { 0, 0, 1};
  int face4XArray[] = {-1, 0,1,0};
  int face4YArray[] = { 0,-1,0,1};

  int bodyToFace1[] = {2,11};
  int face1to2[] = {0,3};
  int face2to3[] = {-1,2};
  int face3to4[] = {0,-3};
  int d = 3;

  d = analogRead(0) / 150 + 3;
     
  if(!digitalRead(12)) {
    digitalWrite(10, HIGH);
    draw(bodyXArray, bodyYArray, sizeof(bodyXArray) / sizeof(bodyXArray[0]), d);
    move(bodyToFace1[0], bodyToFace1[1], d);
    draw(face1XArray, face1YArray, sizeof(face1XArray) / sizeof(face1XArray[0]),d);
    move(face1to2[0], face1to2[1], d);
    draw(face2XArray, face2YArray, sizeof(face2XArray) / sizeof(face2XArray[0]),d);
    move(face2to3[0], face2to3[1], d);
    draw(face3XArray, face3YArray, sizeof(face3XArray) / sizeof(face3XArray[0]),d);
    move(face3to4[0], face3to4[1], d);
    draw(face4XArray, face4YArray, sizeof(face4XArray) / sizeof(face4XArray[0]),d);
    move(-100, face3to4[1], d);
    delay(1000);
    digitalWrite(10, LOW);
  }
  
}

void draw(int arrayX[], int arrayY[], int s, int d) {
    Mouse.press();
    for(int i = 0; i < s ; i++){
      Mouse.move(arrayX[i] * d, arrayY[i] * d, 0);
      delay(30);
    }
    Mouse.release();
}

void move(int x, int y, int d){
  int step;
  if(x > 0){
    step = 1;
  } else {
    step = -1;
  }
  for(int i = 0; i < abs(x); i++){
    Mouse.move(d * step, 0, 0);
    delay(30);
  }
  
  if(y > 0){
    step = 1;
  } else {
    step = -1;
  }
  for(int i = 0; i < abs(y); i++){
    Mouse.move(0, d * step, 0);
    delay(30);
  }
}

あとパッケージが今まで見たおしゃれコンドーム以外の商品の中で一番おしゃれコンドームっぽい。

f:id:slideglide:20121121093531j:plain

Arduino Leonardo(+Headers)

Arduino Leonardo(+Headers)

オカモト ベネトン1000-X

オカモト ベネトン1000-X