2012-05-03 7 views
6

Recentemente ho scoperto la bellezza del mouse ottico come un encoder di posizione incrementale.Mouse ottico come codificatore

Un mouse ottico contiene in genere un componente in cui una videocamera è collegata a un processore di immagini collegato a un'interfaccia USB. La risoluzione dipende dalla risoluzione della fotocamera. Su internet è facile ritrovare i datasheet di questo tipo di componenti che descrivono anche come leggere/scrivere con loro.

Il mio problema che prima devo risolvere è come assicurarsi che un mouse encoder non venga visto dal laptop/pc come dispositivo di puntamento senza disabilitare la porta USB a cui è collegato. Ho bisogno di usare 2 encoder in modo che significhi che 3 porte USB devono essere usate sul mio PC (con Windows XP), una per il mouse come dispositivo di puntamento e due per un mouse come encoder.

Una seconda domanda è come leggere/scrivere istruzioni/dati da/verso il mouse dell'encoder su una porta USB? Qualcuno potrebbe mandarmi un link ad un tutorial/esempio in C++?

Grazie mille in anticipo,

Stefan

+1

Questo non è affatto chiaro. Cosa stai cercando di ottenere? –

+0

Sembra che tu stia chiedendo di scrivere molto codice, non per una risposta a una domanda specifica. – Linuxios

+1

Se si trattasse di un mouse RS-232, sarebbe probabilmente facile da fare perché esiste un semplice protocollo che consente al sistema operativo di trovare un mouse su una porta seriale (configurare la porta per 1200 bit/secondo, 7 bit di dati, 1 bit di stop , nessuna parità, disattivare RTS e DTR, attendere 100 (?) ms, attivare RTS e DTR, il mouse invia indietro la lettera "M" e inizia il normale funzionamento). Giocando un po 'con il cablaggio potresti assicurarti che Windows non abbia la possibilità di scoprire il mouse quando si avvia. Quindi puoi programmare tu stesso la porta seriale e usare il mouse tutto per te. –

risposta

4

Il microcontrollore mouse USB è probabilmente fissi per inviare frame USB che si identifica come un dispositivo HID. In tal caso, ci sono poche speranze che riesci a impedire a Windows di usarlo come un mouse. Dopo tutto questo è un topo.

Se sei in fai-da-te, potresti provare a hackerare la scheda del mouse separando componenti/fili e controllando direttamente gli encoder con il tuo arduino. In questo modo, Arduino è in grado di leggere i dati dall'encoder e inviarli al PC utilizzando la propria porta seriale USB.

vedere un esempio c'è:

http://www.martijnthe.nl/2009/07/interfacing-an-optical-mouse-sensor-to-your-arduino/

Per maggiori informazioni sul dispositivo HID: http://en.wikipedia.org/wiki/USB_human_interface_device_class Estratto: "Ci sono due livelli di API relative alla USB HID: il livello di USB e il livello di sistema operativo A livello USB, c'è un protocollo per i dispositivi che annunciano le loro capacità e il sistema operativo per analizzare i dati che ottiene.Il sistema operativo offre quindi una vista di livello superiore alle applicazioni, che non devono includere il supporto per i singoli dispositivi ma per classi di dispositivi. Questo livello di astrazione consente a un gioco di funzionare con qualsiasi controller USB, per esempio r esempio, anche quelli creati dopo il gioco. "

+0

Quindi non è possibile consentire a un mouse di inviare i propri dati ma non utilizzare le informazioni in Windows come dati del mouse? In altre parole, non è possibile utilizzare un solo mouse come un mouse in Windows e connettersi di più? Non ho esperienza con plug and play, ma speravo che almeno qualcosa potesse essere configurato sul lato del sistema operativo. – noste99

+0

SE sapevi come riprogrammare il microcontrollore del mouse, POTREBBE farlo inviare i frame USB che si desidera. Ma programmare un arduino sembra un metodo più semplice. Il problema non è sul lato Windows. È che il mouse sta inviando telegrammi che dicono al sistema operativo: io sono un MOUSE. Questo è il motivo per cui è possibile collegare qualsiasi mouse USB e far sì che il sistema operativo lo suoni :) – fjardon

+1

Grazie mille. I collegamenti sono molto utili. Un arduino può essere una buona soluzione, ma ho difficoltà ad accettare l'idea che il mio pc/CPU per la maggior parte del tempo sia inattivo, ma poiché le cose diventano complesse, è necessario aggiungere un processore aggiuntivo. Proverò ciò che è indicato negli URL sopra elencati per raccogliere esperienza e continuare la ricerca. Grazie mille per l'aiuto. – noste99

2

Dai un'occhiata all'API Raw Input per vedere se riesci a cogliere gli eventi in quel modo e impedisci a Windows di agire su di essi.

+0

Grazie per il suggerimento. Questo è nuovo per me quindi ho bisogno di tempo per saperne di più. – noste99

+0

+1 Non lo sapevo. Sembra esattamente ciò che è necessario qui. – fjardon

+0

Deanma, senza aver studiato in dettaglio ciò che hai suggerito, è possibile scrivere su un dispositivo utilizzando l'API di input raw? Mi sembra giusto leggere i dati inviati e decidere se usarli o meno e elaborarli. Stefan – noste99