Obsah:
2025 Autor: John Day | [email protected]. Naposledy změněno: 2025-01-13 06:57
Pokaždé, když vidím klávesnici, přichází se spoustou pinů, je to velká ztráta vašich pinů Arduino, můžeme tedy spustit klávesnici s jediným a jediným pinem? Odpověď je zde.
Krok 1: Kusovník
Hardware:
01 Arduino UNO
02 prkénka
01 LCD s I2C
16 Tlačítka
04 odpory 1,5 kΩ
04 odpory 620 Ω
04 odpory 220 Ω
08 odpory 100 Ω
01 odpor 1 kΩ
07 Propojovací vodiče
Software:
Arduino IDE nainstalované ve vašem PC
Krok 2: Schéma a Cicruit
Celá myšlenka je, že máme matici 4*4 tlačítek připojenou svisle k zemi pravým vodičem a horizontálně druhým vodičem (vodičem tlačítka) a odpory 1,5 kΩ, 620Ω, 220Ω a 100Ω, konce 4 řady jsou spojeny čtyřmi odpory 100Ω, jak ukazuje schéma.
Pokaždé, když stisknete tlačítko, zavřete obvod a proud prochází jinou cestou a jiným řetězcem odporů, proto pin A0 dostává pro každé tlačítko jiné analogové čtení. Vše, co nyní potřebujete, je kódování.
Krok 3: Kód
#zahrnout
#zahrnout
LiquidCrystal_I2C lcd (0x3f, 20, 4);
int Tlačítko = A0;
int hodnota čtení;
neplatné nastavení ()
{
Serial.begin (9600);
lcd.begin ();
pinMode (tlačítko, VSTUP);
lcd.backlight ();
lcd.print („Hello World“);
zpoždění (2000);
lcd.clear ();
lcd.print („klávesnice s jedním pinem 4*4“);
zpoždění (2000); }
prázdná smyčka ()
{
readvalue = analogRead (Tlačítko);
Serial.println (hodnota čtení);
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 {}}}}}}}}}}}}}}}}}}
Krok 4: Oprava hodnot
Když otevřete sériový monitor, zobrazí hodnotu 1023, pokud stisknete tlačítko, poskytne vám další čtení, musíte tyto hodnoty vzít a provést nějaké změny v kódu
Krok 5: Projekt po kritice a revizi
Není pochyb o tom, že jsme všichni tady, abychom se učili a sdíleli své znalosti, díky několika komentářům, které zanechali někteří lidé z komunity a které byly velmi užitečné, jsem se rozhodl provést na svém projektu několik úprav a vylepšení:
Hardware:
Rozhodl jsem se pájet všechny součásti na desce plošných spojů, abych se vyhnul problému se špatným spojením v prkénkách.
Kód:
Přítel mi poradil, abych použil softwarové odskakování, a je to jen smyčka (například smyčka „pro“), aby programu nějaký čas trvalo, než si vybral čtení, což znamená, že udělá hodně přečtení (500 v mé zkoušce), ale zabere jen ten poslední.
for (i = 1; i <= 500; i ++) {// vezměte pouze 500. analogový vlákno
value = analogRead (Button);} // to pomůže zabrat nějaký čas a vyhnout se špatným hodnotám
Další jeho přítel mi doporučil porovnat „hodnotu čtení“s řadou hodnot, nikoli s jednou, protože „hodnota pro čtení“pro stejné tlačítko vyžaduje mnoho hodnot. Například „A“udává hodnotu: 849, 850, 851 852, 853, 854, 855, takže je to rozsah 7 hodnot: práh (852) a 3 hodnoty vlevo a vpravo. musíme zde porovnat absolutní hodnotu rozdílu mezi „hodnotou čtení“a „852“na hodnotu „3“.
if (abs (readvalue-852) <= 8) {lcd.clear (); lcd.print ("A");}
Krok 6: Po nějaké pájecí práci
Krok 7: Okamžik pravdy
Jak vidíte, program někdy zaměňuje tlačítka, ale stále funguje, teoreticky na obvodu není nic špatného, ale kód vyžaduje další kalibraci.
Krok 8: Konec
Doufám, že se vám tento projekt líbí a pokusíte se ho udělat, možná se vám bude dařit lépe než mně.
Zeptejte se mě, pokud máte dotazy, zanechte komentáře a nezapomeňte pro mě hlasovat, pokud se vám to líbí.