Go Down

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

gpb01

Dubito che con una Leonardo chambi qualche cosa ...
... sia la Leonardo che la Micro montando il ATmega32U4 e questa è l'unica cosa che conta.  Per il resto che una porti fuori certi pin, che abbia un regolatore di tensione piuttosto che un'altro, ecc. ecc. NON conta nulla.

A livello software ed interfaccia USB sono identiche e quello che gira su una DEVE girare sull'altra (identica MCU), quindi ... non credo che con la Leonardo risolverai.

Io invece contatteri l'autore di quell'articolo e chiederei aiuto ;)

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

zoomx

Fra le varie ricerche effettuate sono capitato nella libreria corrispondente scritta  da Paul Stoffregen per la Teensy
https://github.com/PaulStoffregen/cores/blob/master/teensy/keylayouts.h

Dove si legge
Code: [Select]
#define ASCII_2D KEY_MINUS // 45 -
#define ASCII_2E KEY_PERIOD // 46 .
#define ASCII_2F KEY_SLASH // 47 /
#define ASCII_30 KEY_0 // 48 0

Mentre le parentesi quadre sarebbero
Code: [Select]
#define ASCII_5B KEY_LEFT_BRACE // 91 [
#define ASCII_5C KEY_BACKSLASH // 92
#define ASCII_5D KEY_RIGHT_BRACE // 93 ]


Ora, a parte la differente architettura, il codice mandato via USB dovrebbe essere lo stesso (che corrisponde anche a quello ASCII, sembra) e invece non lo è.

Sempre che non ho capito male e la libreria serva ad interpretare i dati ricevuti da una tastiera.

Mi sembra anche strano che stampando i 255 caratteri non siano uscite fuori prima, però.

DannyTheMaster

Ho preso leonardo, ma non cambia niente, è proprio un problema di codifica... solo che tutte le guide/esempi che ho trovato sono troppo complessi, e anche mettendomici, cercando di seguire quelli meno tecnici e piu chiari, fanno tutti riferimneto al vecchio ide e alla sostituzione di file, che nella nuova IDE (APP di microsoft) non risiedono piu nella stessa posizione...

Che per assurdo, non mi interessa che diventi MAPPATO in italiano, mi basta trovare una "Tabella" con la mappatura di Arduino, la sua originale, in esadecimale, da dove poter prendere il codice necessario per fargli digitare il carattere che dico io.

Anche se ho visto che, le parentesi, angolari, graffe, e quadre, e caratteri come l'apice o altri, sono davvero una rogna... ho visto guide che rimappavano, ma non so davvero da che parte prenderle.

Nessuno ha qualche idea?

DannyTheMaster

Guarda, io non devo farci un'applicazione molto elaborata, devo simulare la pressione della tastiera per poter comandare un gioco non FPS (quindi con timing accettabilmente lunghi). Per questo motivo, ho rimappato alla vecchia maniera, cercando di scoprire quali tasti premono quelli che interessano a me. Li metto a disposizione della comunità:

Code: [Select]

Keyboard.press('+'); // ^
  Keyboard.press('ù'); // ù
  Keyboard.press('ò'); // ,  u
  Keyboard.press('à'); // .  ,
  Keyboard.press(','); // , niente
  Keyboard.press('.'); // .
  Keyboard.press('-'); // '
  Keyboard.press('*'); // (
  Keyboard.press('_'); // ?
  Keyboard.press(':'); // ç
  Keyboard.press('ì'); // 7
  Keyboard.press('|'); // §
  Keyboard.press('!'); // !
  Keyboard.press('"'); // °
  Keyboard.press('£'); // x
  Keyboard.press('$'); // $
  Keyboard.press('%'); // %
  Keyboard.press('&'); // /
  Keyboard.press('/'); // -
  Keyboard.press('('); // )
  Keyboard.press(')'); // =
  Keyboard.press('='); // ì
  Keyboard.press('?'); // _
  Keyboard.press('^'); // &
  Keyboard.press('é'); // 4
  Keyboard.press('*'); // (
  Keyboard.press('§'); // 2
  Keyboard.press('ç'); // 2
  Keyboard.press('°'); // niente
  Keyboard.press(';'); // ò
  Keyboard.press(':'); // ç
  Keyboard.press('#'); // £
  Keyboard.press('['); // è
  Keyboard.press(']'); // +
  Keyboard.press('@'); // "
  Keyboard.press('{'); // é
  Keyboard.press('}'); // *
  Keyboard.press('⟨'); // 3
  Keyboard.press('⟩'); // 4
  Keyboard.press('<'); // ;
  Keyboard.press('>'); // :


Mano a mano che vado avanti aggiorno la lista... potrebbe diventare un post interessante, per chi come me, non ha molte competenze e non vuole mettersi a "smadonnare" (passatemi il termine) con sovrascritture di bootload, o rimappatura via codice, con un discreto carico di lavoro per piccoli controllori, uso di memoria, e tanta tanta buona volontà richiesta per "capire" cosa si sta inserendo nel proprio codice (fondamentale, ma non scontato).

P.S. la guida di Tensy l'ho trovata spesso anche io, ma non ho capito se Tensy è un tipo di scheda alternativa, un ide, entrambi... insomma, non devo diventare un tenico migliore, mi serve solo una soluzione fast, con un minimo dispendio di tempo, non devo diventare un tecnico elettronico/software migliore, perché non è il mio lavoro, quindi è inutile per non dire dispersivo investire ore e ore nello studio di "teniche", se ovviamente non strettamente necessario. Infatti ho fatto il rudimentale, ho sparato fuori tutti i tasti "particolari" e ho listato cosa restituivano... semplice, poco dispendioso.

Un saluto, grazie mille dei suggerimenti!

zoomx

Mi sono messo a leggere e adesso ho le idee più chiare.
La libreria non manda il carattere ascci ma il cosiddetto scancode che corrisponde al tasto fisico della tastiera. Cosa c'è scritto sopra dipende dalla tastiera.
La libreria Leonardo usa una tabella di conversione ASCCI scancode della sola tastiera americana, la libreria Teensy invece ha diverse tastiere.
Le guide consigliano di modificare la libreria HID.cpp

Allora mi sono messo a giocare e ho trovato questo

Keyboard.press(KEY_RIGHT_ALT);
  Keyboard.write(0x5b);
  Keyboard.write(0x5d);
  Keyboard.releaseAll();

che da me scrive la coppia []

Go Up