2017年1月22日日曜日

RaspberryPi で USB マウスの動きを取得する方法

概要

RaspberryPi でマウスを使う場合普通は GUI を使って操作する場合だと思います
今回は CUI 環境でマウスの動きを取得したかったのでやってみました

環境

  • RaspberryPi 8.0 Jessie (kernel Linux raspberrypi 4.1.7+ #817)
  • gcc 4.9.2
  • マウス (Fujitsu ボールマウス, アキバのジャンク屋で購入)

ソースコード

Linux Input Subsystem という仕組みを使って実現しています
なので OS を持っている RaspberryPi などのシングルボードコンピュータであれば、そのまま併用できると思います

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <linux/input.h>

int count = 0;

main() {
  int mouse_fd = open("/dev/input/event0", O_RDONLY);
  if (mouse_fd < 0) {
    fprintf(stderr,"can't open mouse device\n");
    exit(0);
  }

  struct input_event mouse;
  for(;;){
    int bytes = read(mouse_fd, &mouse, sizeof(struct input_event));
    if(bytes >= 0){
      if(mouse.type == EV_REL){
        if(mouse.code == REL_WHEEL){
          if (mouse.value > 0) {
            count++;
          } else {
            count--;
          }
        }
        printf("%d\n",count);
      }
    }
  }
}

実行および動作確認

  • gcc test.c -o test
  • ./test

で実行してホイールを動かしてみましょう
方向によって値が上下すると思います
実行するときに USB マウスが RaspberryPi に接続されていないとエラーとなり終了します

値を監視したい場合は pthread などを使って別スレッドで監視するようにしましょう

参考サイト

0 件のコメント:

コメントを投稿