Komentator Napisano Lipiec 20, 2017 Udostępnij Napisano Lipiec 20, 2017 Czy pamiętacie niedawny artykuł o własnej klawiaturze rozwiązującej problem nieporęcznych skrótów klawiszowych w programie Eagle? Dzięki niej do jednego przycisku można było przypisać nawet bardzo długą sekwencję kliknięć.W tym artykule przedstawiam moją klawiaturę, która ułatwia pracę z różnymi programami komputerowymi! UWAGA, to tylko wstęp! Dalsza część artykułu dostępna jest na blogu.Przeczytaj całość »Poniżej znajdują się komentarze powiązane z tym wpisem. Cytuj Link do komentarza Share on other sites More sharing options...
deshipu Lipiec 21, 2017 Udostępnij Lipiec 21, 2017 W sumie, to dla przeciętnego programisty Arduino taka klawiatura by wystarczyła jako jedyna klawiatura podłączona do komputera. Tylko trzeba by było zmienić skróty, przede wszystkim ctrl+c i ctrl+v dodać. 1 Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Lipiec 21, 2017 Udostępnij Lipiec 21, 2017 deshipu, przydałby się też duży przycisk "Dlaczego mój klon Arduino nie da się zaprogramować" 😉 Cytuj Link do komentarza Share on other sites More sharing options...
deshipu Lipiec 21, 2017 Udostępnij Lipiec 21, 2017 I drugi "Skopiowałem ten kod gdzieś z Internetu ale mi się nie kompiluje, czy ktoś mógłby zgadnąć co próbuję zrobić i zrobić to za mnie?" Cytuj Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. 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
Chumanista Lipiec 21, 2017 Udostępnij Lipiec 21, 2017 I makro do zmieniania nazw zmiennych na pojedyncze znaki (najlepiej spoza ASCII) i usuwanie formatowania. I dodanie kilku goto. Cytuj Link do komentarza Share on other sites More sharing options...
czosnekltd Lipiec 23, 2017 Udostępnij Lipiec 23, 2017 Witam Tak się składa że mam identyczną klawiaturkę 🙂, którą zamierzam przerobić pod skróty AutoCada. Czy możesz udostępnić plik źródłowy z Fusion360? Podaj wartość rezystorów...a ideałem byłby schemat całości połączeń 🙂 Cytuj Link do komentarza Share on other sites More sharing options...
Gieneq Lipiec 24, 2017 Udostępnij Lipiec 24, 2017 Cześć,załączam plik .STL z dostawką do klawiatury. Co do rezystorów użyłem 4.7k żeby ograniczyć prąd płynący podczas zwarcia styków (rezystancja przy wciśnięciu przycisku wynosi około 80 Ω). Schemat jest dość prosty i sprowadza się do połączenia linii, które wymieniłem na początku kodu, do odpowiadających im pinów i wpięcie rezystorów przy pinach wejściowych. klawiatura v7.zip Cytuj Link do komentarza Share on other sites More sharing options...
kls Lipiec 27, 2017 Udostępnij Lipiec 27, 2017 Cześć, Części zakupione 🙂 Gdzie mogę znaleźć pełen kod programu? pozdr kLs Cytuj Link do komentarza Share on other sites More sharing options...
Gieneq Lipiec 27, 2017 Udostępnij Lipiec 27, 2017 Cześć, cały kod znajduje się na końcu artykułu tuż przed podsumowaniem. Powodzenia, pochwal się potem wynikami pracy 😎 Cytuj Link do komentarza Share on other sites More sharing options...
tarzinio Lipiec 2, 2018 Udostępnij Lipiec 2, 2018 Witam serdecznie. Bardzo by mi się przydała taka klawiaturka. Zakupiłem taką samą na allegro. Przylutowałem przewody do 12 pinów na płytce, jednak nie wiem co dalej. Z poradnika nie dowiedziałem się gdzie przylutować do płytki od klawiatury przewód, by zadziałała np dioda. Czy mogę prosić o kontakt w celu pomocy? Pozdrawiam. Ogólnie to świetny poradnik, ale no, przydał by się schemat połączeń dla osób takich jak ja, czyli takich co się nie znają za dobrze. P.S. Mam arduino nano Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Lipiec 7, 2018 Udostępnij Lipiec 7, 2018 tarzinio, witam na forum 🙂 Niestety ten projekt tworzyliśmy dla siebie, artykuł powstał przy okazji i nie sądziliśmy, że ktoś będzie chciał odtworzyć opisywaną klawiaturę 1:1. Na ten moment nie mamy żadnych więcej informacji niż te, które znajduje się w tekście. Wtedy połączenia opisywaliśmy z pamięci, nigdzie już ich teraz nie mamy. Jestem jednak przekonany, że po kilkunastu minutach z miernikiem w ręku uda Ci się odszyfrować połączenia wewnątrz tej klawiatury 🙂 Cytuj Link do komentarza Share on other sites More sharing options...
tarzinio Lipiec 10, 2018 Udostępnij Lipiec 10, 2018 Witam. Z tym sobie już poradziłem, ale już na samym początku kompilacji kody, wyskakują mi błędy : /opt/arduino-builder/arduino-builder -compile -core-api-version 10611 -build-path /tmp/497104129/build -hardware opt/arduino-builder/hardware -hardware ./opt/cores -tools opt/arduino-builder/tools -tools ./opt/tools -built-in-libraries opt/libraries/latest -libraries /tmp/497104129/pinned -libraries /tmp/497104129/custom -fqbn arduino:avr:uno -build-cache /tmp -logger humantags -verbose=false /tmp/497104129/klawiatura_skrutow Using library keyboard_1_0_2 at version 1.0.2 in folder: /home/ubuntu/opt/libraries/latest/keyboard_1_0_2 Using library HID at version 1.0 in folder: /home/ubuntu/opt/cores/arduino/avr/libraries/HID /tmp/497104129/klawiatura_skrutow/klawiatura_skrutow.ino: In function 'void onPress(int)': /tmp/497104129/klawiatura_skrutow/klawiatura_skrutow.ino:92:7: error: 'Keyboard' was not declared in this scope Keyboard.write(KEY_ESC); ^ /tmp/497104129/klawiatura_skrutow/klawiatura_skrutow.ino:92:22: error: 'KEY_ESC' was not declared in this scope Keyboard.write(KEY_ESC); ^ /tmp/497104129/klawiatura_skrutow/klawiatura_skrutow.ino:95:22: error: 'KEY_PAGE_UP' was not declared in this scope Keyboard.write(KEY_PAGE_UP); ^ /tmp/497104129/klawiatura_skrutow/klawiatura_skrutow.ino:98:22: error: 'KEY_PAGE_DOWN' was not declared in this scope Keyboard.write(KEY_PAGE_DOWN); ^ /tmp/497104129/klawiatura_skrutow/klawiatura_skrutow.ino:101:22: error: 'KEY_LEFT_CTRL' was not declared in this scope Keyboard.press(KEY_LEFT_CTRL); ^ /tmp/497104129/klawiatura_skrutow/klawiatura_skrutow.ino:108:22: error: 'KEY_F10' was not declared in this scope Keyboard.write(KEY_F10); ^ /tmp/497104129/klawiatura_skrutow/klawiatura_skrutow.ino:111:22: error: 'KEY_F5' was not declared in this scope Keyboard.write(KEY_F5); ^ /tmp/497104129/klawiatura_skrutow/klawiatura_skrutow.ino:114:22: error: 'KEY_LEFT_SHIFT' was not declared in this scope Keyboard.press(KEY_LEFT_SHIFT); ^ /tmp/497104129/klawiatura_skrutow/klawiatura_skrutow.ino:115:22: error: 'KEY_LEFT_ALT' was not declared in this scope Keyboard.press(KEY_LEFT_ALT); ^ /tmp/497104129/klawiatura_skrutow/klawiatura_skrutow.ino:128:22: error: 'KEY_F8' was not declared in this scope Keyboard.write(KEY_F8); ^ /tmp/497104129/klawiatura_skrutow/klawiatura_skrutow.ino:141:22: error: 'KEY_F9' was not declared in this scope Keyboard.write(KEY_F9); ^ /tmp/497104129/klawiatura_skrutow/klawiatura_skrutow.ino: In function 'void setup()': /tmp/497104129/klawiatura_skrutow/klawiatura_skrutow.ino:224:3: error: 'Keyboard' was not declared in this scope Keyboard.begin(); ^ exit status 1 Mój kod wygląda następująco ( Tym razem używam Arduino UNO ): #include "Keyboard.h" // led #define LED_PIN A2 // liczby #define MATRIX_SIZE 6 // stany #define KEY_RELESED 0 #define KEY_PRESSED 1 // klawisze #define KEY_NONE 'x' #define KEY_ENTER 'e' #define KEY_NUM 'n' #define KEY_BACK 'B' #define KEY_0 '0' #define KEY_1 '1' #define KEY_2 '2' #define KEY_3 '3' #define KEY_4 '4' #define KEY_5 '5' #define KEY_6 '6' #define KEY_7 '7' #define KEY_8 '8' #define KEY_9 '9' #define KEY_DOT '.' #define KEY_PLUS '+' #define KEY_MINUS '-' #define KEY_MUL '*' #define KEY_DIV '/' // wyjscia - wiersze #define OUT_LINE_1 12 #define OUT_LINE_2 11 #define OUT_LINE_6 8 #define OUT_LINE_A 7 #define OUT_LINE_B 6 #define OUT_LINE_C 5 const int OUTPUTS[] = {OUT_LINE_1, OUT_LINE_2, OUT_LINE_6, OUT_LINE_A, OUT_LINE_B, OUT_LINE_C}; // wejscia - kolumny #define IN_LINE_3 13 #define IN_LINE_4 10 #define IN_LINE_5 9 #define IN_LINE_D 4 #define IN_LINE_E 3 #define IN_LINE_F 2 const int INPUTS[] = {IN_LINE_3, IN_LINE_4, IN_LINE_5, IN_LINE_D, IN_LINE_E, IN_LINE_F}; // macierze reprezentujące fizyczne symbole i stan zatrzasku char symbols[MATRIX_SIZE * MATRIX_SIZE]; int states[MATRIX_SIZE * MATRIX_SIZE]; int index = 0; // funkcja wewnatrz której definiujemy fizyczne połączenia klawiszy i ich symbole void mapKeys(){ setSymbol(OUT_LINE_1, IN_LINE_3, KEY_9); setSymbol(OUT_LINE_1, IN_LINE_4, KEY_3); setSymbol(OUT_LINE_1, IN_LINE_5, KEY_MUL); setSymbol(OUT_LINE_1, IN_LINE_D, KEY_6); setSymbol(OUT_LINE_1, IN_LINE_E, KEY_DOT); setSymbol(OUT_LINE_1, IN_LINE_F, KEY_MINUS); setSymbol(OUT_LINE_2, IN_LINE_3, KEY_7); setSymbol(OUT_LINE_2, IN_LINE_4, KEY_1); setSymbol(OUT_LINE_2, IN_LINE_D, KEY_4); setSymbol(OUT_LINE_6, IN_LINE_5, KEY_NUM); setSymbol(OUT_LINE_A, IN_LINE_3, KEY_PLUS); setSymbol(OUT_LINE_A, IN_LINE_4, KEY_ENTER); setSymbol(OUT_LINE_B, IN_LINE_3, KEY_8); setSymbol(OUT_LINE_B, IN_LINE_4, KEY_2); setSymbol(OUT_LINE_B, IN_LINE_5, KEY_DIV); setSymbol(OUT_LINE_B, IN_LINE_D, KEY_5); setSymbol(OUT_LINE_B, IN_LINE_E, KEY_0); setSymbol(OUT_LINE_C, IN_LINE_D, KEY_BACK); } // funckja w której wyzwalane są zdarzenia od kliknięć fizycznych przycisków void onPress(int index){ //załącz diodę umieszczoną na przodzie klawiatury digitalWrite(LED_PIN, HIGH); // pobierz symbol spod konkretnego indeksu switch(symbols[index]){ //wierz 1 case KEY_NUM: Keyboard.write(KEY_ESC); break; case KEY_DIV: Keyboard.write(KEY_PAGE_UP); break; case KEY_MUL: Keyboard.write(KEY_PAGE_DOWN); break; case KEY_MINUS: Keyboard.press(KEY_LEFT_CTRL); Keyboard.write(' '); Keyboard.releaseAll(); break; //wiersz 2 case KEY_7: Keyboard.write(KEY_F10); break; case KEY_8: Keyboard.write(KEY_F5); break; case KEY_9: Keyboard.press(KEY_LEFT_SHIFT); Keyboard.press(KEY_LEFT_ALT); Keyboard.write('q'); Keyboard.releaseAll(); break; case KEY_PLUS: Keyboard.press(KEY_LEFT_SHIFT); Keyboard.press(KEY_LEFT_ALT); Keyboard.write('o'); Keyboard.releaseAll(); break; //wiersz 3 case KEY_4: Keyboard.write(KEY_F8); break; case KEY_5: Keyboard.press(KEY_LEFT_CTRL); Keyboard.write(KEY_PAGE_UP); Keyboard.releaseAll(); break; case KEY_6: Keyboard.press(KEY_LEFT_SHIFT); Keyboard.write(KEY_PAGE_UP); Keyboard.releaseAll(); break; case KEY_BACK: Keyboard.write(KEY_F9); break; //wiersz 4,5 case KEY_1: Keyboard.press(KEY_LEFT_CTRL); Keyboard.write('q'); Keyboard.releaseAll(); break; case KEY_2: Keyboard.press(KEY_LEFT_CTRL); Keyboard.write(KEY_PAGE_DOWN); Keyboard.releaseAll(); break; case KEY_3: Keyboard.press(KEY_LEFT_SHIFT); Keyboard.write(KEY_PAGE_DOWN); Keyboard.releaseAll(); break; case KEY_0: Keyboard.print(":)"); break; case KEY_DOT: Keyboard.press(KEY_LEFT_CTRL); Keyboard.write('u'); Keyboard.releaseAll(); break; case KEY_ENTER: Keyboard.write(KEY_ENTER); break; } delay(200); digitalWrite(LED_PIN, LOW); } // funckja wiążąca symbol z numerami (indeksami w tablicach) // linii wejścia i wyjścia void setSymbol(int lineOutput, int lineInput, char symbol){ // zmienne odpowiedajace indeksom w tablicy dla fizycznych linii // wpisanych przez użytkownika. int iRow, iColumn; // odszukaj indeks wiersza czyli lini wyjsc w macierzy for(iRow = 0; iRow < MATRIX_SIZE; ++iRow){ if(OUTPUTS[iRow] == lineOutput) break; } // odszukaj indeks kolumny czyli lini wejsc w maciery for(iColumn = 0; iColumn < MATRIX_SIZE; ++iColumn){ if(INPUTS[iColumn] == lineInput) break; } // zapisz symbol w komorce macierzy 1-wymiarowej // przy pomocy 2 współrzędnych symbols[iRow * MATRIX_SIZE + iColumn] = symbol; } // wstępne ustawienia peryferiów i mapowanie przycisków void setup() { //LED pinMode(LED_PIN, OUTPUT); digitalWrite(LED_PIN, LOW); for(int i = 0; i < MATRIX_SIZE; ++i){ pinMode(OUTPUTS[i], OUTPUT); digitalWrite(OUTPUTS[i], HIGH); //WEJSCIA pinMode(INPUTS[i], INPUT); digitalWrite(INPUTS[i], HIGH); } // domyślnie nie ma żadnych połączeń w klawiaturze for(int i = 0; i < MATRIX_SIZE * MATRIX_SIZE; ++i){ symbols[i] = KEY_NONE; states[i] = KEY_RELESED; } // użyj połączeń zdefiniownaych przez użytkownika mapKeys(); Keyboard.begin(); } // główna pętla w której sprawdzane są kliknięcia void loop() { for(int iOutput = 0; iOutput < MATRIX_SIZE; ++iOutput){ // aktywuj sprawdzanie wiersza o indeksie iOutput digitalWrite(OUTPUTS[iOutput], LOW); for(int iInput = 0; iInput < MATRIX_SIZE; ++iInput){ // oblicz numer indeksu w macierzy wszystkich przycisków index = iOutput * MATRIX_SIZE + iInput; // jeżeli obecny stan jest LOW (przycisk wciśnięty) if((digitalRead(INPUTS[iInput]) == LOW)){ if(states[index] == KEY_RELESED){ // to wywołaj kliknięcie onPress(index); } // ustaw flagę żeby zadziałał zatrzask states[index] = KEY_PRESSED; } else if(states[index] == KEY_PRESSED) // zresetuj zatrzask w momencie puszczenia przycisku states[index] = KEY_RELESED; } // opuść linię aby przejść do następnej digitalWrite(OUTPUTS[iOutput], HIGH); } } Dodam, że pracuje na IDE w wersji online. Ktoś wie jak sobie z tym poradzić? Cytuj Link do komentarza Share on other sites More sharing options...
ethanak Lipiec 10, 2018 Udostępnij Lipiec 10, 2018 Owszem - użyć właściwej wersji Arduino (sprzętu, nie IDE). Ten program może działać wyłącznie na Arduino Leonardo i Micro (z uwzględnieniem Pro Micro) - chyba że jest jeszcze jakieś o którym nie wiem. Uno, Nano, Mini i cała reszta po prostu nie obsługują USB HID i w związku z tym wszelkie próby kompilacji tego programu będą przypominać próby zatankowania wodoru do Opla Astry. Po prostu - Astra nie jeździ na wodorze, Uno nie emuluje klawiatury. Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Lipiec 11, 2018 Udostępnij Lipiec 11, 2018 ethanak, oczywiście jest tak jak piszesz, dodam tylko dla ciekawostki, że da się emulować klawiaturę na Arduino UNO. Tutaj przykład: http://mitchtech.net/arduino-usb-hid-keyboard/ Cytuj Link do komentarza Share on other sites More sharing options...
__ROBI__ Sierpień 16, 2018 Udostępnij Sierpień 16, 2018 (edytowany) Witajcie, Co może być nie tak z podpięciem biblioteki Keyboard.h , przykład dołączony do zainstalowanej biblioteki: sprawdziłem Wire - działa : Przeinstalowałem więc środowisko, wywaliłem wszystkie zainstalowane wcześniej biblioteki, nic nie pomaga 😞 Co jeszcze powinienem sprawdzić? Biblioteka pochodzi z : https://github.com/arduino-libraries/Keyboard EDIT: Chyba już wiem o co kaman, zdaje się że Keyboard.h działa tylko dla ATmega32u4 lub Micro: z Arduino.cc: "The keyboard functions enable 32u4 or SAMD micro based boards to send keystrokes to an attached computer through their micro’s native USB port." znaczy się moje Uno mogę schować do kieszeni, szkoda 😞 Edytowano Sierpień 16, 2018 przez __ROBI__ Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
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!