Skocz do zawartości

Keypad 1x4 - problem.


Pomocna odpowiedź

Napisano

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 );

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

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().

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).

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ę.

  • 1 miesiąc później...

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.

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...