Table des matières:
2025 Auteur: John Day | [email protected]. Dernière modifié: 2025-01-13 06:57
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
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
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
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
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
É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.