Skocz do zawartości

Keypad 1x4 - problem.


JokurPL

Pomocna odpowiedź

Witam. Próbuję odebrać dana z keypada z pomocą biblioteki Keypad.h, ale coś nie działa. Przeszukałem trochę internetu, ale nie znalazłem niczego, co by mi pomogło.

Próbowałem tak:

const byte ROWS = 1; 
const byte COLS = 5; 
char keys[ROWS][COLS] = {
   {'1','2','3','4'}
};

byte rowPins[ROWS] = {}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {14,15,16,17}; //connect to the column pinouts of the keypad

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
Link do komentarza
Share on other sites

34765.jpg?time=1501065470757

#include <Keypad.h>

const byte ROWS = 1; 
const byte COLS = 5; 
char keys[ROWS][COLS] = {
   {'1','2','3','4'}
};

byte rowPins[ROWS] = {}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {A0, A1, A2, A3}; //connect to the column pinouts of the keypad

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
void setup() {
 pinMode(8, OUTPUT);

}

void loop() {
 char klawisz = 0;
 klawisz = keypad.getKey();
  if(klawisz)  // Check for a valid key.
 {
   switch (klawisz)
   {
     case '1':
       digitalWrite(8, LOW);
       break;
     case '2':
       digitalWrite(8, HIGH);
       break;
   }
 }

}

__________

Komentarz dodany przez: Treker

Link do komentarza
Share on other sites

Ten schemat to gdzie?

Co do kodu to możesz sobie ułatwić debugowanie poprzez przesyłanie przez port szeregowy wartości zwracanej przez keypad.getKey().

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Tą fotką się nie sugeruj, klawiatura nie wymaga zasilania 5V. W arduino AVR, czyli UNO, NANO, PRO/PRO MINI/MEGA jest dostępny PULLUP, czyli wewnątrz procek delikatnie zasila piny na życzenie. I z tego korzystają klawiatury/przyciski. Zapewne również biblioteki. Tzn. że wspólny przewód, tu oznaczony jako 5V, tak na prawdę powinien być podłaczony do GND. Biblioteka widząc UNO włącza pullup dla pinów przycisków i czeka na odczyt 0 by stwierdzić, że nastąpiło wciśnięcie klawisza. Nie zobaczy go jak to podłączysz z obu stron do 5V - nieważne czy wciśnięty czy nie jest 5V. Niektóre Arduino mają zarówno PULLUP jak i PULLDOWN, dla PULLDOWN możnaby użyć podłączenia do VCC (te zwykle są na 3.3V nie 5V), wtedy typowym odczytem jest zero z pinu procka, a wciśnięcie przycisku powoduje pojawienia się na nim VCC i 1.

Także podłącz sobie ten wspólny pin do GND i zobacz jak to działa z tą Twoją biblioteką. A tak zupełnie bez biblioteki możesz wtedy pomigać led UNO ( piny1-4 podłącz do A0-A1-A2-A3 i piąty do GND) korzystając z kodu:


void setup() {
pinMode(13,OUTPUT);
pinMode(A0,INPUT_PULLUP);
pinMode(A1,INPUT_PULLUP);
pinMode(A2,INPUT_PULLUP);
pinMode(A3,INPUT_PULLUP);
}

void loop() {
if(! (digitalRead(A0)||digitalRead(A1)||digitalRead(A2)||digitalRead(A3))) //jesli na ktorymkolwiek z tych pinow jest nie jeden (!) 
digitalWrite(13,! (digitalRead(13))); //To odczytaj pin 13 co tam jest i wpisz odwrotnie

}

Jak widać kod dla 4 przycisków jest banalny, można ewentualnie wrzucić bibliotekę bounce2 by działało stabilniej (eliminacja drgań styków przycisku).

Link do komentarza
Share on other sites

Gość es2
Witam. Próbuję odebrać dana z keypada z pomocą biblioteki Keypad.h, ale coś nie działa.

Użyłeś biblioteki do obsługi klawiatury multipleksowanej a pokazana na fotce taka nie jest. Nie pokazałeś schematu a prawdopodobnie źle podłączyłeś klawiaturę.

Link do komentarza
Share on other sites

Spróbuj coś takiego:

#include

const byte ROWS = 1;

const byte COLS = 4;

char keys[ROWS][COLS] = {

{'1','2','3','4'}

};

byte rowPins[ROWS] = {A0};

byte colPins[COLS] = {A1,A2,A3,A4};

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

void setup(){

Serial.begin(9600);

}

void loop(){

char key = keypad.getKey();

if (key != NO_KEY){

Serial.println(key);

}

}

__________

Komentarz dodany przez: Treker

Kody programów należy umieszczać przez narzędzie KOD (znajdziesz je w edytorze pod ikonką "<>"). Dzięki niemu składania programów jest automatycznie kolorowana, a wtedy wszystkim znacznie łatwiej analizować wklejone programy. Proszę to poprawić - z góry dziękuję za zrozumienie i pomoc przy utrzymaniu porządku na forum.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.