LittleKing Napisano Lipiec 13, 2021 Udostępnij Napisano Lipiec 13, 2021 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 More sharing options...
H1M4W4R1 Lipiec 13, 2021 Udostępnij Lipiec 13, 2021 (edytowany) // 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 Lipiec 13, 2021 przez H1M4W4R1 1 Link do komentarza Share on other sites More sharing options...
ethanak Lipiec 13, 2021 Udostępnij Lipiec 13, 2021 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 More sharing options...
Pomocna odpowiedź
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ę »