Loading...
Pages: [1] 2 3   Go Down
Author Topic: [RESOLU]Ajouter un port USB pour clavier  (Read 1529 times)
0 Members and 1 Guest are viewing this topic.
France, Lyon 6°
Offline Offline
Full Member
***
Karma: 0
Posts: 144
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,
j'aimerais ajouter un nouveau port à ma UNO R3 et l'utiliser en clavier.
Pour cela, je propose un protoshield avec port USB.

Déjà :
  • Qu'est-ce qui différencie un port série d'un port "clavier" ?
  • Si possible utiliser seulement ce port pour envoyer les deux types de données ci-dessus
  • Pour utiliser les deux avec le même programme, passer de l'un à l'autre avec un interrupteur ou une broche sortie

Bref, je pars de rien, j'avais vu des discutions à ce sujet il y a longtemps et je les ai relues !
Ce lien m'a l'air utile.

Merci au moins d'avoir lu et peut-être de répondre !
« Last Edit: December 31, 2012, 08:38:53 am by numero_744 » Logged

- Arduino UNO R3;
- PowerBook G4;
  - Arduino (C)
  - Eclipse (Java)
  - wxLua (µLua)
  - TextWrangler (HTML + JS)
- (3)DS et bientôt R4 (pour créer, pas télécharger !)
- Ethenet Shield;
- Proto Shield*;

* : En cours de transformation en Vusb + TVout

France
Offline Offline
Faraday Member
**
Karma: 36
Posts: 4307
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

j'aimerais ajouter un nouveau port à ma UNO R3 et l'utiliser en clavier.
En clavier device ou host ?
Suivant la réponse le matériel a utiliser est radicalement différent.

Qu'est-ce qui différencie un port série d'un port "clavier" ?
Le protocole et la phase d'énumération USB : Serial CDC pour un port série virtuel, Keyboard HID pour un clavier.
Pour le reste tout passe par le bus USB de la même manière.

Si possible utiliser seulement ce port pour envoyer les deux types de données ci-dessus
J'ai rien compris, quelle types de données, quel port ?

Pour utiliser les deux avec le même programme, passer de l'un à l'autre avec un interrupteur ou une broche sortie
C'est quoi le but final, parce que là c'est vraiment pas trés clair tout ça ...

Bref, je pars de rien, j'avais vu des discutions à ce sujet il y a longtemps et je les ai relues !
Ce lien m'a l'air utile.
Si le but est de faire un port USB device émulant un clavier usb la librairie Vusb + surcouche arduino est effectivement la bonne solution.
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

France, Lyon 6°
Offline Offline
Full Member
***
Karma: 0
Posts: 144
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salut et merci pour ta réponse.

En clavier device ou host ?
smiley-eek ?

Si possible utiliser seulement ce port pour envoyer les données CDC et HID sur la prise USB ajoutée.

Pour utiliser les deux avec le même programme, passer de l'un à l'autre avec un interrupteur ou une broche sortie
comme (je suppose) qu'on ne peut envoyer les deux en même temps, un interrupteur choisira un mode "direct" (CDC) et un mode en passant par un montage (HID), ou alors, une broche digitale et je-ne-sais-quoi pour basculer de l'un à l'autre (HIGH=HID et LOW=CDC).

C'est quoi le but final, parce que là c'est vraiment pas trés clair tout ça ...
Créer un "KeyboardShield"

Sur le schéma de Ce lien, il y a trois broches pour deux câbles !

J'ai téléchargé la librairie vusb-20120109, mais l'IDE dit qu'il ne peut pas l'utiliser car caractères non-ASCII... smiley-cry
Les circuits ont l'air compliqués... Au départ, je pensais faire ma propre librairie, avec juste :
  • blabla.begin(); //Met la broche pour passer en HID sur HIGH + met une valeur sur 1
  • blabla.stop(); //Met la même broche en LOW et revenir en + met une valeur sur 0
  • blabla.write("quelque chose"); //si une valeur est sur 1, serial.print("quelque chose");
Si nécessaire, remplacer serial.print("quelque chose"); par serial.print(un_numero_de_caractere);
Bref, un truc simple ! Et tant pis pour Commande (pomme); Contrôle; Option(alt ou casserole); F1<...>F15; esc et autres !
Par contre, les touches directionnelles seront souvent indispensables...

Je ne compte aller sur les bibliothèques préfabriquées qu'en dernière solution ou si l'on n'a pas le choix de faire simple.
Merci pour votre aide !
Logged

- Arduino UNO R3;
- PowerBook G4;
  - Arduino (C)
  - Eclipse (Java)
  - wxLua (µLua)
  - TextWrangler (HTML + JS)
