Salve a tutti,
vorrei sapere se è possibile simulare una tastiera tramite software.
Mi spiego meglio:
Vorrei mettere un PC nel camper ma a causa della mancanza di spazio non avrei dove mettere la tastiera. Vorrei quindi sapere se è possibile utilizzare Arduino per comandare i tasti tramite schermo: ho già sviluppato un semplice software che mostra a schermo una tastiera (con tutti i tasti) e quindi vorrei che quando con il mouse clicco su uno di questi pulsanti Arduino mandi il segnale e quindi digiti il carattere selezionato.
Ho letto che per far ciò si consiglia l'acquisto di un Arduino Leonardo perché di default ha la "capacità" di simulare una tastiera mediante l'ingresso usb.
Avete qualche consiglio da darmi oltre, naturalmente, a dirmi se sia possibile far tutto ciò?
Per ogni tasto dovresti creare una tabella delle coordinate e con una tolleranza stabilire quale tasto corrisponde.
Diciamo che è un array che stabilisci quanti sono i tasti e per ogni tasto hai 4 valori tipo
#define tolleranza 30
const in tasto[0] = {x[0]-tolleranza, x[0]+tolleranza, y[0]-tolleranza, y[0]+tolleranza};
const in tasto[1] = {x[1]-tolleranza, x[1]+tolleranza, y[1]-tolleranza, y[1]+tolleranza};
//..........
const in tasto[n] = {x[n]-tolleranza, x[n]+tolleranza, y[n]-tolleranza, y[n]+tolleranza};
x,y = read_coord(); // relativa routine che ti riporta le coordinate del touchscreen
byte i = 0
for (; i < NUMKEYS; i++) {
if ((x > tasto[i][1]) && (x < tasto[i][0]) && (y > tasto[i][3]) && (y < tasto[i][2])) {
Serial.print("trovato il tasto = ");
Serial.println(i, DEC);
}
}
if (i == NUMKEYS) Serial.println("nessun tasto percepito");
Scusa ma che sistema operativo usi nel PC? Di default windows ha già la tastiera su schermo..ancora da win 95 su start, accessori, accessibilità se non erro..quindi ti semplifichi la vita 8)
[Si lo so che dovrebbe esserci di default la tastiera a schermo ma vorrei iniziare prima sviluppando tutto tramite software, poi aggiungerò altre funzioni e pian piano "trasformerò" il progetto con parti hardware: sto imparando adesso quindi ne approfitto per far pratica..]
Comunque mi sono spiegato male ed ho anche dimenticato di aggiungere dei dettagli:
Il software (scritto in C++) lo utilizzerò in un portatile al quale appunto dovrà essere collegato Leonardo. Tramite il portatile manderò quindi degli output che corrisponderanno a semplici tasti della tastiera e dovranno esser digitati su un secondo computer.
E' possibile far ciò? Non ho ancora ben chiaro come, e se posso, collegare Leonardo a due PC: uno che manda l'input (scelta a schermo del pulsante) ed un altro che da l'output (digitazione carattere). In entrambi i computer ho: uscite USB ed uscite Ethernet.
Se ho capito bene quel che vuoi fare, dovrai realizzare un software che parla con Arduino tramite porta seriale, inviando "comandi" che uno sketch su Arduino convertirà in pressioni di tasti "emesse" sulla porta USB, attraverso la quale apparirà come tastiera di un altro PC.
Ho capito bene? In tal caso, ti sono chiari i passi che ho appena elencato? Per collegare entrambi i PC ti servirà perlomeno un secondo adattatore USB <-> Seriale, da collegare ai pin 0/1 della Leonardo. In alternativa potresti emulare una tastiera PS/2, mi pare sia facilmente fattibile.
SukkoPera:
Se ho capito bene quel che vuoi fare, dovrai realizzare un software che parla con Arduino tramite porta seriale, inviando "comandi" che uno sketch su Arduino convertirà in pressioni di tasti "emesse" sulla porta USB, attraverso la quale apparirà come tastiera di un altro PC.
Ho capito bene? In tal caso, ti sono chiari i passi che ho appena elencato? Per collegare entrambi i PC ti servirà perlomeno un secondo adattatore USB <-> Seriale, da collegare ai pin 0/1 della Leonardo. In alternativa potresti emulare una tastiera PS/2, mi pare sia facilmente fattibile.
Esatto hai capito benissimo!
Una domanda però avrei: nella Leonardo non ho già un'uscita USB e un'uscita Ethernet? Non potrei semplicemente collegare un PC mediante usb e l'altro mediante Ethernet?
Se così non fosse, quale dispositivo dovrei aggiungere?
La Leonardo non ha Ethernet a bordo. Potresti aggiungere un Ethernet Shield, ma mi sembra decisamente più comodo, semplice ed economico usare il convertitore USB <-> Seriale che ho menzionato prima. Vedi su eBay o Amazon, ne troverai un'infinità!
nid69ita:
Dove l'hai letta che la Leonardo ha la Ethernet ?
L'ha letta sul sito di Arduino.org dato che loro la producono ... QUI
>arduinopro44: ... ti faccio notare che, almeno al momento, questo è il sito di Arduino.cc dove forniamo supporto per le schede prodotte da Arduno.cc e che conosciamo.
Quelle prodotte da Arduno.org qui NON sono molto conosciute e, molto probabilmente, per dette schede è meglio rivolgersi al forum di Arduino.org.
gpb01:
L'ha letta sul sito di Arduino.org dato che loro la producono ... QUI
>arduinopro44: ... ti faccio notare che, almeno al momento, questo è il sito di Arduino.cc dove forniamo supporto per le schede prodotte da Arduno.cc e che conosciamo.
Quelle prodotte da Arduno.org qui NON sono molto conosciute e, molto probabilmente, per dette schede è meglio rivolgersi al forum di Arduino.org.
Guglielmo
Ah capito, scusatemi! Pensavo che questo forum fosse collegato anche a quel sito.
L'alternativa proposta è invece il dispositivo CP2102 (10euro)?
Se ho capito bene quali dispositivi utilizzare, quale tra i due mi consigliate? (La differenza di prezzo è irrisoria quindi sceglierei la soluzione più efficiente)
"Efficiente" non vuol dire molto in questo caso. Io opterei per la seriale per evitare di dovermi impelagare con indirizzi IP, connessioni TCP, e quant'altro, ma si può fare. D'altro canto questa soluzione sarebbe migliore se il tutto non si trova nelle immediate vicinanze.
Di adattori seriale/USB se ne trovano anche a meno di 1€, dipende sempre dal compromesso prezzo/affidabilità che vuoi raggiungere. In ogni caso, io ne uso regolarmente un paio di veramente economici e non mi hanno mai dato alcun problema, però io sono un utente Linux, su cui non ho problemi coi driver, so che su Windows la cosa varia molto da chip a chip, ma io non ti so dire di più in merito.
Qualcuno che ha esperienza su Windows saprebbe consigliarmi?
Non vorrei comprare prodotti troppo scadenti ed inoltre vorrei riceverlo entro pochi giorni quindi mi sono orientato su questi due convertitori seriali usb:
Infine per quanto riguarda l'utilizzo vorrei sapere: basta semplicemente collegare questo convertitore alla scheda Leonardo e quindi posso "inviare" gli output tramite lo sketch (via usb) oppure devo aggiungere qualche altro dispositivo?
Questo coso lo attacchi al primo PC, ti creerà una porta seriale virtuale (tipo COM5:) su cui dal tuo software andrai a scrivere i comandi secondo un protocollo che definirai.
Su Arduino riceverai quei comandi sulla seriale "vera" (Serial1), li dovrai in qualche modo decodificare e da lì creare le pressioni di tasti che ti interessano tramite la libreria Keyboard.
Arduino sarà collegato tramite la sua porta USB nativa al secondo PC, il quale vedrà le pressioni di tasti inviate.