Le code: #define ligne_0 2 #define ligne_1 3 #define ligne_2 4 #define ligne_3 5 #define colonne_0 8 #define colonne_1 9 #define colonne_2 10 #define colonne_3 11 void setup() { // put your setup code here, to run once: // Initialise le port série Serial.begin(9600); // On configure les lignes en sorties pinMode(ligne_0, OUTPUT); pinMode(ligne_1, OUTPUT); pinMode(ligne_2, OUTPUT); pinMode(ligne_3, OUTPUT); // On configure les colonnes en entrées avec pull-up pinMode(colonne_0, INPUT_PULLUP); pinMode(colonne_1, INPUT_PULLUP); pinMode(colonne_2, INPUT_PULLUP); pinMode(colonne_3, INPUT_PULLUP); } void loop() { // put your main code here, to run repeatedly: int etat_colonne_0 = HIGH; int etat_colonne_1 = HIGH; int etat_colonne_2 = HIGH; int etat_colonne_3 = HIGH; // On met la ligne 0 à 0V et les autres au 5V digitalWrite(ligne_0, LOW); digitalWrite(ligne_1, HIGH); digitalWrite(ligne_2, HIGH); digitalWrite(ligne_3, HIGH); // On recupère l'état des colonnes etat_colonne_0 = digitalRead(colonne_0); etat_colonne_1 = digitalRead(colonne_1); etat_colonne_2 = digitalRead(colonne_2); etat_colonne_3 = digitalRead(colonne_3); // Si on a la colonne 0 à LOW, c'est que le bouton 1 est pressé if(etat_colonne_0 == LOW) { envoie_bouton_presse_sur_port_serie('1'); } // Si on a la colonne 1 à LOW, c'est que le bouton 2 est pressé if(etat_colonne_1 == LOW) { envoie_bouton_presse_sur_port_serie('2'); } // Si on a la colonne 2 à LOW, c'est que le bouton 3 est pressé if(etat_colonne_2 == LOW) { envoie_bouton_presse_sur_port_serie('3'); } // Si on a la colonne 3 à LOW, c'est que le bouton A est pressé if(etat_colonne_3 == LOW) { envoie_bouton_presse_sur_port_serie('A'); } // On met la ligne 1 à 0V et les autres au 5V digitalWrite(ligne_0, HIGH); digitalWrite(ligne_1, LOW); digitalWrite(ligne_2, HIGH); digitalWrite(ligne_3, HIGH); // On recupère l'état des colonnes etat_colonne_0 = digitalRead(colonne_0); etat_colonne_1 = digitalRead(colonne_1); etat_colonne_2 = digitalRead(colonne_2); etat_colonne_3 = digitalRead(colonne_3); // Si on a la colonne 0 à LOW, c'est que le bouton 4 est pressé if(etat_colonne_0 == LOW) { envoie_bouton_presse_sur_port_serie('4'); } // Si on a la colonne 1 à LOW, c'est que le bouton 5 est pressé if(etat_colonne_1 == LOW) { envoie_bouton_presse_sur_port_serie('5'); } // Si on a la colonne 2 à LOW, c'est que le bouton 6 est pressé if(etat_colonne_2 == LOW) { envoie_bouton_presse_sur_port_serie('6'); } // Si on a la colonne 3 à LOW, c'est que le bouton B est pressé if(etat_colonne_3 == LOW) { envoie_bouton_presse_sur_port_serie('B'); } // On met la ligne 2 à 0V et les autres au 5V digitalWrite(ligne_0, HIGH); digitalWrite(ligne_1, HIGH); digitalWrite(ligne_2, LOW); digitalWrite(ligne_3, HIGH); // On recupère l'état des colonnes etat_colonne_0 = digitalRead(colonne_0); etat_colonne_1 = digitalRead(colonne_1); etat_colonne_2 = digitalRead(colonne_2); etat_colonne_3 = digitalRead(colonne_3); // Si on a la colonne 0 à LOW, c'est que le bouton 7 est pressé if(etat_colonne_0 == LOW) { envoie_bouton_presse_sur_port_serie('7'); } // Si on a la colonne 1 à LOW, c'est que le bouton 8 est pressé if(etat_colonne_1 == LOW) { envoie_bouton_presse_sur_port_serie('8'); } // Si on a la colonne 2 à LOW, c'est que le bouton 9 est pressé if(etat_colonne_2 == LOW) { envoie_bouton_presse_sur_port_serie('9'); } // Si on a la colonne 3 à LOW, c'est que le bouton C est pressé if(etat_colonne_3 == LOW) { envoie_bouton_presse_sur_port_serie('C'); } // On met la ligne 3 à 0V et les autres au 5V digitalWrite(ligne_0, HIGH); digitalWrite(ligne_1, HIGH); digitalWrite(ligne_2, HIGH); digitalWrite(ligne_3, LOW); // On recupère l'état des colonnes etat_colonne_0 = digitalRead(colonne_0); etat_colonne_1 = digitalRead(colonne_1); etat_colonne_2 = digitalRead(colonne_2); etat_colonne_3 = digitalRead(colonne_3); // Si on a la colonne 0 à LOW, c'est que le bouton * est pressé if(etat_colonne_0 == LOW) { envoie_bouton_presse_sur_port_serie('*'); } // Si on a la colonne 1 à LOW, c'est que le bouton 0 est pressé if(etat_colonne_1 == LOW) { envoie_bouton_presse_sur_port_serie('0'); } // Si on a la colonne 2 à LOW, c'est que le bouton # est pressé if(etat_colonne_2 == LOW) { envoie_bouton_presse_sur_port_serie('#'); } // Si on a la colonne 3 à LOW, c'est que le bouton D est pressé if(etat_colonne_3 == LOW) { envoie_bouton_presse_sur_port_serie('D'); } } void envoie_bouton_presse_sur_port_serie(char bouton_caractere) { Serial.print("Le bouton "); Serial.print(bouton_caractere); Serial.println(" est pressé"); Serial.println(""); }
je suggère un code de ce style pour t'éviter des lignes : int lignes[4] = {22, 23, 24, 25}; int colonnes[4] = {26, 27, 28, 29}; char keypad[4][4] { '1', '2', '3', 'A', '4', '5', '6', 'B', '7', '8', '9', 'C', '*', '0', '#', 'D', }; int tempsact; int tempsdep; void setup() { // put your setup code here, to run once: for (int i = 0; i
@@Edgardal2008 , bonjour j'ai un pb, avec 3 colonnes et 4 lignes , votre codage nickel sauf pour la ligne 1 'S', 'key_left_ctrl_A', 'key_left_shift_A', ne fonctionne pas alors que 'L', 'key_left_ctrl_T', 'key_left_shift_T', 'key_left_alt_R', 'key_left_ctrl_B', 'key_left_shift_B', 'key_left_shift_L', 'key_left_ctrl_E', 'key_left_shift_E', nickel merci d'avance pour votre retour
Enfin ! vous avez répondu de belle façon à mon interrogation. J'ai passé des heures et des heures pour trouver une explication claire et surtout complète. Je vais donc pouvoir m'attaquer à mon projet de boîte de boutons pour gaming avec beaucoup plus d'assurance. La boîte que j'envisage aura 67 boutons, 12 LED 3 mm, un potentiomètre rotatif, un potentiomètre à glissière, un joysticks 4 axes et un thumb joysticks et une mini-switch pour changer la fonctionnalité du thumb joysticks. Seuls les boutons et LED seront dans une configuration matrix 8 lignes x 10 colonnes. Tous les autres composants seront sur des GPIO distincts. Je vais utiliser le micro-processeur TeesyMD 2.0. La dimension du panneau sera de 320 x 250 mm.
@@christmorg3599 Je ne peux pas poursuivre mon projet. Suite à un problème oculaire, j'ai dû subir une chirurgie et la conséquence a été de me faire perdre ma capacité de voir en trois dimension. Je ne peux plus souder et voir les tous petits connecteurs sauf si j'utiliser une très bonne loupe mais très peu pratique. Si vous voulez réaliser ce projet, faites une recherche comme " Buttons box" or How to build a button box. Dans les vidéos que j'ai trouvé, ils expliquent bien le montage et donnent aussi le code sous-jacent. Il rest à modifier ce code pour l'adapter à votre projet. C'est dommange parce que tout était prêt pour la réalisation. Mon schéma de la disposition des boutons, le plan de perçage des trous et tous le matériel requis, fils, boutons, joysticks, potentiomètres etc. Je vous souhaite bonne chance dans la réalisation de votre projet.
bonjour, merci pour votre tuto, j essai d'adapter ce code à un control panel 56 boutons, y a t il possibilité de limiter le temps de pression d un bouton, car j ai des poussoirs momentanés, mais aussi des poussoirs bloquants
@@christmorg3599 oui : hors void : int tempsactuel; int tempsdepart; void setup : tempsdepart=millis(); au début de la void loop : tempsactuel=millis(); dans la boucle de test : if (digitalRead(nomdubouton)==LOW) { if (tempsactuel-tempsdepart=tempsvouluenmillisecondes) { actionsvoulues; tempsdep=tempsact; } } avec ça tout fonctionne.
Bonjour Comment faire un branchement clavier et ecran LCD sur l'arduino? J'ai regardé vos deux vidéos et les branchement se chavocherais ou alors on peut les brancher ailleurs?
bonjour, tres bonne vidéo. par contre juste une petite remarque on ne doit pas forcement avoir 2 fils par bouton ils peut tres bien avoir un fils commun. donc un fils en plus du nombre de boutons mais il est vrai qu'en matrice ça n'a pas son pareil
Le code:
#define ligne_0 2
#define ligne_1 3
#define ligne_2 4
#define ligne_3 5
#define colonne_0 8
#define colonne_1 9
#define colonne_2 10
#define colonne_3 11
void setup() {
// put your setup code here, to run once:
// Initialise le port série
Serial.begin(9600);
// On configure les lignes en sorties
pinMode(ligne_0, OUTPUT);
pinMode(ligne_1, OUTPUT);
pinMode(ligne_2, OUTPUT);
pinMode(ligne_3, OUTPUT);
// On configure les colonnes en entrées avec pull-up
pinMode(colonne_0, INPUT_PULLUP);
pinMode(colonne_1, INPUT_PULLUP);
pinMode(colonne_2, INPUT_PULLUP);
pinMode(colonne_3, INPUT_PULLUP);
}
void loop() {
// put your main code here, to run repeatedly:
int etat_colonne_0 = HIGH;
int etat_colonne_1 = HIGH;
int etat_colonne_2 = HIGH;
int etat_colonne_3 = HIGH;
// On met la ligne 0 à 0V et les autres au 5V
digitalWrite(ligne_0, LOW);
digitalWrite(ligne_1, HIGH);
digitalWrite(ligne_2, HIGH);
digitalWrite(ligne_3, HIGH);
// On recupère l'état des colonnes
etat_colonne_0 = digitalRead(colonne_0);
etat_colonne_1 = digitalRead(colonne_1);
etat_colonne_2 = digitalRead(colonne_2);
etat_colonne_3 = digitalRead(colonne_3);
// Si on a la colonne 0 à LOW, c'est que le bouton 1 est pressé
if(etat_colonne_0 == LOW) {
envoie_bouton_presse_sur_port_serie('1');
}
// Si on a la colonne 1 à LOW, c'est que le bouton 2 est pressé
if(etat_colonne_1 == LOW) {
envoie_bouton_presse_sur_port_serie('2');
}
// Si on a la colonne 2 à LOW, c'est que le bouton 3 est pressé
if(etat_colonne_2 == LOW) {
envoie_bouton_presse_sur_port_serie('3');
}
// Si on a la colonne 3 à LOW, c'est que le bouton A est pressé
if(etat_colonne_3 == LOW) {
envoie_bouton_presse_sur_port_serie('A');
}
// On met la ligne 1 à 0V et les autres au 5V
digitalWrite(ligne_0, HIGH);
digitalWrite(ligne_1, LOW);
digitalWrite(ligne_2, HIGH);
digitalWrite(ligne_3, HIGH);
// On recupère l'état des colonnes
etat_colonne_0 = digitalRead(colonne_0);
etat_colonne_1 = digitalRead(colonne_1);
etat_colonne_2 = digitalRead(colonne_2);
etat_colonne_3 = digitalRead(colonne_3);
// Si on a la colonne 0 à LOW, c'est que le bouton 4 est pressé
if(etat_colonne_0 == LOW) {
envoie_bouton_presse_sur_port_serie('4');
}
// Si on a la colonne 1 à LOW, c'est que le bouton 5 est pressé
if(etat_colonne_1 == LOW) {
envoie_bouton_presse_sur_port_serie('5');
}
// Si on a la colonne 2 à LOW, c'est que le bouton 6 est pressé
if(etat_colonne_2 == LOW) {
envoie_bouton_presse_sur_port_serie('6');
}
// Si on a la colonne 3 à LOW, c'est que le bouton B est pressé
if(etat_colonne_3 == LOW) {
envoie_bouton_presse_sur_port_serie('B');
}
// On met la ligne 2 à 0V et les autres au 5V
digitalWrite(ligne_0, HIGH);
digitalWrite(ligne_1, HIGH);
digitalWrite(ligne_2, LOW);
digitalWrite(ligne_3, HIGH);
// On recupère l'état des colonnes
etat_colonne_0 = digitalRead(colonne_0);
etat_colonne_1 = digitalRead(colonne_1);
etat_colonne_2 = digitalRead(colonne_2);
etat_colonne_3 = digitalRead(colonne_3);
// Si on a la colonne 0 à LOW, c'est que le bouton 7 est pressé
if(etat_colonne_0 == LOW) {
envoie_bouton_presse_sur_port_serie('7');
}
// Si on a la colonne 1 à LOW, c'est que le bouton 8 est pressé
if(etat_colonne_1 == LOW) {
envoie_bouton_presse_sur_port_serie('8');
}
// Si on a la colonne 2 à LOW, c'est que le bouton 9 est pressé
if(etat_colonne_2 == LOW) {
envoie_bouton_presse_sur_port_serie('9');
}
// Si on a la colonne 3 à LOW, c'est que le bouton C est pressé
if(etat_colonne_3 == LOW) {
envoie_bouton_presse_sur_port_serie('C');
}
// On met la ligne 3 à 0V et les autres au 5V
digitalWrite(ligne_0, HIGH);
digitalWrite(ligne_1, HIGH);
digitalWrite(ligne_2, HIGH);
digitalWrite(ligne_3, LOW);
// On recupère l'état des colonnes
etat_colonne_0 = digitalRead(colonne_0);
etat_colonne_1 = digitalRead(colonne_1);
etat_colonne_2 = digitalRead(colonne_2);
etat_colonne_3 = digitalRead(colonne_3);
// Si on a la colonne 0 à LOW, c'est que le bouton * est pressé
if(etat_colonne_0 == LOW) {
envoie_bouton_presse_sur_port_serie('*');
}
// Si on a la colonne 1 à LOW, c'est que le bouton 0 est pressé
if(etat_colonne_1 == LOW) {
envoie_bouton_presse_sur_port_serie('0');
}
// Si on a la colonne 2 à LOW, c'est que le bouton # est pressé
if(etat_colonne_2 == LOW) {
envoie_bouton_presse_sur_port_serie('#');
}
// Si on a la colonne 3 à LOW, c'est que le bouton D est pressé
if(etat_colonne_3 == LOW) {
envoie_bouton_presse_sur_port_serie('D');
}
}
void envoie_bouton_presse_sur_port_serie(char bouton_caractere) {
Serial.print("Le bouton ");
Serial.print(bouton_caractere);
Serial.println(" est pressé");
Serial.println("");
}
Interessant
je suggère un code de ce style pour t'éviter des lignes :
int lignes[4] = {22, 23, 24, 25};
int colonnes[4] = {26, 27, 28, 29};
char keypad[4][4] {
'1', '2', '3', 'A',
'4', '5', '6', 'B',
'7', '8', '9', 'C',
'*', '0', '#', 'D',
};
int tempsact;
int tempsdep;
void setup() {
// put your setup code here, to run once:
for (int i = 0; i
@@Edgardal2008 , bonjour j'ai un pb, avec 3 colonnes et 4 lignes , votre codage nickel sauf pour la ligne 1
'S', 'key_left_ctrl_A', 'key_left_shift_A', ne fonctionne pas alors que
'L', 'key_left_ctrl_T', 'key_left_shift_T',
'key_left_alt_R', 'key_left_ctrl_B', 'key_left_shift_B',
'key_left_shift_L', 'key_left_ctrl_E', 'key_left_shift_E', nickel
merci d'avance pour votre retour
Un très très grand merci. Depuis le temps que je cherchais. Tout est clair et ça fonctionne du premier coup
Excellente vidéo, c'est très clair, aucune digression, c'est rapide. Merci beaucoup !
Enfin ! vous avez répondu de belle façon à mon interrogation. J'ai passé des heures et des heures pour trouver une explication claire et surtout complète. Je vais donc pouvoir m'attaquer à mon projet de boîte de boutons pour gaming avec beaucoup plus d'assurance. La boîte que j'envisage aura 67 boutons, 12 LED 3 mm, un potentiomètre rotatif, un potentiomètre à glissière, un joysticks 4 axes et un thumb joysticks et une mini-switch pour changer la fonctionnalité du thumb joysticks. Seuls les boutons et LED seront dans une configuration matrix 8 lignes x 10 colonnes. Tous les autres composants seront sur des GPIO distincts. Je vais utiliser le micro-processeur TeesyMD 2.0. La dimension du panneau sera de 320 x 250 mm.
Moi je veux le code pour effacer le dernier chiffre avec ce même programme
bonjour, je suis entrain de demarrer le meme genre de projet, et n ayant aucune base , je recherche une aide pour adapter cette base au projet
@@christmorg3599 Je ne peux pas poursuivre mon projet. Suite à un problème oculaire, j'ai dû subir une chirurgie et la conséquence a été de me faire perdre ma capacité de voir en trois dimension. Je ne peux plus souder et voir les tous petits connecteurs sauf si j'utiliser une très bonne loupe mais très peu pratique.
Si vous voulez réaliser ce projet, faites une recherche comme " Buttons box" or How to build a button box. Dans les vidéos que j'ai trouvé, ils expliquent bien le montage et donnent aussi le code sous-jacent. Il rest à modifier ce code pour l'adapter à votre projet.
C'est dommange parce que tout était prêt pour la réalisation. Mon schéma de la disposition des boutons, le plan de perçage des trous et tous le matériel requis, fils, boutons, joysticks, potentiomètres etc.
Je vous souhaite bonne chance dans la réalisation de votre projet.
Merci pour ces explications SIMPLES, CLAIRES, COMPLETES ET PRECISES !!! :-) :-) :-)
Merciii beaucoup ! c'est trés bien expliqué .. Au revoir et à bientôt ..
je trouve les explications très claire
merci pour l'explication simple et claire .
Bonjour, super vidéo merci très clair, pour dire que c'est une touche raccourci clavier, par exemple " CTRL + L" ou "SHIFT +A" quelle est le code svp
Un commentaire et un pouce bleu ?
bonjour, merci pour votre tuto, j essai d'adapter ce code à un control panel 56 boutons, y a t il possibilité de limiter le temps de pression d un bouton, car j ai des poussoirs momentanés, mais aussi des poussoirs bloquants
@@christmorg3599 oui :
hors void :
int tempsactuel;
int tempsdepart;
void setup :
tempsdepart=millis();
au début de la void loop :
tempsactuel=millis();
dans la boucle de test :
if (digitalRead(nomdubouton)==LOW)
{
if (tempsactuel-tempsdepart=tempsvouluenmillisecondes)
{
actionsvoulues;
tempsdep=tempsact;
}
}
avec ça tout fonctionne.
Bonjour
Comment faire un branchement clavier et ecran LCD sur l'arduino? J'ai regardé vos deux vidéos et les branchement se chavocherais ou alors on peut les brancher ailleurs?
Salut. J ai vu des vidéos où l on branche directement le keypad (sans résistances) à l'arduino..est ce correct ? merci
oui c’est possible en programmant larduino pour envoyer le courant moins fort sa demande une programmation supplémentaire mais à ne pas faire sans
bonjour, je me demande pourquoi sa me met sa :
'colonne_0' was not declared in this scope
J'ai le même probléme
utilise int
Bonjour, quelle est la valeur des resistances s'il vous plait
100 ohm ça marche
C'est possible d'avoir directement le programme
Je viens de le mettre dans le commentaire épinglé.
c génial mais pourais tu mettre le code Arduino dans la description
bonjour, tres bonne vidéo. par contre juste une petite remarque on ne doit pas forcement avoir 2 fils par bouton ils peut tres bien avoir un fils commun. donc un fils en plus du nombre de boutons mais il est vrai qu'en matrice ça n'a pas son pareil
faut il une librairie?
non
il y as moyen de faire plus rapide avec 2 boucles FOR imbriquer
good job