absolute Mausbewegung

OP #5220473
Lesenswert?

Ich nutze bisher wenn ich eine Maussteuerung per Arduino mache immer die 
relative Mausbewegung. Das ist aber zum Teil echt stressig, weil dann 
die Bewegung je nach Geschwindigkeit ect wieder völlig unterschiedlich 
groß ist.

Weiß jemand wie eine absolute Mausbewegung möglich ist? Habe es im 
Internet ein paar mal gefunden, aber ist immer schon einige Jahre alt.
Hat jemand von euch zufällig die veränderte HID Datei für eine 
aktuellere Version?
(Firma: matzetronics) #5220577
Lesenswert?

Erklär mal bitte, wie der Arduino da reinkommt. Soll der Arduino eine 
Maus nachbilden oder schliesst du an den eine Maus an?

Ein absolutes Pointer Device mit USB braucht keinerlei geänderte HID 
Datei, sondern einen entsprechenden USB Descriptor - am Host ändert sich 
nix, sofern überhaupt Pointer Devices erlaubt sind.
Wenn du einen solchen Descriptor brauchst, kann ich dir einen von meinem 
USB Tablet Projekt raussuchen. Aber erstmal musst du mitteilen, was da 
nun wo angeschlossen werden soll.
Gast #5220596
Lesenswert?

Absolute Mausbewegung? - Schwer vorstellbar, was ist denn, wenn
man die Maus anhebt und woanders hinsetzt???

Aus deinen weiteren Bemerkungen schließe ich, dass dich die
Maus-Optimierungen stören. Die sind aber für die normale Bedienung
eher vorteilhaft - oder willst du die Maus dreimal (mit abheben)
über das Mouse-Pad schieben, um von einem Bildschirmrand zum anderen
zu kommen?

Für exakte Eingaben (z.B. CAD) gab es mal Grafik-Tablets.

Heute, bei Wisch-und-Spreiz-und-Hoppla-wollte-ich-nicht,
scheint da kein Bedarf mehr zu sein.
Gast #5220612
Lesenswert?

Ziemlich sicher, er meint den (USB)-Arduino als HID (Maus) am Rechner 
anschließen und will dann starr relative Bewegungen einfach absolute 
Koordinaten an den Rechner geben.

Also Grafiktablet/Touchpad mit abs. Koordinaten statt Maus wo es nur 
relativ gibt.
Gast #5220670
Lesenswert?

Das Problem ist, dass ich zB zu einer bestimmten Pixelkoordinate fahren 
will die auch bekannt ist
Nun muss ich mit der relativen Bewegung eine Zahl auswählen bei der ich 
denke sie könnte Ca richtig sein, dann teste ich schaue wo die Maus 
wirklich rauskommt und verändere die relative Bewegung. Mit unter 10 
Versuchen kommt man dementsprechend niemals auf die richtige Koordinate. 
Hat man nun ein Programm, dass viele dieser Bewegungen benötigt, so wird 
das schon sehr langwierig und sobald man natürlich die 
Bewegungsgeschwindigkeit ändert oder aufs nächste Gerät wechselt kann 
man absolut alle Bewegungen nochmals neu erstellen
Das würde durch eine absolute Mausbewegung schon sehr stark vereinfacht
Gast #5220742
Lesenswert?

Jacko schrieb:
> Absolute Mausbewegung? - Schwer vorstellbar, was ist denn, wenn
> man die Maus anhebt und woanders hinsetzt???
> Aus deinen weiteren Bemerkungen schließe ich, dass dich die
> Maus-Optimierungen stören. Die sind aber für die normale Bedienung eher
> vorteilhaft - oder willst du die Maus dreimal (mit abheben) über das
> Mouse-Pad schieben, um von einem Bildschirmrand zum anderen zu kommen?
> Für exakte Eingaben (z.B. CAD) gab es mal Grafik-Tablets.
> Heute, bei Wisch-und-Spreiz-und-Hoppla-wollte-ich-nicht, scheint da kein
> Bedarf mehr zu sein.