- (3)DS et bientôt R4 (pour créer, pas télécharger !)
- Ethenet Shield;
- Proto Shield*;

* : En cours de transformation en Vusb + TVout

France
Offline Offline
Faraday Member
**
Karma: 36
Posts: 4307
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

smiley-eek ?
Device = émission, host = réception (pour faire simple)

comme (je suppose) qu'on ne peut envoyer les deux en même temps, un interrupteur choisira un mode "direct" (CDC) et un mode en passant par un montage (HID), ou alors, une broche digitale et je-ne-sais-quoi pour basculer de l'un à l'autre (HIGH=HID et LOW=CDC).
On peut émuler bien plus qu'un périphérique usb (en émulant un switch), faire du HID et CDC en même temps est tout à fait possible.
Par contre niveau utilisation CPU / mémoire ça va pomper pas mal.
(sur le forum tu doit pouvoir retrouver un code émulant 6 joystick usb HID en même temps)

Créer un "KeyboardShield"
L'intérêt est plutôt limité depuis l'arduino leonardo et son port usb natif ...
Si tu veut faire une shield compatible vusb il faudra respecter le schéma officiel fourni par www.obdev.at/vusb/

Sur le schéma de Ce lien, il y a trois broches pour deux câbles !
Data+, Data- et la résistance de pull-up sur Data- smiley-wink

J'ai téléchargé la librairie vusb-20120109, mais l'IDE dit qu'il ne peut pas l'utiliser car caractères non-ASCII... smiley-cry
Si tu veut utiliser la librairie vusb il faut (au choix) :
- faire un dossier ne contenant pas de tiret, truc spéciaux, etc ...
- utiliser l'adaptation de vusb pour arduino (recommandé)

Les circuits ont l'air compliqués... Au départ, je pensais faire ma propre librairie, avec juste :
(...)
Le circuit en lui même est très simple, trois résistances, deux diodes zener et un connecteur usb.
Le code lui est bien plus compliqué (et écris en grande partie en assembleur par soucis de timings).

Je ne compte aller sur les bibliothèques préfabriquées qu'en dernière solution ou si l'on n'a pas le choix de faire simple.
Si tu souhaite faire ta propre librairie vusb c'est même pas la peine d'y penser smiley-wink
Pour l'adaptation arduino de vusb c'est juste un dossier avec 3 fichiers en plus pour simplifier le code côté utilisateur.
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

France, Lyon 6°
Offline Offline
Full Member
***
Karma: 0
Posts: 144
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Si l'on compare v-usb avec l'autre, on remarque une (légère) différence de complexité !

Les circuits ont l'air compliqués... Au départ, je pensais faire ma propre librairie, avec juste :
(...)
Le circuit en lui même est très simple, trois résistances, deux diodes zener et un connecteur usb.
Le code lui est bien plus compliqué (et écris en grande partie en assembleur par soucis de timings).
Je pensais au v-usb et non à l'autre, désolé de parler de deux choses en même temps.

