Bonjour,
J'ai installé la librarie PS2Keyboard de PaulStofRegen, en compilant l'exemple simple_test, il y a une erreur de compilation sur PS2Keyboard.pp
IDE 2.3.3, ATmega1284p.
Quelqu'un connait une librairie qui fonctionne sans erreur ?
Je sais qu'il y en a plusieurs, mais laquelle prendre.
Merci de votre aide.
Le problème était le caractère ¤, je l'ai remplacé par 0 et sa compil, par contre l'exemple ne fonctionne pas, rien ne s'affiche sur un terminal (teraterm).
Le clavier est connecté sur quelles broches?
Data sur pin 18 et irq sur pin 19 de l’atmega1284, j’ai aussi essayé d’autres broche et j’ai aussi testé avec un autre clavier.
Les broches pour les IRQ sont définies dans le fichier PS2Keyboard/utility/int_pins.h
Il y a plusieurs #if defined pour différents processeurs. L'ATmega1284P n'est pas défini dans la liste donc il tombe par défaut dans cette option
// Arduino Uno, Duemilanove, LilyPad, Mini, Fio, etc...
#else
#define CORE_INT0_PIN 2
#define CORE_INT1_PIN 3
Sur l'ATmega1284P les INT0, INT1 et INT2 sont sur PD2, PD3 et PB2, ce qui devrait correspondre à D10, D11 et D2 dans "l'appellation Arduino". Cela peut dépendre du variant que tu as choisi pour ta carte 1284 à la compilation.
A noter, au début du fichier int_pins.h, il y a la ligne suivante:
#if !defined(CORE_INT0_PIN) && !defined(CORE_INT1_PIN) && !defined(CORE_INT2_PIN)&& !defined(CORE_INT3_PIN)
Donc rien ne t'empêche de définir ta broche d'interruption avant l'include de int_pins.h #include <PS2Keyboard.h>
Merci, je vais testé, je pensais que ca fonctionnait avec n'importe quel pin, car sur l'ATmega1284p tousles pins supportent les interruptions d'après le pdf, en ces cas là, j'essaierais de modifier le fichier int_pin.h car pd2 et pd3 je l'utilise pour uart1.
J'ai ajouté pour l'atmega1284 et atmega1284p ca ne fonctionne toujours pas
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega1284P__) || defined(__AVR_ATmega1284P__)// Arduino Mega
#define CORE_INT0_PIN 2
#define CORE_INT1_PIN 3
#define CORE_INT2_PIN 21
#define CORE_INT3_PIN 20
#define CORE_INT4_PIN 19
#define CORE_INT5_PIN 18
J'ai donc utilisé les pins 18 et 19 de l'atmega1284p.
J'ai copié dans mon sketch le fichiers int_pins.h et dans le code , j'ai fait ceci
#define CORE_INT2_PIN 18
#define CORE_INT3_PIN 19
#include "int_pins.h"
#include <PS2Keyboard.h>
Mais rien ne fonctionne.
Dans la librarie PS2Keyboard, int_pins.h n'est pas utilisé, il n'y a pas de #include <int_pins.h.>,
donc je dois l'inclure dans mon sketch ?
Je dois l'include apres #include <PS2Keyboard.h> ?
Pour être sur que ca fonctionne j'ai donc utilisé INT0 et INT1, donc PD2 et PD3, mais ca ne fonctionne toujours pas.
dans le fichiers int_pints.h, dans le else j'ai modifié comme ceci
#else
#define CORE_INT0_PIN 10
#define CORE_INT1_PIN 11
Problem résolu, j'ai juste modifié les pins de INT0 et INT1
#else
#define CORE_INT0_PIN 10//2
#define CORE_INT1_PIN 11//3
#endif
sauf que je ne pourrais plus utilisé Serial1, j'utilise deux port série en général, un avec SoftwareSerial et l'autre RX1 et TX1 (PD2 et PD3).
conclusion c'est inutilisable dans mon cas pour mes projets.
Ca me confirme qu'un adaptateur PS/2 avec 4 fils fonctionne.
Si dans PS2Keyboard.h
Quel type de carte as-tu choisi dans l'IDE. Les interruptions ne sont pas définies sur les même numéros de broches suivant que tu choisis "Bobuino", "Sanguino" ou "Standard".
Il y a 3 entrées qui génèrent une interruption "directe" (elles ont un vecteur d'interruption dédié). Pour les autres broches il y a un vecteur d'interruption par banque d'I/O. Elles ne se traitent donc pas de la même manière.
[quote="andromeda92, post:10, topic:1313154"] sauf que je ne pourrais plus utilisé Serial1, [/quote]
Il y a 3 entrées d'interruption directes sur le 1284P comme expliqué au #5. Donc, tu peux sauver ton Serial1.
Merci pour les infos,
J'utilise variant => ATmega1284P et pinout standard,
Pour sauver le serial1 j'ai compris, je pensais qu'il fallait mettre datapin dans une broche int et irq pin dans une autre broche int.
Je vais faire les modifications pour voir si ca fonctionne.
Merci ca fonctionne et j'ai sauvé Serial1
j'ai mis le pin irq dans INT2 c'est à dire pin 2 et data sur pin 20 par exemple,
Simpletest fonctionne. j'ai quand meme ajouté une entrée pour l'atmega 1284p dans int_pins.h
#elif defined(__AVR_ATmega1284__) || defined(__AVR_ATmega1284P__)
#define CORE_INT0_PIN 10
#define CORE_INT1_PIN 11
#define CORE_INT2_PIN 2
Je n'ai pas trouvé comment faire sans modifier le fichier original de la librairie.
[EDIT]
Je vais devoir utiliser la librarie PS2KeyAdvanced car la librarie PS2Keyboard ne gére pas les touches F1 a F10, la touche CTRL, HOME, END, d'après le code.
Je pense qu'un #define dans le programme principale avant l'include de #include <PS2Keyboard.h>devrait être suffisant comme je l'ai dit dans le #5 il y a un if !defined au début de int_pins.h qui sort du fichier si un CORE_INTx_PIN est déjà défini.
Merci. Oui ca fonctionne en mettant le defines avant l'include PS2Keyboard.h.
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.