Go Down

Topic: Keyboard.h codici ascii non in linea con tabelle, problema con simboli (Read 283 times) previous topic - next topic

DannyTheMaster

Ciao a tutti, innanzitutto sono nuovo, mi chiamo Danilo, ho un'esperienza davvero blanda, conosco le info di base, ma non sono elettrotecnico o comunque uno che opera con corrente elettrica e/o sistemi integrati, di lavoro faccio tutt'altro. Sono bravo a cercarmi le informazioni, e questo mi ha permesso quasi sempre di arraggiarmi, dove, come in questo caso, c'è un forte limite di competenze, o qualche tricks per esperti da sapere che richiederebbe probabilmente settimane di test, come tutti, utilizzo le community per capire se qualche anima buon mi possa aiutare, in attesa qual'ora riesca, a ricambiare il favore!

Ho un problema, sto realizzando un sistemino che mi permetta di sostituire i click da tastiera, con una superficie di controllo per comandare il mio simulatore di treni (TRAIN SIMULATOR 2019).

Non la faccio difficile, sto facendo una semplice superficie che al CLICK del tasto, simuli il click della tastiera, carico il software sulla scheda, e prima che inizi a girare vado su BLOCCO NOTE per vedere quali tasti mi preme.

Ho notato che la libreria non funziona con tutte le board, così ho preso una board compatibile:
https://www.amazon.it/gp/product/B07DF8K59F/ref=ppx_yo_dt_b_asin_title_o02_s00?ie=UTF8&psc=1

Ho verificato prima di prenderla, la scheda dovrebbe essere compatibile per usare la libreria perché usa ATMega 32U4.

Prima di venire qui a disturbare ho fatto vari tentativi, ho usato la libreria Keyboard, facendo test con write, usando sia il font, che il codice ascii. E finché si trattava di caratteri normali nessun problema. Quando è stata ora dei simboli [] (parentesi quadre, solo per fare un esempio), sono iniziati i problemi.

D'apprima, inserendo le semplici parentesi tra apici:
Code: [Select]
Keyboard.write('[');
Mi venivano restituiti dei caratteri diversi, se non erro la è+ (che sono i tasti privi dell'ALT GR).
Così ho cercato una tabella ascii e ho inserito il codice ascii
Code: [Select]
Keyboard.write(93);
93 e 91 sono se non erro i due codici per i due simboli. Ma niente, ho provato con l'hex...
poi ho anche provato a cercare tra i forum, e qualcuno usava questo sistema, ma non sapevo come trovare l'ALTGR
Code: [Select]
Keyboard.press(ctrlKey);
  Keyboard.press('n');
  delay(100);
  Keyboard.releaseAll();

Ovviamente avevo settato la variabile char provando a sostituirla con il tasto

Siccome ho una tastiera con layout inglese (anche se il layout su windows è settato su italiano) ho anche provato ad inserire tutti i codici asci, uno per uno, da 1 a 255 per vedere cosa mi restituivano, ma niente parentesi quadra...

Ho cambiato tastiera, mettendo una logitech scrausa con layout italiano, ma ancora niente... non so piu davvero che altro provare...

Io non riesco a capire quale tabella devo seguire per fargli digitare la parentesi quadra, e già che ci sono, vi chiedo se qualcuno mi può suggerire un link ad una tabella GIUSTA.
Grazie!

P.S. non ho inserito tutto il codice per risparmiare spazio, il codice è corretto, non restituisce nessun errore, e gira, solo mi da altri caratteri.

Questo è l'ultimo test che ho fatto: (avevo trovato una tabella differente)
Code: [Select]
#include <Keyboard.h>

int s = 200;

void setup() {
  // put your setup code here, to run once:
  Keyboard.begin();
}

void loop() {
  // put your main code here, to run repeatedly:
  delay(5000);
  Keyboard.write('E');
  delay(s);
  Keyboard.write('P');
  delay(s);
  Keyboard.write('c');
  delay(s);
  Keyboard.press(100);
  Keyboard.press('è');
  delay(100);
  Keyboard.releaseAll();
  delay(s);
  Keyboard.write(0XBD); //ASCII for ]
  delay(s);
  Keyboard.write('W');
  Keyboard.write('W');
  Keyboard.write('W');
  Keyboard.write('W');
  Keyboard.write('W');
  Keyboard.write('W');
  Keyboard.write('W');
  Keyboard.write('W');
  delay(s);
  Keyboard.write('A');
  Keyboard.write('A');
  Keyboard.write('A');
  Keyboard.write('A');
  Keyboard.write('A');
  Keyboard.write('A');
  Keyboard.write('A');
  Keyboard.write('A');
  Keyboard.write('A');
  Keyboard.write('A');
  Keyboard.write('A');
  Keyboard.write('A');
  Keyboard.write('A');
  Keyboard.write('A');
  delay(100000);

}

Mi restituisce: EPcd3\WWWWWWWWAAAAAAAAAAAAAA

Ho letto il regolamento, cercato di seguire le indicazioni, "spero di avervi aiutato, ad aiutarmi!" (se ci sono errori, vi prego di segnalarmeli che appronto subito le correzioni). Grazie!

gpb01

Buongiorno,
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con molta attenzione tutto il su citato REGOLAMENTO ... Grazie. :)

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà fatta la presentazione nell'apposito thread, nessuno ti potrà rispondere, quindi ti consiglio di farla al più presto. ;)

P.P.S: In conformità al suddetto regolamento, punto 13, il cross-posting è proibito (anche tra lingue diverse) per cui, il tuo post duplicato in altra sezione del forum è stato cancellato.

Ti prego, per il futuro, di evitare di aprire più post sullo stesso argomento in sezioni differenti del forum. Grazie.
Search is Your friend ... or I am Your enemy !

DannyTheMaster

Mi sono presentato, ho aggiunto una riga di dettaglio con le mie competenzeal presente
Per quanto riguarda il cross posting del pps, non so di cosa si stia parlando, io non ho fatto alcun cross posting...

Grazie scusate.

Standardoil

La presentazione la hai fatta
Aiutateci ad aiutarvi lo hai letto (complimenti)
e lo hai anche abbastanza seguito (sei il primo, ancora complimenti)
purtroppo io non uso quella libreria e non ho quell'hardware
Quindi non posso aiutarti, ma seguo con interesse, e se mi viene in mente qualcosa....
Prima legge di Nelson (che sono io): Non scambiare il fine con il mezzo: ricorda "cosa" devi fare, non "come" devi farlo

Non bado a studenti, che copino altrove

Tu hai problema-Io ti domando-Tu non mi rispondi: vuol dire che non ti serve più

gpb01

Per quanto riguarda il cross posting del pps, non so di cosa si stia parlando, io non ho fatto alcun cross posting...
... avevi aperto un thread relativo allo stesso/simile argomento in altra sezione di questo forum (thread che è stato eliminato). Questa cosa è quella che si chiama "cross-posting".

Guglielmo
Search is Your friend ... or I am Your enemy !

DannyTheMaster

Gugliemo, perdonami, quello era un post per l'hardware che non aveva nulla a che fare (come tipologia di richiesta) con questa che è del software. Io ci metto tutto il mio impegno per seguire le regole, ma se poi siete voi stessi a farmele violare.
Il post che tu ritieni simile, ha come soggetto in comune il progetto, ma fa una domanda specifica legata all'hardware, agli shift register, e ai Mosfets... nulla a che vedere con il Keyboard.h mapping di cui si parla qui. Perdonami ma non credo si posa considerare Cross Posting, sono due post che non hanno nulla in comune da un punto di vista tenico, se non il progetto... come dire che è cross post parlare di gomme, e di motore di un'auto.

gpb01

Si, ho visto, ma se guardi un po' in giro qui sul forum, quando si apre una discussione su un "argomento" si cerca poi di contenere il tutto in quella discussione sia che si parli di SW che di HW (... si evita il proliferare di thread e il progetto rimane compatto, con tutte le informazioni, per chi un domani lo va a cercare).

Ci sono dei casi che, in mia assenza (... non posso essere SEMPRE presente) sfuggono, vanno avanti e ... a quel punto, quando me ne accorgo, lascio stare, ma, dove è possibile, un progetto (... come lo è il tuo) è utile che rimanga compatto in un thread ;)

