Spisu treści:
2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-13 06:58
Za każdym razem, gdy widzę klawiaturę, ma ona wiele pinów, to duża strata twoich pinów Arduino, więc czy możemy uruchomić klawiaturę z jednym i tylko jednym pinem?. Odpowiedź jest tutaj.
Krok 1: Zestawienie materiałów
Sprzęt komputerowy:
01 Arduino UNO
02 Deski do krojenia chleba
01 LCD z I2C
16 przycisków
04 rezystory 1,5 kΩ
04 rezystory 620 Ω
04 rezystory 220 Ω
08 rezystorów 100 Ω
01 rezystor 1 kΩ
07 Przewody połączeniowe
Oprogramowanie:
Arduino IDE zainstalowane na twoim komputerze
Krok 2: Schemat i Cicruit
Cała idea jest taka, że mamy matrycę 4*4 przycisków podłączonych pionowo do masy prawym wyprowadzeniem i poziomo drugim wyprowadzeniem (wyprowadzenie przycisku) oraz rezystory 1,5 kΩ, 620 Ω, 220 Ω i 100 Ω, końce 4 rzędy są połączone czterema rezystorami 100Ω, jak pokazano na schemacie.
Za każdym razem, gdy naciśniesz przycisk, zamykasz obwód, a prąd płynie inną ścieżką i innym łańcuchem rezystorów, dlatego pin A0 otrzymuje inny odczyt analogowy dla każdego przycisku. Wszystko, czego teraz potrzebujesz, to kodowanie.
Krok 3: Kodeks
#włączać
#włączać
LiquidCrystal_I2C lcd (0x3f, 20, 4);
int Przycisk = A0;
int wartość odczytu;
pusta konfiguracja()
{
Serial.początek(9600);
lcd.początek();
pinMode (przycisk, WEJŚCIE);
podświetlenie LCD();
lcd.print("Witaj świecie");
opóźnienie (2000);
lcd.clear();
lcd.print("Jednopinowa klawiatura 4*4");
opóźnienie (2000); }
pusta pętla()
{
wartość odczytu = odczyt analogowy(Przycisk);
Serial.println(wartość odczytu);
if (wartość odczytu==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: Korekta wartości
Kiedy otworzysz monitor szeregowy pokaże wartość 1023, jeśli naciśniesz przycisk da ci kolejny odczyt musisz wziąć te wartości i dokonać zmian w kodzie
Krok 5: Projekt po krytyce i przeglądzie
Nie ma wątpliwości, że wszyscy jesteśmy tutaj, aby uczyć się i dzielić naszą wiedzą, dzięki kilku komentarzom pozostawionym przez niektóre osoby ze społeczności, które były bardzo pomocne, postanowiłem wprowadzić pewne poprawki i ulepszenia do mojego projektu:
Sprzęt:
Postanowiłem wlutować wszystkie elementy w płytkę drukowaną, aby uniknąć problemu złego połączenia w płytkach stykowych.
Kod:
Znajomy poradził mi, abym użył oprogramowania debouncing i jest to tylko pętla (na przykład pętla "for"), aby program zabrał trochę czasu na pobranie odczytu, oznacza to, że wykonuje dużo odczytów (500 w moim przykładzie), ale trwa tylko ostatni.
for (i=1; i<= 500; i++) { // weź tylko 500. odczyt analogowy
value = analogRead(Button);} // to pomaga w uniknięciu złych odczytów
Inny znajomy dzięki niemu poradził mi porównać "readvalue" z zakresem wartości a nie jeden bo "readvalue" przyjmuje dużo wartości dla tego samego przycisku. 851 852, 853, 854, 855, więc jest to zakres 7 wartości: próg (852) oraz 3 wartości po lewej i prawej stronie. co musimy tutaj zrobić, to porównać bezwzględną wartość różnicy między „wartością odczytu” i „852” do „3”.
if(abs(readvalue-852)<=8){lcd.clear();lcd.print("A");}
Krok 6: Po kilku pracach lutowniczych
Krok 7: Moment prawdy
Jak widać program czasami myli przyciski, ale nadal działa, teoretycznie nie ma nic złego w układzie, ale kod wymaga dalszej kalibracji.
Krok 8: Koniec
Mam nadzieję, że podoba Ci się ten projekt i spróbujesz to zrobić, może poradzisz sobie lepiej niż ja.
Zapytaj mnie, jeśli masz pytania, zostaw komentarze i nie zapomnij zagłosować na mnie, jeśli Ci się spodoba.