[CONSIGLIO ACQUISTO E FATTIBILITA'] Mouse controllato da un'altro PC

Salve a tutti , e' il mio primo topic qui , mi presento , sono alessandro , studente di ingegneria ( gestionale , ma appassionato di elettronica e informatica ) .

E' gia da tempo che per hobby utilizzo i microcontrollori , ho iniziato coi PIC ( il mio primo progetto a scuola era una macchinina radiocomandata coi 16f84 e modulo RF , da PC via seriale , il tutto concepito , costruito e scritto da me ) Lavorare coi pic pero' e' macchinoso e scomodo , visto che ultimamente ho sempre meno tempo per i miei progetti ( studio e lavoro! ) mi serve una piattaforma piu' veloce e flessibile .

Arduino mi pare il top.

Passiamo al mio problema , devo controllare un mouse da pc , piu' o meno ci sono gia riuscito col PIC 16f628 pero' doveva essere una cosa performante ( il mouse si doveva muovere molto velocemente , non vi sto a spiegare l'uso che ne devo fare ) e invece sono sceso a compromessi

Ho smontato un vecchio mouse ps/2 e ho tolto lo switch del click , e i sensori IR e ho attaccato tutto alle uscite del PIC. il mouse funziona in quadratura di fase percio e' stato facile capire il funzionamento , pero' poi sono sorti problemi ,

il PIC non funziona in multithreading , percio' muovere sia asse X che Y comandando 4 uscite contemporaneamente e' difficile , col risultato che ho perso un mare di tempo in prove e simulazioni ed il cursore in questo modo si muove solo in linea retta ( io volevo anche poter scegliere se arrivare a destinazione in modo curvilineo ) . Il computer calcola anche l'accelerazione del mouse , percio' e' difficile prevedere su quale coordinata andra' a posizionarsi effettivamente il cursore del mouse alla fine .

La comunicazione tramite seriale e' lenta ,

io ho bisogno di spostamenti nell'ordine dei 25-50ms , con questo sistema invece edevo provvedere ad ogni spostamento , da pc a leggere le coordinate finali del mouse e correggere eventuali errori , arrivando nell'ordine dei 500ms.

Cercando su internet ho visto che esistono librerie per utilizzare l'arduino come mouse USB gia belle che pronte , anche per spostamenti su coordinate assolute e non relative , come ho trovato qui : https://github.com/arduino/Arduino/issues/1417

Vorrei investire quindi questi 20€ e vedere se effettivamente con arduino posso migliorare le performance del "mouse".

La domanda e': l'arduino piu' economico puo' svolgere questa cosa ? Se imposto l'arduino per funzionare come mouse USB , come faccio dopo ad inviare da computer le coordinate dove spostarsi ? ( e' una domanda un po' specifica ma volevo saperlo gia' da adesso per regolarmi )

grazie 1000 in anticipo a chi sapra' illuminarmi

Esistono 2 schede che puoi acquistare: la Leonardo oppure la Micro. http://arduino.cc/en/Main/ArduinoBoardLeonardo http://arduino.cc/en/Main/ArduinoBoardMicro

Entrambe sono basate sull'Atmega32U4, un chip molto simile all'Atmega328P usate sulle più note UNO ma con una aggiunta: ha in sé un controller USB integrato per cui al sistema può apparire come una periferica HID direttamente collegata. Grazie ad apposite librerie incluse nel core puoi farlo apparire sia come una tastiera che come un mouse.

http://arduino.cc/en/Reference/MouseKeyboard

Credo siano queste le board che fanno al caso tuo.

Il mouse è dispositivo di puntamento di USCITA (invia quote offset relative) il tablet (invia quote assolute) anche se anche il mouse può inviare quote assolute. Non si capisce però quello che intendi dire:

Se imposto l'arduino per funzionare come mouse USB , come faccio dopo ad inviare da computer le coordinate dove spostarsi ?

Essendo il mouse un dispositivo che [u]invia[/u] quote ( ad indirizzamento relativo) NON accetta quote in ingresso. Anche in altri punti non ti esprimi chiaramente.. forse se spiegherai quello che intendi fare sarebbe più facile darti la spinta più corretta.

nessun microcontrollore è multithreading ma stà nell'abilità del programmatore stendere un programma multitasking , ad esempio usando il modello di macchina a stati, per far svolgere 2-3-4... compiti che sembrano essere eseguiti contemporaneamente.

Comunque per leggere 2 encoder e inviare la quota (assoluta o relativa che sia) in usb o rs232 non srrve grossa potenza , qualsiasi avr lo può fare, non serve neppure usare gli interrupt esterni, basta il timer0 programmato come free running con un periodo basso, ad esempio 50usec e alla risposta all'iinterrupt sul timer0 fare il polling dei 2 encoder (2+2 bits) & compararli con i vecchi valori dei 2 encoder, se sono differenti si opera con le operazioni +1 / -1 sulla quota.