Skocz do zawartości

Klawiatura matrycowa kod dla dwóch map


LittleKing

Pomocna odpowiedź

Witam.

Czy podpowiedział by mi ktoś jak napisać kod dla klawiatury która obsługiwała by dwie mapy przycisków?

Chciał bym stworzyć klawiaturę 5x4 plus przycisk który zmieniał by wartości. O co mi dokładnie chodzi
Mam klawiature1
{1, ,2, 3, 4... i tak do 20 klawiszy}

A po przyciśnięciu przycisku zmieniała by na drugą mapę

{A, B, C, D.... i tak do 20}

Napisanie klawiatury dla jednej mapy to nie problem ale jak napisać kod aby te mapy się zmieniały?
Korzystam z biblioteki Keypad.h
Z góry dziękuje za każdą podpowiedź  

Link do komentarza
Share on other sites

// Biblioteka
#include <Keypad.h>


// Wielkość klawiatury
const byte rows = 4;
const byte cols = 3;

// Definicje pinów dla klawiatury
byte rowPins[rows] = {5, 4, 3, 2};
byte colPins[cols] = {8, 7, 6}; 

// Tworzymy mapy klawiszy
char keys_numbers[rows][cols] = {
  {'1','2','3'},
  {'4','5','6'},
  {'7','8','9'},
  {'#','0','*'}
};

char keys_letters[rows][cols] = {
  {'A','B','C'},
  {'D','E','F'},
  {'G','H','I'},
  {'J','K','L'}
};

// Tworzymy nowe keypady
Keypad keypad_num = Keypad( makeKeymap(keys_numbers), rowPins, colPins, rows, cols );
Keypad keypad_let = Keypad( makeKeymap(keys_letters), rowPins, colPins, rows, cols );

// Klawiarura, do której się odwołujesz (uwaga: to jest wskaźnik!)
Keypad* keypad = &keypad_num;

// Przełącz klawiaturę ;)
void switch_keypad()
{
  if(keypad == &keypad_num)
    keypad = &keypad_let;
  else
    keypad = &keypad_num;
}

void setup()
{
  // Port szeregowy 115200 kbit/s
  Serial.begin(115200);
}

void loop()
{
  // Sprawdź klawisz
  char key = (*keypad).getKey();

  // Jeżeli klawisz został wciśnięty
  if (key != NO_KEY){

    // Wypisz na monitorze
    Serial.println(key);

    // Przełącz klawiaturę na drugą wersję
    switch_keypad();

    // Odczekaj pół sekundy ;)
    delay(500);
  }
}

Coś w tym stylu powinno zadziałać 😉 (nie było testowane)

Funkcja switch_keypad przełącza między klawiaturą z literami oraz klawiaturą z numerami 😉 

Pamiętaj, że do klawiatury musisz się odnosić poprzez wskaźnik (przykład w funkcji loop()). Czyt. (*keypad).[coś].

Powyższy program powinien w momencie wciśnięcia przycisku na klawiaturze wyświetlić go na monitorze szeregowym, a następnie przełączyć klawiaturę na drugą (cyfry/litery).

Edytowano przez H1M4W4R1
  • Lubię! 1
Link do komentarza
Share on other sites

A nie prościej będzie zrobić coś w stylu:

char keys[rows][cols]={
  {1,2,3},
  {4,5,6},
  {7,8,9},
  {10,11,12}};

const char *maps[2]={" 123456789*0#"," ABCDEFGHIJKL"};

...
 
Serial.println(maps[ktura_klawiatura][klawisz]):

 

Link do komentarza
Share on other sites

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

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.