2013-04-15 11 views
6

Ich bin mir nicht sicher, ob dies der richtige Ort für diese Frage ist. Ich versuche, die Achsenpositionswerte von einem Joystick /dev/input/js0 auf meinem System zu erhalten. Wenn ich jstest /dev/input/js0 laufen lasse, gibt es mir Live-Feedback zu allen Tasten und Achsenpositionen. Ich versuche, diese Informationen in mein C-Programm einzugeben, um Servos zu steuern. Gibt es dafür eine Funktion? Ich habe nicht viel mit Eingabegeräten in der Programmierung gearbeitet, also ist das alles neu für mich. Jede Hilfe wird sehr geschätzt.Erhalten von Live-Informationen von/dev/input

Antwort

2

Diese Seite: http://scaryreasoner.wordpress.com/2008/02/22/programming-joysticks-with-linux/ hat eine nette Zuschreibung, wie die Informationen zu lesen, von/dev/input/js0

Das Format der Ereignisse, die Sie aus der Datei lesen hier dokumentiert ist: https://www.kernel.org/doc/Documentation/input/input.txt. Es ist eine einfache Struktur einen Zeitstempel, den Ereignistyp und Kennung und den Wert enthält:

struct input_event { 
    struct timeval time; 
    unsigned short type; 
    unsigned short code; 
    unsigned int value; 
}; 
2

Sie können diese python code laufen Ereignisse zu lesen.
Sie können auch ein High-Level-Modul python-evdev verwenden.

#!/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) 

Beispielausgabe:

(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)