Spisu treści:

Jedna klawiatura pin 4×4: 10 kroków
Jedna klawiatura pin 4×4: 10 kroków

Wideo: Jedna klawiatura pin 4×4: 10 kroków

Wideo: Jedna klawiatura pin 4×4: 10 kroków
Wideo: WIELKI TEST KLAWIATUR - RAZER 2024, Lipiec
Anonim
Jedna pinowa klawiatura 4 × 4
Jedna pinowa klawiatura 4 × 4

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

Zestawienie materiałów
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

Schemat i cycruit
Schemat i cycruit
Schemat i cycruit
Schemat i cycruit

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

Korekta wartości
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

Projekt po krytyce i przeglądzie
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

Po kilku pracach lutowniczych
Po kilku pracach lutowniczych
Po kilku pracach lutowniczych
Po kilku pracach lutowniczych
Po kilku pracach lutowniczych
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.

Zalecana: