DRO Clavier matriciel pour Arduino

  • Auteur de la discussion gaston83
  • Date de début
V
vibram
Compagnon
15 Mar 2014
3 876
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
 
gaston83
gaston83
Compagnon
17 Fev 2016
1 432
FR-71520
  • Auteur de la discussion
  • #3
Ok, mais il y a 20 touches pour 9 sorties... :7grat: y aurait-il une histoire de multiplexeur et démultiplexeur là-dessous ?
 
gaston83
gaston83
Compagnon
17 Fev 2016
1 432
FR-71520
  • Auteur de la discussion
  • #4
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:
 
gaston83
gaston83
Compagnon
17 Fev 2016
1 432
FR-71520
  • Auteur de la discussion
  • #6
Merci...
 
gaston83
gaston83
Compagnon
17 Fev 2016
1 432
FR-71520
  • Auteur de la discussion
  • #7
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"
}
}
 
gaston83
gaston83
Compagnon
17 Fev 2016
1 432
FR-71520
  • Auteur de la discussion
  • #8
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"
}
}
 
totoche974
totoche974
Ouvrier
14 Mar 2015
383
st gilles les hauts
bonjour Gaston

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

++
GC
 
gaston83
gaston83
Compagnon
17 Fev 2016
1 432
FR-71520
  • Auteur de la discussion
  • #10
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:
 
totoche974
totoche974
Ouvrier
14 Mar 2015
383
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
 
totoche974
totoche974
Ouvrier
14 Mar 2015
383
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
 
gaston83
gaston83
Compagnon
17 Fev 2016
1 432
FR-71520
  • Auteur de la discussion
  • #14
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:
totoche974
totoche974
Ouvrier
14 Mar 2015
383
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
 
Haut