Ich komme mit meinem Zeiger über zwei Bildschirme ohne 
Beschleunigungsquatsch und ohne anheben zu müssen; dabei kann ich selbst 
die kleinen GUI Elemente noch zuverlässig treffen. Ich glaube ihr macht 
was falsch.
(Firma: matzetronics) #5220744
Lesenswert?

Hmm, also wie versprochen poste ich mal den USB Descriptors meines 
Tablet Adapters, der absolute Koordinaten an den Host liefert.
Das ist ein V-USB Projekt gewesen, sollte aber trotzdem verständlich 
sein:
1
/* ----------------------------- USB interface ----------------------------- */
2
/* declare a digitzer device generated with HID Descriptor tool */
3
/* 4 buttons (reports only 3 for compatibility), absolute pointer , normally generates X/Y valus of max. 15 bits    
4
 * this represents an absolute pointer device with a resolution of 0.1 mm (2972 dots on a 29,7 cm tablet)
5
 * to the OS . 
6
*/
7
PROGMEM char usbHidReportDescriptor[60] = {
8
    0x05, 0x01,                    // USAGE_PAGE (Generic Desktop)
9
    0x09, 0x02,                    // USAGE (Mouse)
10
    0xa1, 0x01,                    // COLLECTION (Application)
11
    0x09, 0x01,                    //   USAGE (Pointer)
12
    0xa1, 0x00,                    //   COLLECTION (Physical)
13
    0x05, 0x09,                    //     USAGE_PAGE (Button)
14
    0x19, 0x01,                    //     USAGE_MINIMUM (Button 1)
15
    0x29, 0x03,                    //     USAGE_MAXIMUM (Button 3)
16
    0x15, 0x00,                    //     LOGICAL_MINIMUM (0)
17
    0x25, 0x01,                    //     LOGICAL_MAXIMUM (1)
18
    0x95, 0x03,                    //     REPORT_COUNT (3)
19
    0x75, 0x01,                    //     REPORT_SIZE (1)
20
    0x81, 0x02,                    //     INPUT (Data,Var,Abs)
21
    0x95, 0x01,                    //     REPORT_COUNT (1)
22
    0x75, 0x05,                    //     REPORT_SIZE (5)
23
    0x81, 0x03,                    //     INPUT (Cnst,Var,Abs)
24
    0x05, 0x01,                    //     USAGE_PAGE (Generic Desktop)
25
    0x09, 0x30,                    //     USAGE (X)
26
    0x09, 0x31,                    //     USAGE (Y)
27
    0x35, 0x00,                    //     PHYSICAL_MINIMUM (0)
28
    0x46, 0x9d, 0x0b,              //     PHYSICAL_MAXIMUM (2973)
29
    0x15, 0x00,                    //     LOGICAL_MINIMUM (0)
30
    0x26, 0x9d, 0x0b,              //     LOGICAL_MAXIMUM (2973)
31
    0x65, 0x11,                    //     UNIT (SI Lin:Distance)
32
    0x55, 0x0e,                    //     UNIT_EXPONENT (-2)
33
    0x75, 0x10,                    //     REPORT_SIZE (16)
34
    0x95, 0x02,                    //     REPORT_COUNT (2)
35
    0x81, 0x02,                    //     INPUT (Data,Var,Abs)
36
    0xc0,                          //   END_COLLECTION
37
    0xc0                           // END_COLLECTION
38
};
Wie man sieht, ist das ein 12" Tablett mit 2974 * 2974 Pixeln für X und 
Y.

Ansonsten meldet sich das Dings als normales Pointer Device unter Linux, 
Windows und Mac OS am Rechner. Ein HID File oder so habe ich nie ändern 
müssen.
Gast #5220754
Lesenswert?

Von einer Maus können prinzipbedingt keine absoluten Koordinaten kommen.
Die Bewegung der Maus bringt lediglich Increment-Schritte in die 
Bewegungsrichtung. Wenn du die Maus anhebst und 10cm weiter wieder 
absetzt, kommt keine andere Position. Nur die Bewegung auf der 
Tischplatte verändert die Position des Mauszeigers.
Absolute Koordinaten hast du z.B. bei einem Grafiktablett. Dort wird die 
Stelle, wo du den Stift auf das Tablett setzt, als Koordinaten 
übermittelt. Und dort funktioniert das auch, daß du den Stift links 
unten vom Tablett abhebst und rechts oben wieder auf das Tablett setzt. 
Dann wird der Mauscursor auch rechts oben auftauchen. Eben weil hier 
absolute Koordinaten übertragen werden. Und zwar nicht vom Stift, 
sondern vom Tablett.
Die kann aber eine normale Maus nie liefern. Weil sie keinerlei 
absoluten Bezug zur Tischplatte hat.
Gast #5220767
Lesenswert?

