DRO Clavier matriciel pour Arduino

  • Auteur de la discussion gaston83
  • Date de début
V

vibram

Compagnon
15 Mar 2014
5 315
FR-74
tu branches ca sur les pins digital (je crois D1 à D13 sur un uno) et apres c'est dans le soft, il faut que tu utilises la librairie qui va bien (keypad.h de memoire ?) puis que tu assignes les bons ports
 
G

gaston83

Compagnon
17 Fev 2016
2 248
FR-83310
Ok, mais il y a 20 touches pour 9 sorties... :7grat: y aurait-il une histoire de multiplexeur et démultiplexeur là-dessous ?
 
G

gaston83

Compagnon
17 Fev 2016
2 248
FR-83310
Ok, mais il y a 20 touches pour 9 sorties... :7grat: y aurait-il une histoire de multiplexeur et démultiplexeur là-dessous ?

Quand je vous dis que ma neurone est fatiguée...

En fait il y a 5 lignes et 4 colonnes.... simplement :spamafote:
 
  • Réagir
Reactions: vibram
F

fauxjetons

Compagnon
25 Août 2011
2 502
33220 Aquitaine
salut
j ai choisie ce clavier 4 x 5 pour avoir plus de touches #12
avec le 4x4 on peux avoir de touche en multifonction
a plus


536b7b1ab339.jpg


ut.jpg
 
  • Réagir
Reactions: RacingMat
G

gaston83

Compagnon
17 Fev 2016
2 248
FR-83310
Bonjour à tous,
Je suis toujours sur mon projet d'une télécommande pour MACH3.

J'avance petit à petit... j'ai récupéré ce code sur le net et je l'ai modifié pour mon clavier (post au dessus) de 5 lignes et 4 colonnes.

J'aimerais activer les touches CTRL ou SHIFT ou ALT avec une autre touche (pat exemple "j" en même temps.

Le code:

#include <Keypad.h>
#include <Keyboard.h>
#include <HID.h>

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

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

byte rowPins[ROWS] = {9, 8, 7, 6, 5}; //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 setup(){
}

void loop(){

char key = keypad.getKey();

switch(key){

case 'U': Keyboard.write(KEY_TAB);

case 'L': Keyboard.write(KEY_LEFT_ARROW); // "Left"
case 'H': Keyboard.write(KEY_DOWN_ARROW); // "Down"
case 'I': Keyboard.write(KEY_LEFT_SHIFT);
case 'B': Keyboard.write(KEY_UP_ARROW); // "Up"
case 'R': Keyboard.write(KEY_RIGHT_ARROW); // "Right"
}
}
 
G

gaston83

Compagnon
17 Fev 2016
2 248
FR-83310
Sur un PC avec Mach3, en position de saut, lorsqu'on presse la touche SHIFT_LEFT ou RIGHT et une touche de déplacement (← →) le déplacement est en continu.

J'ai fait une modif... j'ai rajouté un bouton sec entre la pin 2 et la masse qui simule l'appui de SHIFT_LEFT ... j'ai constaté que lorsque j'appui sur le bouton (donc le shift gauche) et que j'appui sur une des touches de déplacement du clavier relié au PC (flèche gauche ou droite) le déplacement se fait en continu. Lorsqu'on relâche le touche SHIFT_LEFT, le déplacement se fait par saut à chaque appui sur une des flèches.

Je fais la même manip avec le clavier déporté et le bouton sec... et ça ne fonctionne pas. J'ai toujours le déplacement par saut à chaque appui mais pas le continu.

le code:

#include <Keypad.h>
#include <Keyboard.h>
#include <HID.h>

void setup() {
{
pinMode (2, INPUT_PULLUP);
}
}

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

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

byte rowPins[ROWS] = {9, 8, 7, 6, 5}; //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() {

Keyboard.begin();
if (digitalRead(2) == LOW) {
{
Keyboard.press(KEY_LEFT_SHIFT);
delay(50);
Keyboard.releaseAll();
}
}


char key = keypad.getKey();

switch (key) {

case 'U': Keyboard.write(KEY_TAB);

case 'L': Keyboard.write(KEY_LEFT_ARROW); break; // "Left"
case 'H': Keyboard.write(KEY_DOWN_ARROW); break; // "Down"
case 'B': Keyboard.write(KEY_UP_ARROW); break; // "Up"
case 'R': Keyboard.write(KEY_RIGHT_ARROW); break; // "Right"
}
}
 
