10

これがこの質問の正しい場所かどうかはわかりません。システムのジョイスティックから軸位置の値を取得しようとして/dev/input/js0います。実行jstest /dev/input/js0すると、すべてのボタンと軸の位置に関するライブ フィードバックが返されます。

この情報を C プログラムに入力して、サーボを制御しようとしています。これを行うための機能はありますか?私はプログラミングで入力デバイスをあまり扱ったことがないので、これは私にとってすべて新しいことです。

4

3 に答える 3

5

このpython コードを実行して、イベントを読み取ることができます。
高レベル モジュールpython-evdevを使用することもできます。

#!/usr/bin/env python

import struct

infile_path = "/dev/input/js0"
EVENT_SIZE = struct.calcsize("llHHI")
file = open(infile_path, "rb")
event = file.read(EVENT_SIZE)
while event:
    print(struct.unpack("llHHI", event))
    (tv_sec, tv_usec, type, code, value) = struct.unpack("llHHI", event)
    event = file.read(EVENT_SIZE)

出力例:

(73324490, 8454144, 55242, 1118, 25231360)
(73324490, 42008576, 55242, 1118, 58785792)
(73324490, 75563008, 55242, 1118, 92340224)
(73324490, 109117440, 55242, 1118, 125894656)
(73324490, 142671872, 55242, 1118, 159449088)
(73324490, 176226304, 55242, 1118, 193003520)
(73324490, 209780736, 55242, 1118, 226557952)
(73324490, 243335168, 55242, 1118, 8519680)
(73324490, 25296896, 55242, 1118, 42074112)
(73324490, 58884097, 55242, 1118, 75661313)
(73324490, 92405760, 55242, 1118, 109215745)
(73324490, 125992961, 55242, 1118, 142737408)
(73324490, 159514624, 55242, 1118, 176324609)
(73327790, 84041474, 58542, 1118, 84049919)
(73328030, 84044852, 58782, 1118, 84017152)
(73331790, 33749013, 62542, 1118, 33742256)
(73331790, 33736851, 62562, 1118, 33731108)
(73331830, 33723339, 62602, 1118, 33718273)
(73332090, 33723339, 62862, 1118, 33685504)
于 2016-09-17T07:04:46.840 に答える
3

このページ: http://scaryreasoner.wordpress.com/2008/02/22/programming-joysticks-with-linux/には、/dev/input/js0 から情報を読み取る方法に関する優れた記事があります。

ファイルから読み取ったイベントの形式は、https ://www.kernel.org/doc/Documentation/input/input.txt に記載されています。これは、タイムスタンプ、イベントの種類と識別子、および値を含む単純な構造体です。

struct input_event {
    struct timeval time;
    unsigned short type;
    unsigned short code;
    unsigned int value;
};
于 2013-04-15T00:58:46.207 に答える