npn schrieb:
> Von einer Maus können prinzipbedingt keine absoluten Koordinaten kommen.

Das ist ja im Grunde nicht die Frage. Die Frage ist eher ob der 
HID-Treiber das unterstüzt. Ich vermute, dass er das tut weil es auch 
Zeigergeräte mit absoluter Postitionierung gibt (Resistive Touchscreens 
die via USB angebunden wurden z.B. in alten Kassensystemen).Und die sind 
vmtl. auch in der HID-Klasse abgedeckt. Es ist also eine Frage der 
HID-Implementierung auf dem Arduino.
(Firma: matzetronics) #5220782
Lesenswert?

Lars schrieb:
> Die Frage ist eher ob der
> HID-Treiber das unterstüzt.

Tut er, wie oben beschrieben. Mein Tablet läuft an den genannten OS ohne 
irgendwelche Zusatztreiber. Bei Mac OS 9 und X ist es schwer 
rauszufinden, aber unter Windows wird der normale generische Maustreiber 
benutzt. Auch der ulkige Gnome Desktop unter Debian schluckt das Tablett 
ohne Murren.

npn schrieb:
> Die kann aber eine normale Maus nie liefern. Weil sie keinerlei
> absoluten Bezug zur Tischplatte hat.

Darum gehts auch nicht. Der TE möchte eine Maus nachbilden, nur eben mit 
absoluten Koordinaten.
Gast #5220841
Lesenswert?

Matthias S. schrieb:
> Der TE möchte eine Maus nachbilden, nur eben mit
> absoluten Koordinaten.

Das geht eben nicht - man kann mit einem Tablett eine Maus emulieren, 
aber nicht umgekehrt. Eine Maus erfasst Bewegungen relativ zum letzten 
Position. Aus relativen Koordinaten kann man keine absoluten errechnen. 
Wenn ich die Maus in die obere linke Ecke des Mauspads setze, woher soll 
das arme Mäuschen wissen, dass es links oben ist? Und dann noch ohne 
Mauspad??

Deswegen gibt es auch immer noch Tabletts in jeder Grösse.

Georg
#5220854
Lesenswert?

georg schrieb:
> Matthias S. schrieb:
>> Der TE möchte eine Maus nachbilden, nur eben mit
>> absoluten Koordinaten.
>
> Das geht eben nicht - man kann mit einem Tablett eine Maus emulieren,
> aber nicht umgekehrt.

Mit "Maus" ist hier ganz offensichtlich einfach allgemein ein Zeigegerät 
gemeint. Die gibt es relativ oder absolut. Wie das mechanisch ausgeführt 
ist, spielt für den USB und den Rechner überhaupt keine Rolle. Der muss 
nur wissen, ob er relative oder absolute Koordinaten bekommt.
Der TE hat auch überhaupt keine echte Maus, sondern einfach ein Gerät, 
das als Zeigegerät fungiert und Koordinaten für den Mauszeiger sendet. 
Momentan sind das relative Koordinaten, aber die sind für seinen 
Anwendungsfall ungeeignet, weshalb er lieber absolute Koordinaten senden 
will.
Dazu muss man sich nicht auf den Begriff "Maus" versteifen.

>> Heute, bei Wisch-und-Spreiz-und-Hoppla-wollte-ich-nicht, scheint da kein
>> Bedarf mehr zu sein.
>
> Ich komme mit meinem Zeiger über zwei Bildschirme ohne
> Beschleunigungsquatsch und ohne anheben zu müssen; dabei kann ich selbst
> die kleinen GUI Elemente noch zuverlässig treffen. Ich glaube ihr macht
> was falsch.

Seh ich auch so. Diese Mausbeschleunigung ist was furchtbares. Ich weiß 
nicht, wie man präzise steuern soll, wenn der Faktor zwischen Bewegung 
der Maus und der des Mauszeigers dauernd variiert, abhängig davon, wie 
schnell man die Maus bewegt.
Bewege ich die Maus zu langsam, muss ich Meter zurücklegen, um an mein 
Ziel zu kommen, bewege ich sie zu schnell, klebt der Mauszeiger sofort 
am Bildrand. Ist natürlich etwas überspitzt formuliert, aber so ungefähr 
fühlt sich "Mausbeschleunigung" für mich an.
Gast #5220870
Lesenswert?

Rolf M. schrieb:
> Bewege ich die Maus zu langsam, muss ich Meter zurücklegen, um an mein
> Ziel zu kommen, bewege ich sie zu schnell, klebt der Mauszeiger sofort
> am Bildrand. Ist natürlich etwas überspitzt formuliert, aber so ungefähr
> fühlt sich "Mausbeschleunigung" für mich an.

Du weißt aber schon, daß man den Beschleunigungsfaktor einstellen kann, 
oder? Für mich funktioniert es einwandfrei. Ich hab die Geschwindigkeit 
etwa in der Mitte stehen und das Häkchen bei "Zeigerbeschleunigung 
verbessern". Mir ist es noch nie vorgekommen, dass ich an den 
Bildschirmrand geknallt bin.
#5220903
Lesenswert?

npn schrieb:
> Rolf M. schrieb:
>> Bewege ich die Maus zu langsam, muss ich Meter zurücklegen, um an mein
>> Ziel zu kommen, bewege ich sie zu schnell, klebt der Mauszeiger sofort
>> am Bildrand. Ist natürlich etwas überspitzt formuliert, aber so ungefähr
>> fühlt sich "Mausbeschleunigung" für mich an.
>
> Du weißt aber schon, daß man den Beschleunigungsfaktor einstellen kann,
> oder?

Ja. Trotzdem ist die Proportionalität zwischen dem Weg, den die Maus 
zurücklegt und dem Weg, den der Mauszeiger zurücklegt, für mich 
essenziell. Alles andere finde ich extrem irritierend.

> Für mich funktioniert es einwandfrei. Ich hab die Geschwindigkeit
> etwa in der Mitte stehen und das Häkchen bei "Zeigerbeschleunigung
> verbessern". Mir ist es noch nie vorgekommen, dass ich an den
> Bildschirmrand geknallt bin.

Ja, wie gesagt, das war die überspitzte Variante. Bei eingeschalteter 
Mausbeschleunigung sieht das bei mir etwa so aus: Wenn ich zu einem vom 
Mauszeiger recht weit entfernten Ziel will, bewege ich die Maus schnell 
dorthin. Dabei schieße ich dann über das Ziel hinaus, zu dem ich 
eigentlich wollte, weil sich der Mauszeiger zu schnell bewegt. Dann 
bewege ich die Maus zum Zielen langsamer zurück und muss dann aber einen 
gefühlt ewig weiten Weg zurücklegen, um endlich am Ziel anzukommen. 
Wesentlich weiter jedenfalls als ich basierend auf der letzten 
Mausbewegung erwarten würde.
Die Mausbeschleunigung stört einfach meine Hand-Auge-Koordination.
#5221030
Lesenswert?

Wie schon gesagt, die Dynamik macht der Treiber in Deinem OS. Wenn das 
OS keine Einstellung zuläßt, dann nimm ein anderes OS.

Rolf M. schrieb:
> Die Mausbeschleunigung stört einfach meine Hand-Auge-Koordination.

Das scheint nur so, der Mensch gewöhnt sich schnell an etwas. Ist wie 
beim Autofahren lernen, da lenkt man zuerst auch ganz unbeholfen und 
landet auf der Gegenspur oder dem Fußweg.

Bei meinem W10-Notebook mit Touchpad ohne Maustasten habe ich auch erst 
geflucht und ständig öffneten sich Programme ungewollt. Mit der Zeit 
geht das Tippen aber schon ganz gut.
#5221051
Lesenswert?