T

totoche974

Ouvrier
14 Mar 2015
438
st gilles les hauts
bonjour Gaston

est tu toujours sur ton projet de télécommande mach3 ??

++
GC
 
G

gaston83

Compagnon
17 Fev 2016
2 248
FR-83310
Oui, mais pas trop eu le temps de m'y replonger. C'est toujours derrière l'oreille... J'ai fait le boitier y a plus qu'a le remplir... :chupachupz:
 
T

totoche974

Ouvrier
14 Mar 2015
438
st gilles les hauts
ok pas de prob, si tu replonge, fait moi signe :jar_jar:
j'ai avancé avancé sur le code mais pas sur le boitier

++
GC
 
T

totoche974

Ouvrier
14 Mar 2015
438
st gilles les hauts
salut

j'ai avancé dans le PCB il me reste plus qu'à faire l’alimentation du circuit
pour cela je vais utiliser 1 ou 2 lipo 1860 de 3.5amp

apparemment le code à l'air de marcher, il demande une vérife complète
y va falloir que je me remettre sur l'arduino

j'utilise Sprint-Layout 6.0 pour le PCB et la génération des gerbers et Flatcam pour la gravure

++
gilles
 
G

gaston83

Compagnon
17 Fev 2016
2 248
FR-83310
Voilà le code...

/*---------------------------------------------------------------------------------------
'* jpbbricole 2019 03 13
'* modifié gaston 83 (ajout du bouton sur pin 5)
et l'aide de speedf37
*/

#include <Encoder.h> // Gestion bouton rotatif
#include <Key.h>
#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

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

void setup() {
pinMode (2, INPUT_PULLUP); // CTRL bouton pour la manivelle
pinMode (A5, INPUT_PULLUP); // ALT Left boutnon (ALT-1, 2, 3)
pinMode (3, INPUT_PULLUP); // avance X gauche clavier déporté
pinMode (4, INPUT_PULLUP); // avance X droite clavier déporté
Keyboard.begin();
}
const byte ROWS = 5; //cinq lignes
const byte COLS = 4; //quatre colennes

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] = {9, 8, 7, 6, 5}; //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':
{
//Keyboard.press (KEY_LEFT_SHIFT); // Entrée
delay(100);
Keyboard.press (KEY_RETURN); Keyboard.release (KEY_RETURN);
Keyboard.releaseAll();
}
break;

case'1':

{
while (digitalRead(2) == LOW) // boucle pour garder le Ctrl appuyé
{
Keyboard.press (KEY_LEFT_ALT); // Automatique ALT-1
delay(100);
Keyboard.press (49); Keyboard.release (49);
Keyboard.releaseAll();
}
}
{
Keyboard.press (225);
Keyboard.release (225);
}
break;


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

{
Keyboard.press (226); // 2 du clavier
Keyboard.release (226);
}
break;

case '3':
Keyboard.press (227);
Keyboard.release (227);
break;

case '4':
Keyboard.press (228);
Keyboard.release (228);
break;

case '5':
Keyboard.press (229);
Keyboard.release (229);
break;

case '6':
Keyboard.press (230);
Keyboard.release (230);
break;

case '7':
Keyboard.press (231);
Keyboard.release (231);
break;

case '8':
Keyboard.press (232);
Keyboard.release (232);
break;

case '9':
Keyboard.press (233);
Keyboard.release (233);
break;

case 'I': // Tab horizontal
Keyboard.write(KEY_TAB);
break;

case 'U': // Départ cycle
{
Keyboard.press (KEY_LEFT_ALT);
delay(100);
Keyboard.press (114); Keyboard.release (114);
Keyboard.releaseAll();
}
break;

case '0':
{
while (digitalRead(2) == LOW) // boucle pour garder le Ctrl appuyé

{
Keyboard.press(KEY_LEFT_CTRL); // remise à zéro des axes X et Y
delay(100);
Keyboard.press(79); Keyboard.release(79);
Keyboard.releaseAll();
}
}
{
Keyboard.press (234);
Keyboard.release (234);
}
break;

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

case 'B': Keyboard.write(KEY_DOWN_ARROW); break; // "Déplacement Bas"
case 'H': Keyboard.write(KEY_UP_ARROW); break; // "Déplacement Haut"

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

case '#': { // Manuel / Automatique
Keyboard.press(KEY_LEFT_CTRL);
delay(100);
Keyboard.press(KEY_LEFT_ALT);
delay(100);
Keyboard.press('j');
delay(100);
Keyboard.releaseAll();
}
break;

case '*':
{
while (digitalRead(2) == LOW)
{
Keyboard.press (8); // étoile du clavier matriciel pour le Backspace
Keyboard.release (8);
}
{
Keyboard.press(KEY_LEFT_ALT);
delay(100);
Keyboard.press('j');
delay(100);
Keyboard.releaseAll();
}
}

break;
/* { // Changement de saut
Keyboard.press(KEY_LEFT_ALT);
delay(100);
Keyboard.press('j');
delay(100);
Keyboard.releaseAll();
}


*/break;

case 'C': { // Passage Continu / Saut

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

// initialisation codeur

codRotIncrement = codRot.read() / 4; // Divisé par 4 parcequ chaque impulsion ressentie en tournant le bouton
// Génère 4 impulsions (https://wiki.logre.eu/index.php/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(KEY_LEFT_ARROW);
delay(50);
Keyboard.releaseAll();
}
}
}

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

// fin du prog
 
Dernière édition par un modérateur:
T

totoche974

Ouvrier
14 Mar 2015
438
st gilles les hauts
tu te sert d'un clavier matriciel 20 touches ou tu crée ton propre clavier ?

la fonction du codeur rotatif ? il te sert à basculer KEY_LEFT_CTRL et KEY_RIGHT_ARROW , :smt017

pour le proc tu utilise lequel 328P ou 32U4 ?

ca en fait des questions :-D

++
gilles
 
G

gaston83

Compagnon
17 Fev 2016
2 248
FR-83310
tu te sert d'un clavier matriciel 20 touches ou tu crée ton propre clavier ?

c'est celui là dans le post #5

la fonction du codeur rotatif ? il te sert à basculer KEY_LEFT_CTRL et KEY_RIGHT_ARROW

non, j'ai mis un codeur rotatif pour simuler la manivelle . Et là, je bouge le X
IMG_20200325_152458[1].jpg


pour le proc tu utilise lequel 328P ou 32U4


J'utilise directement une Leonardo. Elle fait à la fois interface USB et programmateur. Dessus il y a un 32U4
 
G

gaston83

Compagnon
17 Fev 2016
2 248
FR-83310
Et là, je suis entrain de m'engadcer avec ça... impossible d'écrire ce foutu "-" ...:mad: il me met ')' à la place

case '7':
{
while (digitalRead(2) == LOW) // boucle pour garder le Ctrl appuyé
{
delay(50);
Keyboard.write ('-');
Keyboard.release ('-');
delay (1000);
}
}
{
Keyboard.press (231); // chiffre 7
Keyboard.release (231);
}
break;
 
T

totoche974

Ouvrier
14 Mar 2015
438
st gilles les hauts
essayer en mettant son code ascii "Alt+ 045 " ou "&#45; "
 
G

gaston83

Compagnon
17 Fev 2016
2 248
FR-83310
he bien, ça ne marche pas.... Par dépis, j'ai fait tout les codes .... je suis parti de 1 et je suis arrivé à 54 ... et ça marche. Je n'y comprends strictement rien car ce code ne correspond pas du tout au "-".. :7grat: :smt013 :hang:

case '7':
{
while (digitalRead(2) == LOW) // boucle pour garder le Ctrl appuyé
{
delay(50);
Keyboard.press(54); //signe "-"
delay(50);
Keyboard.release (54);
delay (1000);
}
}
{
Keyboard.press (231); // chiffre 7
Keyboard.release (231);
}
break;
 
G

gaston83

Compagnon
17 Fev 2016
2 248
FR-83310
... et c'est pareil pour le chiffre 7... pfffffff, tu fais ALT+231 et tu as la surprise du soir :shock:

et comme je veux pas en rester là, je pose la question à la communauté Arduino ... :lol:
 
G

gaston83

Compagnon
17 Fev 2016
2 248
FR-83310
... et c'est parti pour un autre tour.... je cherche le Z maintenant.... c'est extraordinaire !
 
T

totoche974

Ouvrier
14 Mar 2015
438
st gilles les hauts
//TestSerialread.ino
void setup() {
Serial.begin(9600);
}
char codeRecu ;
void loop () {
if (Serial.available() > 0) {
codeRecu = Serial.read();
Serial.print ("J’ai tape: "); Serial.print (codeRecu);
Serial.print (" "); Serial.print (codeRecu,DEC);
Serial.print (" = 0x"); Serial.print (codeRecu,HEX);
Serial.println ();
}
}

resultat
J’ai tape: - 45 = 0x2D
J’ai tape: z 122 = 0x7A
J’ai tape: f 102 = 0x66

test ca à part pour trouver tes codes en hexa et decimal
pour ton " - " il est declarer ou dans ton programme

ya un cpu qui est bien pour cela c'est le teensy ++2
plus d'entrées + rapide
pour la gestion du clavier il serais plus judicieux d'utilise un SX1509
il gere les claviers matriciel, rebond et le scan
cela ferais moins de code à gérer
 
G

gaston83

Compagnon
17 Fev 2016
2 248
FR-83310
Bonjour,

Hé ben, non... ça ne fonctionne pas. Je me suis aperçu que non seulement le scan code n'est pas bon et qu'en plus il faut rajouter 136 pour avoir la correspondance. C'est pas tout... le code correspond au clavier Qwerty

Regardes le lien... à force de fouiller, j'au trouvé ça.


et les codes du vlavier qui eux sont bons. Attention c'est de l'hexa, donc il faut transformer la valeur en décimal puis rajouter 136.

code hexa.PNG
 
T

totoche974

Ouvrier
14 Mar 2015
438
st gilles les hauts
salut
j'étais entrain de chercher un truc de se style il y a une conversion à faire

tu a été plus rapide :smt038 ca y est tu est sur la bonne voie

++
 
G

gaston83

Compagnon
17 Fev 2016
2 248
FR-83310
Bonjour à tous,

Bon, j'avance pas mal sur le code (en pièce jointe) et voilà ce que je pilote (pour l'instant) à partir de mon clavier déporté.. fichier txt que je montre dans le post #16, un peu plus haut.

Maintenant, je voudrais manipuler les axes X,Y et Z avec ma manivelle... que je sélectionnerais avec le sélecteur à droite sur la photo...

Je dois donc remplacer le (KEY_LEFT_ARROW) dans la partie tout en bas "initialisation codeur" par (KEY_UP_ARROW) pour l'axe Y et par les codes 211, 214 pour le Z.

Là, j'ai besoin de vos conseils....


IMG_20200329_141525[1].jpg
 

Fichiers joints

  • disposition clavier déporté.txt
    565 bytes · Affichages: 50
  • clav_case_1200_ter.ino.txt
    12.7 KB · Affichages: 39
G

gaston83

Compagnon
17 Fev 2016
2 248
FR-83310
Bonjour à tous,

Bon, voilà.... j'ai presque pratiquement fini.... :chupachupz: :roxxx: :drinkers: :drinkers: :drinkers: :drinkers: :drinkers: :drinkers: :drinkers: :drinkers: :drinkers: :drinkers:

me reste plus qu'a faire fonctionner l'augmentation et la diminution de l'avance avec F10 et F11....

mais, d'abord, pourquoi ça ne fonctionne pas directement au clavier en appuyant sur les touches ??


C'est bon.... il fallait que je me mette en Continu...
 
Dernière édition:
G

gaston83

Compagnon
17 Fev 2016
2 248
FR-83310
Maintenant, je m'attaque au Bluetooth.... :lol:
 

Sujets similaires

M
Réponses
46
Affichages
27 764
Arduino
Plopiche
Plopiche
wika58
Général Arduino Uno R4
Réponses
17
Affichages
19 902
Arduino
furynick
furynick
wika58
Réponses
261
Affichages
23 701
midodiy
G
Réponses
88
Affichages
16 740
Arduino
gaston83
G
P
Réponses
33
Affichages
20 796
wika58
M4vrick
Réponses
25
Affichages
1 164
Mach
schum22
S
S
Réponses
11
Affichages
1 059
C
G
Réponses
3
Affichages
47 775
Mcar
osiver
Réponses
14
Affichages
40 630
osiver
P
Réponses
20
Affichages
3 274
Arduino
speedjf37
S