Se poi proprio vuoi fare due thread ... va bene, me ne farò una ragione, però ... ripeto, per i posteri, è meglio che dell'argomento si parli in un solo thread e che in esso trovino tutto quello che serve per realizzarlo :)

Guglielmo
Search is Your friend ... or I am Your enemy !

ORSO2001

ciao...nel .cpp ho trovato il "const uint8_t _asciimap[128]" che riporta:

Code: [Select]
0x2f,          // [
0x30,          // ]

DannyTheMaster

Orso, grazie, ho provato, ma non funziona... infatti io penso sia un exploit, qualcosa di diversamente settato.. ma COSA??? :-O

Code: [Select]
#include <Keyboard.h>

int s = 200;

void setup() {
  // put your setup code here, to run once:
  Keyboard.begin();
}

void loop() {
  // put your main code here, to run repeatedly:
  delay(5000);
  Keyboard.write('E');
  delay(s);
  Keyboard.write('P');
  delay(s);
  Keyboard.write(0x2f);
  delay(s);
  Keyboard.write(0x30);
  delay(s);
}


Questo è il responso:
EP-0

il trattino e lo 0...

Non ho davvero idea di cosa possa essere a fare questo risultato non in linea...

ORSO2001


DannyTheMaster

Ciao Orso, innanzitutto grazie per il supporto, ora guardo subito il link.
Solo per aggiornamento, questa mattina presto ho provato ad attaccare l'arduino ad un computer qualsiasi, stesso risultato. Poi ho provato su MAC (OSX) stesso risultato.

Potrebbe essere la scheda? (che magari ha una mappatura diversa)... ne dubito... anche perché è il software che gestisce queste cose... nella fattispecie la libreria.

Mi guardo il link che mi hai inviato... questa cosa resta alquanto oscura...
Grazie dell'aiuto man!

DannyTheMaster

Eccomi Orso, sembra proprio che tu sia riuscito a trovare il problema, è proprio lo stesso mio.
C'è solo un dubbio, chi ha fatto l'articolo si riprometteva di allegare un file (suppongo la libreria) che pero non vedo allegata mai, tu pensi che funzioni? (adesso lo provo)... non mi è molto chiaro, lo studio un attimo, o nel caso lo testo.

P.S. mi sembra un problema legato alla scheda... che per 9 euro non ha senso... tu ritieni che con una Leonardo (official) il problema si possa ripresentare?

Grazie infinite

ORSO2001

ciao...ieri sera ho dato una letta veloce all'articolo...nell'articolo stesso ci sono dei link...uno di questi dovrebbe portarti alla "patch" per poter usare la libreria con diverse tastiere (se non ho capito male in origine è solo AMERICANA) e dovrebbe consentirti di mappare, od ha già mappato, i vari caratteri non gestiti dall'originale.
se ho tempo leggo meglio...io non ho mai usato questa libreria e non ho possibilità di provare.

DannyTheMaster

Ho provato tutto ieri, allora sembrava che stessi risolvendo, usando una tabella per i caratteri speciali, ma poi mi sono accorto che alla pressione del tasto di tastiera italiana, lui associa il carattere corrispondente del layout americano, con delle eccezzioni, così diventa incredibilmente assurdo, perché dovrei provare a trovare tutti i Layout. Sinceramente la guida di quel ragazzo non mi è molto chiara, proverò ad approfondirla dopo, intanto ho ordinato un Leonardo Normale (non micro) se risolvo, amen, il problema era la scheda, non ha senso impazzirci sopra, perché non ho necessità di risparmiare, e non ho necessità di miniaturizzazione. Avevo preso questo modello Micro Compatibile, perché pensavo fosse la stessa cosa, e non volevo buttare denaro, ma come capita di rado, quel risparmio fatto all'inizio, si tramuta in una spesa extra successiva. Vi tengo aggiornati.
Grazie dell'aiuto

ORSO2001

Mi sa che il problema non è la scheda/micro ma la libreria...dai un occhio al reference di arduino.
Per questo il tipo ha fatto quella "implementazione" alla libreria.

Go Up