Peter D. schrieb:
> Wie schon gesagt, die Dynamik macht der Treiber in Deinem OS. Wenn das
> OS keine Einstellung zuläßt, dann nimm ein anderes OS.

In meinem OS ist so ein Mist gar nicht erst per Default eingestellt.

Peter D. schrieb:
> Rolf M. schrieb:
>> Die Mausbeschleunigung stört einfach meine Hand-Auge-Koordination.
>
> Das scheint nur so, der Mensch gewöhnt sich schnell an etwas. Ist wie
> beim Autofahren lernen, da lenkt man zuerst auch ganz unbeholfen und
> landet auf der Gegenspur oder dem Fußweg.

Ich glaube, da hätte ich ähnliche Probleme, wenn die Lenkübersetzung 
sich ändern würde, abhängig davon, wie schnell man das Lenkrad dreht.

> Bei meinem W10-Notebook mit Touchpad ohne Maustasten habe ich auch erst
> geflucht und ständig öffneten sich Programme ungewollt. Mit der Zeit
> geht das Tippen aber schon ganz gut.

Sowas kaufe ich erst gar nicht. Ich bevorzuge Dinge, die so sind, wie 
ich sie brauche oder sich entsprechend anpassen lassen und nicht welche, 
an die man sich nicht erst gewöhnen muss und die "mit der Zeit schon 
ganz gut" gehen, weil jemand meinte, das sei so schicker oder billiger 
oder so.
Ich kenne mehrere Leute, die inzwischen bei ihrem Laptop immer eine Maus 
mitnehmen, weil die Touchpads nicht mehr zu gebrauchen sind.
#5221102
Lesenswert?

npn schrieb:
> Es gibt tatsächlich Autos, da wird der Lenkausschlag
> bei größeren Geschwindigkeiten reduziert...

Ja, bei größeren Fahrzeuggeschwindigkeiten, aber nicht abhängig davon, 
wie schnell man das Lenkrad dreht.
Wobei man da auch aufpassen muss. Wenn das nachher nicht zwischen 
zwei/drei Varianten umschaltbar ist, wird's bestimmt einige Leute geben, 
für die sich die Lenkung komisch anfühlt und die das Auto deshalb dann 
gar nicht kaufen.
(Firma: matzetronics) #5221143
Lesenswert?

Lutz H. schrieb:
> Was für eine geheimnisvolle Abkürzung.

Steht wohl für 'Virtuelles USB', da es ja keinerlei besondere USB 
Technik benutzt.

Lutz H. schrieb:
> Ich würde gern etwas genaueres über das Projekt lesen.

Über welches Projekt? Falls du meinen Tabletkonverter meínst, der ein 
altes Tektronix Qualitätstablet auf USB umschnurzelt, das findest du 
hier:
http://www.schoeldgen.de/avr/
Roll ein wenig runter auf 'USB Interface for Tektronix 4957 tablet using 
V-USB'
Gast #5221298
Lesenswert?

V-USB hieß früher mal anders, Obdev musste den Namen aber ändern weil 
der schon beansprucht wurde. Ich glaub es hier mal avr-usb und das 
wollte Atmel für sich selbst benutzen? Ist ja auch egal, nur so ist der 
Name V-USB zustande gekommen.

Arduino scheint einen absoluten Modus für ihre HID-Bibliothek zu können:
https://forum.arduino.cc/index.php?topic=94140.0

Da ist zumindest eine beschreibung wie man es erreichen kann. Ob die 
noch geht hab ich nicht probiert.
OP #5221758
Lesenswert?

Habe gerade nochmal etwas Zeit gehabt und mal einige Library's getestet 
und bin fündig geworden:


https://github.com/NicoHood/HID

Heißt HID-Project.h und funktioniert einwandfrei sowohl für absolute, 
als auch relative Bewegungen.
Obere Linke Ecke ist immer Koordinate 0/0 und unten rechts 32767/32767
dh wenn man es dann wirklich auf genaue Pixel haben möchte muss man halt 
einfach noch einmal mappen :)

Die Library hat auch ansonsten noch einige HID Befehle, die es 
standardmäßig bei Arduino nicht gibt

Danke für eure Hilfe

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren