Arduino и клавиатура PS/2

Нечего ночью было делать, поэтому игрался с наручной, когда-то, клавиатурой с интерфейсом PS/2 и подключением ее к моей arduino nano.

Вот чем хороша дуинка, так это своим сообществом и кучей отлаженных работающих скетчей и программ. Как дизайнер, ты можешь придумывать абсолютно НОВОЕ устройство как систему, не теряя времени на тысячу раз изведанные и разобранные вещи. Просто берешь их за основу, комбинируешь, дописываешь истинно новое.

Итак задача: подключить к arduino клаву и заставить ее слать символы в serial порт.

Для решения нам потребуется библиотека PS2Keyboard и схема Э5 подключения по средствам Ps/2. А так же, немного гугла в моем случае, ибо в лоб решить задачу с моей платкой не получилось. А все потому, что пины…)) Просто нужно поменять пины в скетче, но так как я дилетант, а дело было ночью, то разбираться по даташитам, какой из выводов отвечает за внешние прерывания, а на каком можно повесить таймер, мне стало затруднительно. Проще было отыскать в сети.) Схема подключения:

Итак, рабочий скетч:

#include <PS2Keyboard.h>
 
const int DataPin = 9;
const int IRQpin =  3;
 
PS2Keyboard keyboard;
 
void setup() {
  delay(1000);
  keyboard.begin(DataPin, IRQpin);
  Serial.begin(9600);
  Serial.println("Keyboard Test:");
}
 
void loop() {
  if (keyboard.available()) {
 
    // read the next key
    char c = keyboard.read();
 
    // check for some of the special keys
    if (c == PS2_ENTER) {
      Serial.println();
    } else if (c == PS2_TAB) {
      Serial.print("[Tab]");
    } else if (c == PS2_ESC) {
      Serial.print("[ESC]");
    } else if (c == PS2_PAGEDOWN) {
      Serial.print("[PgDn]");
    } else if (c == PS2_PAGEUP) {
      Serial.print("[PgUp]");
    } else if (c == PS2_LEFTARROW) {
      Serial.print("[Left]");
    } else if (c == PS2_RIGHTARROW) {
      Serial.print("[Right]");
    } else if (c == PS2_UPARROW) {
      Serial.print("[Up]");
    } else if (c == PS2_DOWNARROW) {
      Serial.print("[Down]");
    } else if (c == PS2_DELETE) {
      Serial.print("[Del]");
    } else {
 
      // otherwise, just print all normal characters
      Serial.print(c);
    }
  }
}
#include <PS2Keyboard.h>

const int DataPin = 9;
const int IRQpin =  3;

PS2Keyboard keyboard;

void setup() {
  delay(1000);
  keyboard.begin(DataPin, IRQpin);
  Serial.begin(9600);
  Serial.println("Keyboard Test:");
}

void loop() {
  if (keyboard.available()) {

    // read the next key
    char c = keyboard.read();

    // check for some of the special keys
    if (c == PS2_ENTER) {
      Serial.println();
    } else if (c == PS2_TAB) {
      Serial.print("[Tab]");
    } else if (c == PS2_ESC) {
      Serial.print("[ESC]");
    } else if (c == PS2_PAGEDOWN) {
      Serial.print("[PgDn]");
    } else if (c == PS2_PAGEUP) {
      Serial.print("[PgUp]");
    } else if (c == PS2_LEFTARROW) {
      Serial.print("[Left]");
    } else if (c == PS2_RIGHTARROW) {
      Serial.print("[Right]");
    } else if (c == PS2_UPARROW) {
      Serial.print("[Up]");
    } else if (c == PS2_DOWNARROW) {
      Serial.print("[Down]");
    } else if (c == PS2_DELETE) {
      Serial.print("[Del]");
    } else {

      // otherwise, just print all normal characters
      Serial.print(c);
    }
  }
}

Обращаем внимание на пины!! Для ардуино нано:

const int DataPin = 9;
const int IRQpin =  3;
const int DataPin = 9;
const int IRQpin =  3;

А вот фото как все работает:

Конечно, следующая стадии — прикручивание wifi и bluetooth, потом написания приложения для iOS и android и размещение проекта на kickstarter.

Запись опубликована в рубрике ARM. Добавьте в закладки постоянную ссылку.

         
Подписаться на новые статьи блога:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.