[Arduino] Keypad / clavier 16 boutons avec Arduino. (1/2)

แชร์
ฝัง
  • เผยแพร่เมื่อ 8 ม.ค. 2025

ความคิดเห็น • 35

  •  4 ปีที่แล้ว +15

    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("");
    }

    • @akamel393
      @akamel393 2 ปีที่แล้ว

      Interessant

    • @Edgardal2008
      @Edgardal2008 2 ปีที่แล้ว +3

      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

    • @benoitroche820
      @benoitroche820 ปีที่แล้ว

      @@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

  • @pascal94120ful
    @pascal94120ful ปีที่แล้ว

    Un très très grand merci. Depuis le temps que je cherchais. Tout est clair et ça fonctionne du premier coup

  • @nicolasg7391
    @nicolasg7391 4 ปีที่แล้ว

    Excellente vidéo, c'est très clair, aucune digression, c'est rapide. Merci beaucoup !

  • @allouette401
    @allouette401 4 ปีที่แล้ว

    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.

    • @halissothakadiri3347
      @halissothakadiri3347 4 ปีที่แล้ว

      Moi je veux le code pour effacer le dernier chiffre avec ce même programme

    • @christmorg3599
      @christmorg3599 3 ปีที่แล้ว

      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

    • @allouette401
      @allouette401 3 ปีที่แล้ว +1

      @@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.

  • @gaelsortino8901
    @gaelsortino8901 4 ปีที่แล้ว +3

    Merci pour ces explications SIMPLES, CLAIRES, COMPLETES ET PRECISES !!! :-) :-) :-)

  • @espritcomplexe
    @espritcomplexe ปีที่แล้ว

    Merciii beaucoup ! c'est trés bien expliqué .. Au revoir et à bientôt ..

  • @nicolethugnet3636
    @nicolethugnet3636 5 ปีที่แล้ว +1

    je trouve les explications très claire

  • @kouassihervekoffi3827
    @kouassihervekoffi3827 4 ปีที่แล้ว

    merci pour l'explication simple et claire .

  • @benoitroche820
    @benoitroche820 2 ปีที่แล้ว

    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

  •  4 ปีที่แล้ว +4

    Un commentaire et un pouce bleu ?

    • @christmorg3599
      @christmorg3599 3 ปีที่แล้ว

      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

    • @Edgardal2008
      @Edgardal2008 2 ปีที่แล้ว +2

      @@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.

  • @maxirito36
    @maxirito36 4 ปีที่แล้ว

    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?

  • @technophile01
    @technophile01 4 ปีที่แล้ว

    Salut. J ai vu des vidéos où l on branche directement le keypad (sans résistances) à l'arduino..est ce correct ? merci

    • @MagicFingers-m3l
      @MagicFingers-m3l 3 ปีที่แล้ว

      oui c’est possible en programmant larduino pour envoyer le courant moins fort sa demande une programmation supplémentaire mais à ne pas faire sans

  • @gabidut76
    @gabidut76 4 ปีที่แล้ว +1

    bonjour, je me demande pourquoi sa me met sa :
    'colonne_0' was not declared in this scope

  • @cesargasnier7026
    @cesargasnier7026 3 ปีที่แล้ว

    Bonjour, quelle est la valeur des resistances s'il vous plait

  • @franklintoya6932
    @franklintoya6932 4 ปีที่แล้ว

    C'est possible d'avoir directement le programme

    •  4 ปีที่แล้ว

      Je viens de le mettre dans le commentaire épinglé.

  • @fredericdulieu3016
    @fredericdulieu3016 4 ปีที่แล้ว

    c génial mais pourais tu mettre le code Arduino dans la description

  • @daviddenamur
    @daviddenamur 5 ปีที่แล้ว

    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

  • @rooks2369
    @rooks2369 4 ปีที่แล้ว

    faut il une librairie?

  • @philipped591
    @philipped591 2 หลายเดือนก่อน

    il y as moyen de faire plus rapide avec 2 boucles FOR imbriquer

  • @mohamedelouafi3536
    @mohamedelouafi3536 4 ปีที่แล้ว

    good job