Skocz do zawartości

Problem z klawiaturą membranową


Pomocna odpowiedź

Pomijając kwestię ekspandera i innych okołotematów, skoro kod biblioteki działa to znaczy że układ jest działający i póki co nie ma co drążyć innych tematów.

 @jare72 czy to co podesłał @Elvis działa?

Jeżeli dalej będziesz miał problem, możesz przeanalizować kod biblioteki, która działa. Znajdziesz ją w dokumentach w katalog Arduino. 

  • Lubię! 1
(edytowany)

Projekt jeszcze nie mam złożony, więc dlatego testowałem na zwykłej klawiaturze 4x4. Głównie w poście chodziło mi o zasadę działania klawiatury bez bibloteki keypad, ale dzięki wszystkim, że mogłem się dowiedzieć tylu rzeczy i co mogę jeszcze poprawić, bo dopiero zaczynam programować. W projekcie będzie jeszcze wyświetlacz LCD i moduł Ethernet 🙂

@Gieneq 

Na razie jestem w pracy, ale jak wrócę to przetestuję. Co do biblioteki keypad zaglądałem do środka, ale musiałbym nad tym dłużej posiedzieć, bo jest tam sporo funkcji do rozszyfrowania jak np. debouncing. 😃

Edytowano przez jare72

No na spokojnie, jak coś chętnie pomożemy. 🙂 Analiza kodu bibliotek może być bardzo przydatna, pomijając rozwiązanie konkretnego problemu, ale zawsze można podpatrzeć sposób w jaki może podejść do niektórych problemów.

  • Lubię! 2

Witam ponownie, mam już program który mi działa poprawnie, ale jak odłączę zasilanie i podłączę jeszcze raz to przestaje działać i pomaga jedynie jeśli wgram jakiś inny program, zresetuje Arduino i dopiero wgram ten program, który będzie znów działał poprawnie. Kod doślę później, bo nie mam teraz dostępu do komputera.

Nie, biblioteka działa normalnie po odłączeniu programu i podłączeniu ponownie. Jeśli jedna nóżka switcha wejścia pullup jest ustawiona standardowo na wysoki, a druga do wyjścia niskiego i nacisnę przycisk to na wejściu będzie niski stan już do końca działania programu? Czy też muszę ustawiać ponownie jaki był stań przed naciśnięciem przycisku tak jak w przypadku wyjścia?

17 minut temu, jare72 napisał:

Jeśli jedna nóżka switcha wejścia pullup jest ustawiona standardowo na wysoki, a druga do wyjścia niskiego i nacisnę przycisk to na wejściu będzie niski stan już do końca działania programu?

No nie, nie masz żadnej pamięci w tym układzie, ale chyba wiem co jest problemem. Masz pewnie jakiś return i gdy ustawiasz odczyt:

ekspander.digitalWrite(ROWS[x], LOW);

W programie wszystko jest ok, kolumny ustawiasz na PULLUP (wejście, HIGH), przesłuchujesz wiersze sprawdzając czy jak dasz LOW na wyjściu to czy nie zaciągnie któregoś PULLUPa. Ale w sytuacji gdy tak się stanie to może coś się zawiesić, gdy dasz return. Bo w ten sposób przerywasz przesłuchiwanie i nie ustawiasz pinu z powrotem na HIGH. Dlatego musisz albo dodać zmienną pomocniczą trzymającą wynik działania funkcji, albo przed return ustawić piny z powrotem na HIGH.

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...