Клавиатура — весьма удобная вещь для ввода текста или другой информации. В некоторых проектах на Arduino это может пригодиться.
Самый распространенный тип: PS/2, его мы и будем подключать.
Если посмотреть на разъём типа «мама», который стоит на материнской плате ПК, то увидим такую картину: а второй, на штекере — «папа»
- Pin 1 +DATA — Data
- Pin 2 N/C — Not connected
- Pin 3 GND — Ground
- Pin 4 Vcc — +5 V
- Pin 5 +CLK — Clock
- Pin 6 N/C — Not connected
Второй нам собственно и нужен. Я подпаял к нему проводки и напрямую подключил к портам ардуино.
Протокол передачи данные не из замудренных:
Дергаем clock, отправляем пакет данные + старт и стоп биты.
ArduinoCC уже позаботились о бибилиотеке, поэтому велосипед изобретать нам не придется. Скачиваем PS2.ZIP, распаковываем и кладем в arduino-xx\libraries\. Загрузим простой пример:
При нажатии клавиш в COM порт будут поступать скан-коды. Формат данных об одной клавише будет таким:
1 2 3 4 | 0x5A //Нажали ENTER .......... 0xF0 //Отпустили 0x5A |
Но читать коды клавиш не очень интересно 🙂 Можно сделать простенькое пианино на основе этого, подключив еще динамик:
А вот и скетч:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | #include <ps2.h> #define note_len 200000 #define play_z 4000 #define play_c 3830 #define play_d 3400 #define play_e 3038 #define play_f 2864 #define play_g 2550 #define play_a 2272 #define play_b 2028 #define play_C 1912 unsigned char code; PS2 kbd(7, 5); void playTone(int note ) { long elapsed_time = 0; while (elapsed_time < note_len) { digitalWrite(9,HIGH); delayMicroseconds(note / 2); digitalWrite(9, LOW); delayMicroseconds(note / 2); elapsed_time += (note); } } void kbd_init() { char ack; kbd.write(0xff); ack = kbd.read(); ack = kbd.read(); } void setup(){ Serial.begin(9600); pinMode(9,OUTPUT); kbd_init(); } void loop() { code = kbd.read(); if (code==0xF0) { code = kbd.read(); code=0; } if (code==0x1C) { playTone(play_z); } else if (code==0x1B) { playTone(play_c); } else if (code==0x23) { playTone(play_d); } else if (code==0x2B) { playTone(play_e); } else if (code==0x34) { playTone(play_f); } else if (code==0x33) { playTone(play_g); } else if (code==0x3B) { playTone(play_a); } else if (code==0x42) { playTone(play_b); } else if (code==0x4B) { playTone(play_C); } Serial.println(code, HEX); } |
Теперь компилируем и записываем в мк. Если хотите, можете послушать.
Клавиши управления: «A» «S» «D» «F» «G» «H» «J» «K» «L»
Немогу загрузить библиотеку выдаёт ошибку помогите найти
Можете подробнее описать проблему? Если вы насчет ссылки, то она работает: http://polesite.ru/wp-content/uploads/files/ps2_kbd_piano.zip