Table des matières:

Clavier à une broche 4 × 4 : 10 étapes
Clavier à une broche 4 × 4 : 10 étapes

Vidéo: Clavier à une broche 4 × 4 : 10 étapes

Vidéo: Clavier à une broche 4 × 4 : 10 étapes
Vidéo: Utilisation du Clavier matriciel 4×4 avec la carte ESP32 2024, Juillet
Anonim
Clavier à une broche 4 × 4
Clavier à une broche 4 × 4

Chaque fois que je vois un clavier, il est livré avec beaucoup de broches, c'est un gros gaspillage de vos broches Arduino, alors pouvons-nous faire fonctionner un clavier avec une et une seule broche ?. La réponse est ici.

Étape 1: Nomenclature

Nomenclature
Nomenclature

Matériel:

01 Arduino UNO

02 Planches à pain

01 LCD avec I2C

16 boutons poussoirs

04 résistances 1,5 kΩ

04 résistances 620 Ω

04 résistances 220 Ω

08 résistances 100 Ω

01 résistance 1 kΩ

07 Cavaliers

Logiciel:

Arduino IDE installé sur votre PC

Étape 2: Schéma et Cicruit

Schéma et circuit
Schéma et circuit
Schéma et circuit
Schéma et circuit

L'idée est que nous avons 4*4 matrices de boutons-poussoirs connectés verticalement à la terre par le fil droit et horizontalement par l'autre fil (le fil du bouton) et des résistances de 1,5 kΩ, 620Ω, 220Ω et 100Ω, les extrémités de les 4 rangées sont reliées par quatre résistances de 100Ω comme indiqué sur le schéma.

Chaque fois que vous appuyez sur un bouton, vous fermez le circuit et le courant passe par un chemin différent et une chaîne de résistances différente, c'est pourquoi la broche A0 reçoit une lecture analogique différente pour chaque bouton-poussoir. Tout ce dont vous avez besoin maintenant, c'est de coder.

Étape 3: Le code

#comprendre

#comprendre

LiquidCrystal_I2C lcd (0x3f, 20, 4);

int Bouton = A0;

valeur de lecture int;

void setup()

{

Serial.begin(9600);

lcd.begin();

pinMode(Bouton, INPUT);

LCD rétro-éclairage();

lcd.print("Bonjour tout le monde");

retard (2000);

lcd.clear();

lcd.print("Clavier à une broche 4*4");

retard (2000); }

boucle vide()

{

readvalue = analogRead(Button);

Serial.println(readvalue);

if (readvalue==852){lcd.clear();lcd.print("A");}

else{ if (readvalue==763){lcd.clear();lcd.print("B");}

else{ if (readvalue==685){lcd.clear();lcd.print("C");}

else{ if (readvalue==965){lcd.clear();lcd.print("D");}

else{ if (readvalue==565){lcd.clear();lcd.print("9");}

else{ if (readvalue==614){lcd.clear();lcd.print("6");}

else{ if (readvalue==360){lcd.clear();lcd.print("3");}

else{ if (readvalue==335){lcd.clear();lcd.print("#");}

else{ if (readvalue==396){lcd.clear();lcd.print("8");}

else{ if (readvalue==349){lcd.clear();lcd.print("5");}

else{ if (readvalue==235){lcd.clear();lcd.print("2");}

else{ if (readvalue==279){lcd.clear();lcd.print("0");}

else{ if (readvalue==452){lcd.clear();lcd.print("7");}

else{ if (readvalue==271){lcd.clear();lcd.print("4");}

else{ if (readvalue==170){lcd.clear();lcd.print("1");}

else{ if (readvalue==92){lcd.clear();lcd.print("*");}else{}}}}}}}}}}}}}}}} }

Étape 4: Correction des valeurs

Correction des valeurs
Correction des valeurs

Lorsque vous ouvrez le moniteur série, il affichera une valeur de 1023, si vous appuyez sur un bouton, cela vous donnera une autre lecture, vous devez prendre ces valeurs et apporter des modifications au code.

Étape 5: Projet après la critique et l'examen

Projet après critique et examen
Projet après critique et examen

Il ne fait aucun doute que nous sommes tous là pour apprendre et partager nos connaissances, grâce à quelques commentaires laissés par certaines personnes de la communauté qui m'ont été très utiles, j'ai décidé d'apporter quelques ajustements et améliorations à mon projet:

Le matériel:

J'ai décidé de souder tous les composants dans un PCB pour éviter le problème de mauvaise connexion dans les maquettes.

Le code:

Un ami m'a conseillé d'utiliser un logiciel anti-rebond et c'est juste une boucle (boucle "for" par exemple) pour que le programme prenne du temps pour choisir une lecture cela signifie qu'il fait beaucoup de lectures (500 dans mon exemple) mais prend seulement le dernier.

for (i=1; i<= 500; i++) { // ne prend que la 500ème lecture analogique

value = analogRead(Button);} // cela aide à prendre du temps et à éviter les mauvaises lectures

Un autre ami grâce à lui m'a conseillé de comparer "readvalue" avec une plage de valeurs pas une car "readvalue" prend beaucoup de valeurs pour un même bouton poussoir. Le "A" par exemple donne une lecture de: 849, 850, 851 852, 853, 854, 855 donc c'est une plage de 7 valeurs: un seuil (852) et 3 valeurs gauche et droite. ce que nous devons faire ici est de comparer la valeur absolue de la différence entre "readvalue" et "852" à "3".

if(abs(readvalue-852)<=8){lcd.clear();lcd.print("A");}

Étape 6: Après quelques travaux de soudure

Après quelques travaux de soudure
Après quelques travaux de soudure
Après quelques travaux de soudure
Après quelques travaux de soudure
Après quelques travaux de soudure
Après quelques travaux de soudure

Étape 7: La minute de vérité

Comme vous pouvez le voir, le programme confond parfois les boutons mais cela fonctionne toujours, en théorie, il n'y a pas de problème avec le circuit mais le code a besoin de plus de calibrage.

Étape 8: La fin

J'espère que vous aimez ce projet et que vous essayez de le faire, peut-être que vous ferez mieux que moi.

Demandez-moi si vous avez des questions, laissez des commentaires et n'oubliez pas de voter pour moi si vous aimez ça.

Conseillé: