Ok, ci sono riuscito e funziona benissimo, lascio il mio sketch nel caso a qualcuno potrebbe servire e svilupparlo in maniera differente.
Si collega l'Arduino UNO al computer e si carica questo sketch (fatto interamente da me):
Titolo: ABCDButton
Autore: Cosiwell
Data : 24/05/2018 01:00
uint8_t buf[8] = { 0 };
// Dichiarazioni costanti su pin definiti
const int A = A0;
const int B = A1;
const int C = A2;
const int D = A3;
// Verifica lo stato dei Pulsanti dichiarati
int previousAState = 0;
int previousBState = 0;
int previousCState = 0;
int previousDState = 0;
void setup() {
Serial.begin(9600);
// Impostazione dei Pulsanti per funzionare con resistenze interne dell'Arduino
pinMode(A, INPUT_PULLUP);
pinMode(B, INPUT_PULLUP);
pinMode(C, INPUT_PULLUP);
pinMode(D, INPUT_PULLUP);
delay(200);
}
void loop() {
// Leggi Pulsanti premuti
int AState = digitalRead(A);
int BState = digitalRead(B);
int CState = digitalRead(C);
int DState = digitalRead(D);
if ((AState != previousAState) && (AState == HIGH)) {
buf[2] = 0x04; // Lettera A
Serial.write(buf, 8); // Invia lettera premuta
releaseKey(); // Rilascia Pulsante
buf[2] = 0x28; // Lettera Invio
Serial.write(buf, 8); // Invia lettera premuta
releaseKey(); // Rilascia Pulsante
}
previousAState = AState;
if ((BState != previousBState) && (BState == HIGH)) {
buf[2] = 0x05; // Lettera B
Serial.write(buf, 8); // Invia lettera premuta
releaseKey(); // Rilascia Pulsante
buf[2] = 0x28; // Lettera Invio
Serial.write(buf, 8); // Invia lettera premuta
releaseKey(); // Rilascia Pulsante
}
previousBState = BState;
if ((CState != previousCState) && (CState == HIGH)) {
buf[2] = 0x06; // Lettera C
Serial.write(buf, 8); // Invia lettera premuta
releaseKey(); // Rilascia Pulsante
buf[2] = 0x28; // Lettera Invio
Serial.write(buf, 8); // Invia lettera premuta
releaseKey(); // Rilascia Pulsante
}
previousCState = CState;
if ((DState != previousDState) && (DState == HIGH)) {
buf[2] = 0x07; // Lettera D
Serial.write(buf, 8); // Invia lettera premuta
releaseKey(); // Rilascia Pulsante
buf[2] = 0x28; // Lettera Invio
Serial.write(buf, 8); // Invia lettera premuta
releaseKey(); // Rilascia Pulsante
}
previousDState = DState;
}
void releaseKey() {
buf[0] = 0;
buf[2] = 0;
Serial.write(buf, 8); // Rilascia Pulsante
}
Caricato il codice, si passa alla fase che permetterà la conversione della scheda Arduino da usbserial a keyboard. Per fare ciò bisogna utilizzare il Software Flip.
Da Qui ci scarichiamo la cartella contenente i vari firmwares.
Dopodiché bisogna mettere Arduino in DFU Mode (cortocircuitando 2 pin Maschio allineati in un gruppo da 6 in corrispondenza del pin 13 - cercare su google immagini DFU Mode Arduino Uno)
Una volta messa la scheda in DFU, si dovrà passare ad Aggiornare i Driver di una periferica sconosciuta a windows manualmente e indirizzarla a: "C:\Program Files (x86)\Atmel\Flip 3.4.7\usb" se non avete cambiato destinazione d'installazione di Flip.
Installati i nuovi driver aprire Flip, cliccare sull'icona del processore e scegliere la propria scheda (nel mio caso ATmega16U2), subito a fianco cliccare sull'icona della USB e aprire il collegamento.
Infine premere CTRL+L e scegliere "Arduino-keyboard-0.3.hex" che si trova nella cartella firmware scaricata in precedenza da github. Cliccare su Run in basso a sinistra a attendere che finisca, dopo scollegare e ricollegare arduino al computer e attendere installazione di driver automatici per "keyboard".
Il collegamento che va fatto, o almeno per questo sketch è:
A0 > Pulsante A > GND
A1 > Pulsante B > GND
A2 > Pulsante C > GND
A3 > Pulsante D > GND
Per cambiare lettere e sapere il codice dei pulsanti presenti sulla tastiera, Qui c'è la lista che mi è servita per sviluppare il mio codice.
Per qualsiasi info commentate