Dans cette première vidéo sur le clavier 16 boutons avec Arduino, on voit comment il fonctionne et comment le connecter à un Arduino uno. On va également faire un programme permettant de connaitre les boutons pressés.
Опубликовано:
13 авг 2019
Поделиться:
Ссылка:
Скачать:
Готовим ссылку...
Добавить в:
Мой плейлист
Посмотреть позже
Комментарии : 34
3 года назад
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 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
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.