Bonjour,
Je réalise un projet pour récupérer les touches envoyées d'un pavé numérique en PS/2 branché sur un ARDUINO (un nano) pour ensuite renvoyer vers le PC en USB d'autres séquence de touches. Le PC reconnait mon arduino comme un periphérique HID USB (un bête clavier USB quoi).
exemple: je tape "1" sur le pavé numérique, Arduino intercepte en PS/2 et renvoie "2" sur l'USB (bon là c'est un exemple). Ainsi c'est comme si on avait tapé directement 2 sur le clavier du PC.
Pour ce faire, j'utilise 2 "libraries" bibliothèques: PS2Keyboard 2.4 & Vusb-for-arduino-005.
PS2Keyboard Library, Connect a keyboard for user input et https://code.google.com/p/vusb-for-arduino/
Pour valider mon idée, j'ai fait 2 mini projets:
- clavier PS/2 + Arduino nano + PS2Keyboard Library 2.4: ça fonctionne, je récupère bien les touches dans la console serie sur le PC
- Arduino nano + cable USB (différent de l'USB de l'arduino - je parle d'un nouveau port cablé sur les pins digital de l'arduino) vers PC + Vusb-for-arduino-005 : ça fonctionne, mon PC reconnait l'arduino comme un periphérique USB et je peux envoyer des touches au PC comme avec un clavier USB. (je précise que j'utilise obligatoirement l'IDE 1.0 de arduino, sinon ça compile pas avec cette library)
Maintenant, ça ne fonctionne pas lorsque je fusionne les 2 mini projets en un seul.
Voici le programme minimum (en fait ça bloque sur la déclaration des bibliothèques):
#include "PS2Keyboard.h"
#include "UsbKeyboard.h" //utilise arduino IDE 1.0 absolument
void setup() {
// put your setup code here, to run once:
}
void loop() {
// put your main code here, to run repeatedly:
}
J'obtiens une erreur de compilation sous IDE 1.0:
core.a(WInterrupts.c.o): In function `__vector_1':
C:\Program Files (x86)\arduino-1.0\hardware\arduino\cores\arduino/WInterrupts.c:230: multiple definition of `__vector_1'
UsbKeyboard\usbdrvasm.S.o:(.text+0x32): first defined here
J'ai essayé sous IDE 1.6.4 mais la lib USBKeyboard ne compile pas.
In file included from Y:\Dropbox\Arduino\Sketchbook\libraries\UsbKeyboard/UsbKeyboard.h:14:0,
from ccccccc.ino:2:
Y:\Dropbox\Arduino\Sketchbook\libraries\UsbKeyboard/usbdrv.h:479:26: error: variable 'usbDescriptorDevice' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
char usbDescriptorDevice[];
^
Y:\Dropbox\Arduino\Sketchbook\libraries\UsbKeyboard/usbdrv.h:485:33: error: variable 'usbDescriptorConfiguration' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
char usbDescriptorConfiguration[];
^
Y:\Dropbox\Arduino\Sketchbook\libraries\UsbKeyboard/usbdrv.h:491:29: error: variable 'usbDescriptorHidReport' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
char usbDescriptorHidReport[];
^
Y:\Dropbox\Arduino\Sketchbook\libraries\UsbKeyboard/usbdrv.h:497:27: error: variable 'usbDescriptorString0' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
char usbDescriptorString0[];
^
Y:\Dropbox\Arduino\Sketchbook\libraries\UsbKeyboard/usbdrv.h:503:31: error: variable 'usbDescriptorStringVendor' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
int usbDescriptorStringVendor[];
^
Y:\Dropbox\Arduino\Sketchbook\libraries\UsbKeyboard/usbdrv.h:509:31: error: variable 'usbDescriptorStringDevice' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
int usbDescriptorStringDevice[];
^
Y:\Dropbox\Arduino\Sketchbook\libraries\UsbKeyboard/usbdrv.h:515:37: error: variable 'usbDescriptorStringSerialNumber' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
int usbDescriptorStringSerialNumber[];
^
In file included from ccccccc.ino:2:0:
Y:\Dropbox\Arduino\Sketchbook\libraries\UsbKeyboard/UsbKeyboard.h:37:39: error: variable 'usbDescriptorHidReport' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
PROGMEM char usbHidReportDescriptor[35] = { /* USB report descriptor */
^
Erreur lors de la compilation.
J'imagine que c'est un problème avec les interruptions sous l'IDE 1.0. Mais je ne comprends jamais rien avec ces messages ésotériques de compilateur.
J'ai absolument besoin d'utiliser les interruptions sur les pins digital 2 et 3 de l'arduino:
- pin 2 (INT0) pour Vusb-for-arduino-005
- pin 3 (INT1) pour PS2Keyboard 2.4
J'ai cherché longtemps sur google, sur les forums anglais et français mais je n'ai rien trouvé. J'avais bien trouvé des projets similaires sur le net mais impossible de les compiler et/ou de les faire fonctionner. J'avais même trouvé un message avec exactement le même problème mais personne n'a répondu sur le forum Anglais: Arduino Interrupts VUSB intergration - Programming Questions - Arduino Forum
J'ai 2 pistes:
- Je suppose que Vusb-for-arduino-005 utilise les interruptions INT0 et INT1 et comme PS2Keyboard 2.4 a besoin de l'INT1, ça ne compile pas.
- Je suppose qu'en modifiant Vusb-for-arduino-005 pour le faire tourner sur l'IDE 1.6.4 ça devrait compiler mais je ne sais pas comment faire.
Auriez-vous une idée de ce que je dois changer au niveau des "libraries" afin que cela compile et sous quelle version de IDE? Merci par avance pour votre aide à me faire progresser.
vusb-for-arduino-005 Libraries.zip (347 KB)
PS2Keyboard.zip (10.2 KB)