Clavier matriciel Arduino mega

Bonjour

Je travaille sur un projet de clavier mathématique (frape de code Latex) afin d'aider un étudiant en situation d'handicap à pouvoir prendre ses cours. J'utilise un Arduino mega mais la librairie HID semble ne pas être compatible. Pouvez-vous me donnez des pistes de résolution.

Information supplémentaire :je suis sur windows 11 , l'éditeur latex est Texmaker

Voici mon code :

#include <Arduino.h>
#include <DigiKeyboardFr.h>
#include <Keypad.h>

const byte ROWS = 6;
const byte COLS = 18;

const char* touches[ROWS][COLS] = {
const char* touches[ROWS][COLS] = {
  {"\\alpha", "\\beta", "\\gamma", "\\Gamma", "\\delta", "\\Delta", "\\epsilon", "\\nu", "\\mu", "\\theta", "\\Phi", "\\rho", "\\tau", "\\sigma", "\\pi", "\\omega", "\\Omega","\\eta"}, // 18
  {"\\times", "\\sum", "\\int", "\\iint", "\\iiint", "\\prodd", "\\otimes", "\\land", "\\frac{\\partial}{\partial t}", "\\frac{D}{Dt}", "\\vert", "\\sqrt{", "+", "-", "\\div","\\pm", "\\mathcal{F}" }, // 18
  {"\\chapter{}", "\\section{}", "\\subsection{}", "\\subsubsection{}", "\\begin{align}", "\\end{align}", "\\begin{equation}", "\\end{equation}", "\\begin{itemize}", "\\end{itemize}", "\\begin{enumerate}", "\\end{enumerate}", "\\begin{cases}", "\\end{cases}"}, // 13
  {"\\dot{}", "\\ddot{}", "\\dddot{}", "\\overline{\\overline{", "\\overrightarrow{", "_", "^", "{", "}", "\\left(", "\\right)", "\\left[", "\\right]", "\\mathbb{R}, \\mathbb{R}^2, \\mathbb{R}^3", "\\hat{}", "\\"}, // 18
  {"\\infty", "\\leq", "<", "\\geq", ">", "\\neq", "\\in", "\\notin", "\\exists", "\\nexists", "\\cup", "\\cap", "\\perp", "\\parallel", "\\forall","\\sum"}, // 16
  { "=", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9","$","\\[","\\]"} // 14
};

};

byte rowPins[ROWS] = {7, 8, 9, 10, 11, 12};
byte colPins[COLS] = {22, 23, 24, 25, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 13, 26};
Keypad keypad = Keypad(makeKeymap((char*)touches), rowPins, colPins, ROWS, COLS);

void setup() {
  Serial.begin(9600);
  Serial.println("Initialisation terminée");
}

void sendKey(uint8_t key) {
  DigiKeyboardFr.sendKeyStroke(0, key);
}

void loop() {
  char key = keypad.getKey();

  if (key) {
    Serial.print("Touche pressée : ");
    Serial.println(key);

    // Envoyer la frappe de clavier
    sendKey(key);
  }
}

Merci par avance pour votre réponse, je reste à votre disposition pour toute information complémentaire

:warning:
Post mis dans la mauvaise section, on parle anglais dans les forums généraux. déplacé vers le forum francophone.

Merci de prendre en compte les recommandations listées dans Les bonnes pratiques du Forum Francophone

le plus simple est de passer sur un autre arduino qui est compatible . Le HID est supporté sur les cartes suivantes

sinon il faut jouer avec un autre bootloader et c'est plus compliqué à mettre en oeuvre

puis je passer par un shield, sinon j'ai un AZDelivery ESP32 Dev Kit C V4 (mais je pense qu'il nest pas compatible non plus)?

Shield ? Oui , un shield USB exploitant le circuit intégré MAX3421E (choix limité :confused:)

ESP32 ? ça devient il me semble possible avec les variantes récentes ESP32-S2 et ESP32-S3 qui contiennent une interface USB native, mais pas possible en USB avec l'ESP32 'classique' de la carte mentionnée

c'est vous compliquer la vie... Dans ce cas il vaut mieux envisager de changer le bootlaoder pour GitHub - NicoHood/HoodLoader2: 16u2 Bootloader to reprogram 16u2 + 328/2560 with Arduino IDE

Une piste à explorer ? un ESP32 en clavier BLE (Bluetooth LE)

L'exemple SendKeyStrokes.ino se compile sans pb avec le core ESP32 en version 2.0.10 ou 2.0.11 en prenant pour cible une carte ESP32 basique : LolinD32 Lite essayée, ça devrait fonctionner avec un clone de DevKIt C ESP32 vendu par AZDelivery

Bluetooth activé, l'ordinateur sous Linux Ubuntu voit un nouveau périphérique BLE
Périph Clavier BLE
Après connection on y voit arriver hello zorld (Qwerty oblige) dans toute zone de texte éditable active sur l'ordi

N.B On trouve pour faire ça d'autres bibliothèques et quelques réalisations présentées sur Youtube
cf 'ESP32 BLE keyboard' , je n'ai fait que tester la première bibliothèque rencontrée....

Bonjour ,finalement je suis passé sur Arduino Due, mais je rencontre un problèmes
Les touche tape pas les suites de character (code latex) mais seulement ù,9,5,7 ou Enter ou Suppr
Voici le schema d'un des deux PCB ( 2 identique relier par des cable au niveau des lignes)


et mon code :

 #include <Keypad.h>
 #include <Keyboard.h>
const byte ROWS = 6; // nombre de lignes
const byte COLS = 18; // nombre de colonnes

const char* touches[ROWS][COLS] = {
  {"\\alpha", "\\beta", "\\gamma", "\\Gamma", "\\delta", "\\Delta", "\\epsilon", "\\nu", "\\mu", "\\theta", "\\Phi", "\\rho", "\\tau", "\\sigma", "\\pi", "\\omega", "\\Omega","\\eta"}, // 18
  {"\\times", "\\sum", "\\int", "\\iint", "\\iiint", "\\prodd", "\\otimes", "\\land", "\\frac{\\partial}{\partial t}", "\\frac{D}{Dt}", "\\vert", "\\sqrt{}", "+", "-", "\\div","\\pm", "\\mathcal{F}" }, // 18
  {"\\chapter{}", "\\section{}", "\\subsection{}", "\\subsection{}", "\\begin{align}", "\\end{align}", "\\begin{equation}", "\\end{equation}", "\\begin{itemize}", "\\end{itemize}", "\\begin{enumerate}", "\\end{enumerate}", "\\begin{cases}", "\\end{cases}"}, // 13
  {"\\dot{}", "\\ddot{}", "\\dddot{}", "\\overline{\\overline{}}", "\\overrightarrow{}", "_", "^", "{", "}", "\\left(", "\\right)", "\\left[", "\\right]", "\\mathbb{R}^1, \\mathbb{R}^2, \\mathbb{R}^3", "\\hat{}", "\\"}, // 18
  {"\\infty", "\\leq", "<", "\\geq", ">", "\\neq", "\\in", "\\notin", "\\exists", "\\nexists", "\\cup", "\\cap", "\\perp", "\\parallel", "\\forall","\\sum"}, // 16
  { "=", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9","\\","\[","\]"} // 14
};


byte lignesPins[ROWS] = {A1,A2,A4,A5,A7,A8};
byte colonnesPins[COLS] ={A0,20,23,25,27,29,33,35,37,39,41,45,47,49,32,36,38,40};

Keypad clavier = Keypad(makeKeymap((char*)touches), lignesPins, colonnesPins, ROWS, COLS); 

void setup() {
  Serial.begin(9600);
}
void loop() {
  char touche = clavier.getKey();

  if (touche) {
    Serial.print("Touche pressee : ");
    Serial.println(touche);
  }

  if (Serial.available() > 0) {
    char key = Serial.read();
    Keyboard.write(key);
  }
}

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.