L'intérêt est plutôt limité depuis l'arduino leonardo et son port usb natif ...
La leonardo a une 20aine de broches. Un shield peut être utile pour être ajouté sur une MEGA ou une UNO (il me semble que la UNO a plus de mémoire que la leonardo).
Placer un interrupteur de sécurité du HID peut être utile si erreur code smiley-twist (flemme d'appuyer sur reset...).
Mais je vais peut être céder cette discussion à un intéressé et acheter une leonardo.

P. S. : J'avais pensé à du CDC + Java (que je ne connais pas encore...) mais je n'ai pas trouvé d'applications pour 10.4... smiley-cry
Logged

- Arduino UNO R3;
- PowerBook G4;
  - Arduino (C)
  - Eclipse (Java)
  - wxLua (µLua)
  - TextWrangler (HTML + JS)
- (3)DS et bientôt R4 (pour créer, pas télécharger !)
- Ethenet Shield;
- Proto Shield*;

* : En cours de transformation en Vusb + TVout

France
Offline Offline
Faraday Member
**
Karma: 36
Posts: 4307
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Si l'on compare v-usb avec l'autre, on remarque une (légère) différence de complexité !
Oui mais non smiley-wink
En fait il y a juste une différence de logique.
V-usb part du principe que le microcontrôleur travaille en 3v3 (d'où les deux diodes en série qui abaisse le 5v de l'usb à du ~3v3) = pas de zener sur D+ / D-.
L'autre montage lui part du principe que l'arduino travaille en 5v (ce qui est le cas) et donc ajoute deux zener sur D+ / D- pour limiter la tension à 3v3.

La leonardo a une 20aine de broches. Un shield peut être utile pour être ajouté sur une MEGA ou une UNO
Au niveau du code il faudrait faire un système de #if defined(__AVR__ATMEGAxxx__) ... #else ... #endif.
Les ports / broches ne seront pas les même entre une mega et une UNO.

(il me semble que la UNO a plus de mémoire que la leonardo).
C'est l'inverse, mais vraiment de peu (2Ko vs 2.5Ko de RAM pour la leonardo)
http://arduino.cc/en/Main/ArduinoBoardLeonardo
http://www.arduino.cc/en/Main/arduinoBoardUno

P. S. : J'avais pensé à du CDC + Java (que je ne connais pas encore...) mais je n'ai pas trouvé d'applications pour 10.4... smiley-cry
Pourquoi java ? CDC c'est une classe usb générique pour faire des communications série (ou autre).
Pour 10.4 ? Ubuntu ?
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

France, Lyon 6°
Offline Offline
Full Member
***
Karma: 0
Posts: 144
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

C'est lequel, le bon montage, le simple ou le compliqué ?

Quel est l'idiot qui a eu l'idée de changer les broches ?  smiley-mad

Je pensais à la mémoire morte (et encore, je ne suis pas sûr...).
Sinon, pourquoi la UNO est-elle plus chère alors qu'elle n'a pas de HID et qu'elle a moins de mémoire vive ?

Java pour utiliser le port série comme clavier (j'ai vu ça sur le net).
J'ai un vieux Mac OSX 10.4.11, alors que la plupart sont en 10.5 / 10.6, donc les applications de notre époque ne sont plus compatibles avec mon Mac.
Logged

- Arduino UNO R3;
- PowerBook G4;
  - Arduino (C)
  - Eclipse (Java)
  - wxLua (µLua)
  - TextWrangler (HTML + JS)
- (3)DS et bientôt R4 (pour créer, pas télécharger !)
- Ethenet Shield;
- Proto Shield*;

* : En cours de transformation en Vusb + TVout

France
Offline Offline
Faraday Member
**
Karma: 36
Posts: 4307
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

C'est lequel, le bon montage, le simple ou le compliqué ?
Dans ton cas le schéma du tutoriel, pas celui du site officiel (tu travaille en 5v).

Quel est l'idiot qui a eu l'idée de changer les broches ?  smiley-mad
Les deux schémas sont identique smiley-wink
Ce qui diffère c'est la partie alimentation.

Je pensais à la mémoire morte (et encore, je ne suis pas sûr...).
Même taille, que ce soit une UNO ou une leonardo.

Sinon, pourquoi la UNO est-elle plus chère alors qu'elle n'a pas de HID et qu'elle a moins de mémoire vive ?
La UNO à plus de composants sur la carte (partie chipset usb, ...).
/!\ Ne pas uniquement ce baser sur l'aspect prix ! La UNO et la leonardo ne sont physiquement pas compatible (shields et autre).
Prendre une leonardo par soucis de prix sans penser au coté hardware nécessaire au projet c'est faire une grosse bêtise smiley-wink

Java pour utiliser le port série comme clavier (j'ai vu ça sur le net).
J'ai un vieux Mac OSX 10.4.11, alors que la plupart sont en 10.5 / 10.6, donc les applications de notre époque ne sont plus compatibles avec mon Mac.
Je connais pas du tout OSX, j'aime bien mon linux moi smiley-razz
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

France, Lyon 6°
Offline Offline
Full Member
***
Karma: 0
Posts: 144
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Cool, un montage simple !

La leonardo est incompatible avec tous les shields ou quelques-uns seulement ?
L'Ethernet, par exemple ?

Je laisse tomber le Java, pas besoin.

Juste, c'est bien vusb pour mon montage ? smiley-grin

Merci !
Logged

- Arduino UNO R3;
- PowerBook G4;
  - Arduino (C)
  - Eclipse (Java)
  - wxLua (µLua)
  - TextWrangler (HTML + JS)
- (3)DS et bientôt R4 (pour créer, pas télécharger !)
- Ethenet Shield;
- Proto Shield*;

* : En cours de transformation en Vusb + TVout

France, Lyon 6°
Offline Offline
Full Member
***
Karma: 0
Posts: 144
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salut, j'essaye et réessaye de faire fonctionner différentes versions de la librairie v-usb mais ça ne compile pas !
Une infinité d'erreurs sont renvoyées, mais là, c'est pas ma faute : les exemples fournis ne fonctionnent pas non-plus.

S.V.P. revoir Reply précédente :
La leonardo est incompatible avec tous les shields ou quelques-uns seulement ?
L'Ethernet, par exemple ?

Merci !
Logged

- Arduino UNO R3;
- PowerBook G4;
  - Arduino (C)
  - Eclipse (Java)
  - wxLua (µLua)
  - TextWrangler (HTML + JS)
- (3)DS et bientôt R4 (pour créer, pas télécharger !)
- Ethenet Shield;
- Proto Shield*;

* : En cours de transformation en Vusb + TVout

France
Offline Offline
Faraday Member
**
Karma: 36
Posts: 4307
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Salut, j'essaye et réessaye de faire fonctionner différentes versions de la librairie v-usb mais ça ne compile pas !
Une infinité d'erreurs sont renvoyées, mais là, c'est pas ma faute : les exemples fournis ne fonctionnent pas non-plus.
Les exemples de v-usb compilent, pas de toute là dessus ... tu doit avoir une (grosse) erreur de configuration dans usbconfig.h smiley-wink
Et normalement avec http://code.google.com/p/vusb-for-arduino/ tu ne devrais rien avoir à configurer.

La leonardo est incompatible avec tous les shields ou quelques-uns seulement ?
L'Ethernet, par exemple ?
L'ethernet shield officielle devrait marcher car elle utilise le port ICSP pour communiquer avec l'arduino.
Mais toutes les autres shields qui utilisent le spi, i2c, ... ne fonctionnerons pas avec la leonardo.
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

France, Lyon 6°
Offline Offline
Full Member
***
Karma: 0
Posts: 144
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci skywodd,
Bon, on est d'accord :
Je clique sur le lien affiché et j'atterris sur cette page.
Ensuite, je clique sur "arduinousb_release_004.tar.gz", j'ouvre le *.zip et je met le dossier dans "librairies".
J'ouvre l'IDE Arduino.
>Fichier
->Exemples
-->arduinousb_release_004
--->UsbKeyboardDemo1
Je clique sur "Vérifier"... Il me renvoie son infinité d'erreurs :
Code:
UsbKeyboardDemo1.cpp:1:25: error: UsbKeyboard.h: No such file or directory
UsbKeyboardDemo1.cpp: In function 'void loop()':
UsbKeyboardDemo1.pde:-1: error: 'UsbKeyboard' was not declared in this scope
UsbKeyboardDemo1.pde:-1: error: 'KEY_H' was not declared in this scope
UsbKeyboardDemo1.pde:-1: error: 'KEY_E' was not declared in this scope
UsbKeyboardDemo1.pde:-1: error: 'KEY_L' was not declared in this scope
UsbKeyboardDemo1.pde:-1: error: 'KEY_O' was not declared in this scope
UsbKeyboardDemo1.pde:-1: error: 'KEY_SPACE' was not declared in this scope
UsbKeyboardDemo1.pde:-1: error: 'KEY_W' was not declared in this scope
UsbKeyboardDemo1.pde:-1: error: 'KEY_R' was not declared in this scope
UsbKeyboardDemo1.pde:-1: error: 'KEY_D' was not declared in this scope
UsbKeyboardDemo1.pde:-1: error: 'KEY_ENTER' was not declared in this scope
Je remplace les "" de #include par des <>, je re-clique sur "Vérifier" et... Il continue à me renvoyer des erreurs, sauf la première :
Code:
UsbKeyboardDemo1.cpp: In function 'void loop()':
UsbKeyboardDemo1.pde:-1: error: 'UsbKeyboard' was not declared in this scope
UsbKeyboardDemo1.pde:-1: error: 'KEY_H' was not declared in this scope
UsbKeyboardDemo1.pde:-1: error: 'KEY_E' was not declared in this scope
UsbKeyboardDemo1.pde:-1: error: 'KEY_L' was not declared in this scope
UsbKeyboardDemo1.pde:-1: error: 'KEY_O' was not declared in this scope
UsbKeyboardDemo1.pde:-1: error: 'KEY_SPACE' was not declared in this scope
UsbKeyboardDemo1.pde:-1: error: 'KEY_W' was not declared in this scope
UsbKeyboardDemo1.pde:-1: error: 'KEY_R' was not declared in this scope
UsbKeyboardDemo1.pde:-1: error: 'KEY_D' was not declared in this scope
UsbKeyboardDemo1.pde:-1: error: 'KEY_ENTER' was not declared in this scope
Logged

- Arduino UNO R3;
- PowerBook G4;
  - Arduino (C)
  - Eclipse (Java)
  - wxLua (µLua)
  - TextWrangler (HTML + JS)
- (3)DS et bientôt R4 (pour créer, pas télécharger !)
- Ethenet Shield;
- Proto Shield*;

* : En cours de transformation en Vusb + TVout

France
Offline Offline
Faraday Member
**
Karma: 36
Posts: 4307
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Il faut copier les 3 sous dossiers du dossier "libraries" de l'archive dans le dossier "libraries" de ton installation arduino.
Tu as du copier le dossier "libraries" entier, du coup l'ide ne cherchant pas dans les sous dossier il ne trouve pas la librairie.

Je viens de tester à l'instant :
Quote
Binary sketch size: 2 826 bytes (of a 32 256 byte maximum)

Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

France, Lyon 6°
Offline Offline
Full Member
***
Karma: 0
Posts: 144
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci, j'ai corrigé et il me renvoie
Code:
UsbKeyboardDemo1.cpp.o: In function `UsbKeyboardDevice':
/Applications/Arduino.app/Contents/Resources/Java/libraries/UsbKeyboard/UsbKeyboard.h:139: undefined reference to `usbInit()'
UsbKeyboardDemo1.cpp.o: In function `UsbKeyboardDevice::update()':
/Applications/Arduino.app/Contents/Resources/Java/libraries/UsbKeyboard/UsbKeyboard.h:150: undefined reference to `usbPoll()'

Au fait, sendKeyStroke() va juste envoyer des signaux comme quoi des touches ont été pressées, comme Keyboard.print() pour une leonardo. Quels sont les équivalents de Keyboard.press() et de Keyboard.release() ?

Au fait2, à quoi sert UsbKeyboard.update() ?

Au fait3, à partir du document ci-joint, p.53 à début 59, puis-je modifier les #define KEY_TOUCHE NUMERO et en rajouter ?

Merci !
Logged

- Arduino UNO R3;
- PowerBook G4;
  - Arduino (C)
  - Eclipse (Java)
  - wxLua (µLua)
  - TextWrangler (HTML + JS)
- (3)DS et bientôt R4 (pour créer, pas télécharger !)
- Ethenet Shield;
- Proto Shield*;

* : En cours de transformation en Vusb + TVout

France
Offline Offline
Faraday Member
**
Karma: 36
Posts: 4307
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci, j'ai corrigé et il me renvoie
Code:
UsbKeyboardDemo1.cpp.o: In function `UsbKeyboardDevice':
/Applications/Arduino.app/Contents/Resources/Java/libraries/UsbKeyboard/UsbKeyboard.h:139: undefined reference to `usbInit()'
UsbKeyboardDemo1.cpp.o: In function `UsbKeyboardDevice::update()':
/Applications/Arduino.app/Contents/Resources/Java/libraries/UsbKeyboard/UsbKeyboard.h:150: undefined reference to `usbPoll()'
Il faut utiliser la dernière version de la librairie :
http://code.google.com/p/vusb-for-arduino/downloads/detail?name=vusb-for-arduino-005.zip&can=2&q=

La version de vusb utilisait par la lib. étant assez vieille j'ai fait un zip avec la dernière version de vusb et de usbKeyboard.h (voir pièce jointe).

Au fait, sendKeyStroke() va juste envoyer des signaux comme quoi des touches ont été pressées, comme Keyboard.print()pour une leonardo.
Oui mais une touche à la fois (avec la possibilité d'ajout un modificateur (ALT, CTRL, ...)), alors que la version leonardo envoi toute une série de touches d'un seul coup.

Quels sont les équivalents de Keyboard.press() et de Keyboard.release() ?
Ils n'y en a pas.
La librairie envoi un appui puis un relâchement de touche à chaque sendKeyStroke().
Si tu veut faire un clavier usb virtuel "à la sauce leonardo" ouvre usbKeyboard.h (garde de côté usbconfig.h) et fait ton propre code en partant de vusb directement smiley-wink
La fonction de setup de l'usb fait une dizaine de lignes et la partie envoi d'une touche ce résume en deux lignes.

Au fait2, à quoi sert UsbKeyboard.update() ?
A lancer un "pool" du bus usb, c'est ce qui fait que l'usb marche.

Au fait3, à partir du document ci-joint, p.53 à début 59, puis-je modifier les #define KEY_TOUCHE NUMERO et en rajouter ?
Tu peut en rajouter mais les valeurs que tu ajoutes doivent être dans la norme HID sinon l'ordinateur ne verra pas la bonne touche.
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Pages: [1] 2 3   Go Up
Print
 
Jump to: