En cours Erreur de serial1

  • Auteur de la discussion gaston83
  • Date de début
jpbbricole
jpbbricole
Compagnon
26 Mai 2016
2 204
Corsier-sur-Vevey (Vaud)
Bonjour Gaston
Je présume que ce serait pareil avec des modules Wi Fi...
Ou une ficelle, de même :jesors23:
... que si je place une autre leonardo comme récepteur sur le PC ça peut fonctionner (avec le sketch qui va bien).
Oui, dans ton cas, seul le Leonardo et sa liaison USB au PC peut "transporter" cette émulation du clavier/souris. Je ne sait pas ce que tu utilises comme moyen de commandes au niveau du Leonardo, actuellement, pour imaginer une transmission sans fils.

A+
Cordialement
jpbbricole
 
gaston83
gaston83
Compagnon
17 Fev 2016
1 433
FR-71520
  • Auteur de la discussion
  • #17
Voici une photo du système en état de prototype... sur le bureau.

A gauche, la manivelle (le codeur), au milieu la leonardo et à droite le clavier avec une sérigraphie au crayon pour les fonctions doubles avec un bouton de Ctrl.

Dis-moi ce que tu voudrais d'autre... j'envoie.

IMG_20200413_112445_1[1].jpg


IMG_20200413_112747[1].jpg


IMG_20200413_112445_1[1].jpg


IMG_20200413_112747[1].jpg
 
Dernière édition:
gaston83
gaston83
Compagnon
17 Fev 2016
1 433
FR-71520
  • Auteur de la discussion
  • #19
Le code complet... bon, il y a des lignes qui sont doubles, c'est normal... je me suis fais ch*er avec certaines touches du pavé numériques car quand il n'est pas activé se sont les directions qui le sont. La solution que j'ai trouvé, c'est de doubler les lignes pour ces touches. Après, ça fonctionne ... donc ...


/*---------------------------------------------------------------------------------------
'* jpbbricole 2019 03 13
'* modifié gaston 83 (ajout du bouton Fn sur pin 2)
et l'aide de speedf37
avec la sélection des axes
mouture du 1 avril 2020
*/
#include <Encoder.h> // Gestion bouton rotatif
#include <Keypad.h>
#include <Keyboard.h>
#include <HID.h>

//------------------------------------- Codeur rotatif

#define codRotApin 3 // Pin du port A
#define codRotBpin 4 // Pin du port B

#define X A0 // Sélection Axe
#define Y A1
#define Z A2

const int AXEX = A0;
const int AXEY = A1;
const int AXEZ = A2;
int changeAxe;
int changeAxe1;

Encoder codRot(codRotApin, codRotBpin);
int codRotIncrement = 0; // Direction de l'encodeur +1 ou -1
int compteur = 0;

void setup()
{
pinMode (2, INPUT_PULLUP); // CTRL bouton pour la manivelle
pinMode (3, INPUT_PULLUP); // avance X gauche clavier déporté
pinMode (4, INPUT_PULLUP); // avance X droite clavier déporté
pinMode (AXEX, INPUT_PULLUP);
pinMode (AXEY, INPUT_PULLUP);
pinMode (AXEZ, INPUT_PULLUP);
pinMode (A3, INPUT_PULLUP); // Sélection de l'axe
pinMode (A4, INPUT_PULLUP);
pinMode (A5, INPUT_PULLUP);

Keyboard.begin();

}
const byte ROWS = 5; //cinq lignes
const byte COLS = 4; //quatre colonnes

//char ctrlKey = ('-');
char keys[ROWS][COLS] = {
{'I', 'U', '#', '*'},
{'1', '2', '3', 'H'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'L', '0', 'R', 'E'}
};

byte rowPins[ROWS] = {5, 6, 7, 8, 9}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {13, 12, 11, 10}; //connect to the column pinouts of the keypad

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

void loop() {

char key = keypad.getKey();
switch (key) {

{

case'E': // Entrée
if (digitalRead(2) == LOW)
{
Keyboard.write('F'); // Réglage Avance en Manuel
}
else
{
Keyboard.press (KEY_RETURN); // Entrée
//Keyboard.release (KEY_RETURN);
Keyboard.releaseAll();
}
break;

case'1':
if (digitalRead(2) == LOW) // boucle pour garder le Ctrl appuyé
{
Keyboard.press (KEY_LEFT_ALT); // Visu Automatique ALT-1
delay(100);
Keyboard.press (49); Keyboard.release (49);
Keyboard.releaseAll();
}
Keyboard.write(219);
Keyboard.press (225);
Keyboard.releaseAll ();

Keyboard.write(219);
Keyboard.press (225);
Keyboard.releaseAll ();
break;


case'2':
if (digitalRead(2) == LOW) // boucle pour garder le Ctrl appuyé
{
Keyboard.press (KEY_LEFT_ALT); // Visu Manuel ALT-2
delay(100);
Keyboard.press (50); Keyboard.release (50);
Keyboard.releaseAll();
}
{
Keyboard.write(226); // écrit le ciffre 2
Keyboard.releaseAll ();
}
break;



case '3':
{
while (digitalRead(2) == LOW) // boucle pour garder le shift appuyé
{
{
Keyboard.write(KEY_LEFT_SHIFT); // remontée du Z
delay(20);
Keyboard.write(211);
Keyboard.releaseAll();
}
}
}
{
Keyboard.write (211); // PgUp
Keyboard.write (227); // écrit le chiffre 3
Keyboard.releaseAll();
}
break;


case '4':

if (digitalRead(2) == LOW) // boucle pour garder le Ctrl appuyé

{ Keyboard.write ('X'); // écrit X dans le bandeau manuel
Keyboard.release ('X');
delay (400);
}
else
{
Keyboard.write(228); // écrit le chiffre 4
Keyboard.releaseAll();
}
break;

case '5':
if (digitalRead(2) == LOW) // boucle pour garder le Ctrl appuyé
{
Keyboard.write ('Y'); // écrit Y dans le bandeau manuel
Keyboard.release ('Y');
delay (400);
}
else
{
Keyboard.write(219);
Keyboard.press (229); // écrit le chiffre 5
Keyboard.releaseAll ();

Keyboard.write(219);
Keyboard.press (229); // écrit le chiffre 5
Keyboard.releaseAll ();
}
break;

case '6':
if (digitalRead(2) == LOW) // boucle pour garder le Ctrl appuyé
{
Keyboard.write ('W'); // en fait c'est le Z qui est écrit
Keyboard.release ('W');
delay (400);
}
else
{
Keyboard.press (230); // écrit le chiffre 6
Keyboard.release (230);
}
break;

case '7':

if (digitalRead(2) == LOW) // boucle pour garder le Ctrl appuyé
{
delay(50);
Keyboard.press(54); //signe "-"
delay(50);
Keyboard.release (54);
delay (400);
}
else
{
Keyboard.press (231); // écrit le chiffre 7
Keyboard.releaseAll ();
}
break;

case '8':
if (digitalRead(2) == LOW) // boucle pour garder le Ctrl appuyé
{
delay(50);
Keyboard.press(43); //signe "+"
delay(50);
Keyboard.release (43);
}
else
{
Keyboard.press (232); // écrit le chiffre 8
Keyboard.release (232);
}
break;


case '9':
{
while (digitalRead(2) == LOW) // boucle pour garder le shift appuyé
{
{
Keyboard.write(KEY_LEFT_SHIFT); // descente du Z
delay(20);
Keyboard.write(214);
Keyboard.releaseAll();
}
}
}
{
Keyboard.write(214); // écrit le chiffre 9
Keyboard.press (233); // écrit le chiffre 9
Keyboard.release (233);
}
break;


case 'I': // touche F1 clavier déporté // Tab Affichage panneau de droite
if (digitalRead(2) == LOW)
{
Keyboard.write(KEY_TAB);
}
else
{
Keyboard.press (KEY_LEFT_ALT); // Ouverture du menu fichier Gcode et fermeture
delay(100);
Keyboard.press (102); Keyboard.release (102);
Keyboard.releaseAll();
}
break;


case 'U': // Touche F2 clavier déporté
if (digitalRead(2) == LOW) // Arret/Départ cycle en Automatique
{
Keyboard.press (KEY_LEFT_ALT);
delay(100);
Keyboard.press (158); Keyboard.release (158); // touche S avec ALT Arret
delay(1000);
}
else // Départ cycle en Automatique
{
Keyboard.press (KEY_LEFT_ALT);
delay(100);
Keyboard.press (157); Keyboard.release (157); // touche R avec ALT Départ
break;
}


case '0': // Ctrl O = remise à zéro des axes X et Y
if (digitalRead(2) == LOW) // boucle pour garder le Ctrl appuyé
{
Keyboard.press(KEY_LEFT_CTRL);
delay(100);
Keyboard.press(79); Keyboard.release(79);
Keyboard.releaseAll();
}
else
{
Keyboard.write(219);
Keyboard.press (234); // chiffre 0
Keyboard.release (234);

Keyboard.write(219);
Keyboard.press (234); // chiffre 0
Keyboard.release (234);
}
break;

//************************ Déplacements LEFT-RIGHT et UP-DOWN **************************

case 'L': // "Déplacemnt à Gauche"
{
while (digitalRead(2) == LOW) // boucle pour garder le shift appuyé
{
{
Keyboard.write(KEY_LEFT_SHIFT);
delay(20);
Keyboard.write(KEY_LEFT_ARROW); // flèche de Gauche"
}
}
}
Keyboard.write(KEY_LEFT_ARROW);
break;
Keyboard.releaseAll();


case 'R': // "Déplacement à Droite"
{
while (digitalRead(2) == LOW) // boucle pour garder le shift appuyé
{
{
Keyboard.write(KEY_LEFT_SHIFT);
delay(20);
Keyboard.write(KEY_RIGHT_ARROW); // "Déplacemnt à Droite"
}
}
}
Keyboard.write(KEY_RIGHT_ARROW);
break;
Keyboard.releaseAll();


case 'B': // "Déplacement Bas"
{
while (digitalRead(2) == LOW) // boucle pour garder le shift appuyé
{
{
Keyboard.press(KEY_LEFT_SHIFT);
delay (50);
Keyboard.releaseAll();
}
Keyboard.write(KEY_DOWN_ARROW); // "Déplacemnt vers le bas"
}
}
Keyboard.write(KEY_DOWN_ARROW);
break;

case 'H': // "Déplacement Haut"
{
while (digitalRead(2) == LOW) // boucle pour garder le shift appuyé
{
{
Keyboard.press(KEY_LEFT_SHIFT);
delay (50);
Keyboard.releaseAll();
}
Keyboard.write(KEY_UP_ARROW); // "Déplacemnt vers le haut"
}
}
Keyboard.write(KEY_UP_ARROW);
break;

//******************************************************************************************

case '#': // Manuel / Automatique

if (digitalRead(2) == LOW)
{
Keyboard.press (KEY_LEFT_CTRL); // Début cycle
Keyboard.press(165); // touche W
delay(100);
Keyboard.releaseAll();

Keyboard.press (KEY_LEFT_CTRL);
Keyboard.press(165); // je répète deux fois la fonction
delay(100); // pour qu'elle soit prise en compte
Keyboard.releaseAll(); // Pourquoi ???????
}
else
{
Keyboard.press(KEY_LEFT_CTRL);
delay(100);
Keyboard.press(KEY_LEFT_ALT);
delay(100);
Keyboard.press('j');
delay(100);
Keyboard.releaseAll();
}
break;

case '*':

if (digitalRead(2) == LOW)
{
Keyboard.press (8); // étoile du clavier déporté pour le Backspace
Keyboard.release (8);
delay(100);
}
else
{
Keyboard.press(KEY_LEFT_ALT); // Réglage du saut 1.00, 0.10, 0.01
delay(100);
Keyboard.press('j');
delay(100);
Keyboard.releaseAll();
}


break;

case 'C': // esc du clavier déporté // Passage Continu / Saut

{
Keyboard.press(KEY_LEFT_CTRL);
delay(100);
Keyboard.press('j');
delay(100);
Keyboard.releaseAll();
}
break;
}

//---------------------------- Choix de l'axe -------------------------------


if (digitalRead(AXEX) == LOW)
{
changeAxe = KEY_LEFT_ARROW;
changeAxe1 = KEY_RIGHT_ARROW;
}

if (digitalRead(AXEY) == LOW)
{
changeAxe = KEY_UP_ARROW;
changeAxe1 = KEY_DOWN_ARROW;
}

if (digitalRead(AXEZ) == LOW)
{
changeAxe = (211);
changeAxe1 = (214);
}


// ----------------------- initialisation codeur -----------------------------


codRotIncrement = codRot.read() / 4; // Divisé par 4 parcequ chaque impulsion ressentie en tournant le bouton
// Génère 4 impulsions (https://www.logre.eu/wiki/Codeur_rotatif_incrémental)

if (codRotIncrement != 0) // Changement de MS affiché
{
if (codRotIncrement < 0)
{
Keyboard.begin();
if (digitalRead(2) == LOW)
{
{
Keyboard.press(KEY_LEFT_CTRL);
delay(50);
Keyboard.write (changeAxe);
delay(50);
Keyboard.releaseAll();
}
}
}

if (codRotIncrement > 0)
{
Keyboard.begin();
if (digitalRead(2) == LOW)
{
{
Keyboard.press(KEY_LEFT_CTRL);
delay(50);
Keyboard.write (changeAxe1);
delay(50);
Keyboard.releaseAll();
}
}
}
codRotIncrement = 0; // Remise à Zéro du codeur
codRot.write(0);
}
}

}

// fin du prog
 
gaston83
gaston83
Compagnon
17 Fev 2016
1 433
FR-71520
  • Auteur de la discussion
  • #22
Bonjour à tous,

Le code pour émuler le clavier fonctionne en liaison câble USB. Je vais mettre un second arduino (j'ai un Pro Micro dispo avec une USB native) en réception côté PC avec un autre module Bluetooth.
Je ne vois pas comment faire pour récupérer les commandes du clavier déporté... en terme de programmation. Je dois récupérer des trames, des char, des strings... je ne sais pas.
J'ai besoin d'aide ...
 
Haut