цифровая электроника
вычислительная техника
встраиваемые системы

 


Как подключить USB-клавиатуру к Arduino

Автор: Mike(admin) от 8-11-2021, 03:55

Вы когда-нибудь задумывались об использовании USB-клавиатуры с Arduino в одном из ваших проектов? На самом деле, осуществить это легче, чем вы могли бы подумать. Клавиатуры USB по-прежнему поддерживают устаревший последовательный протокол PS/2. Поэтому они могут легко использовать в проектах Arduino. Схема и код, приведенные в данном проекте, должны работать со всеми Arduino на основе микроконтроллеров Atmega AVR, такими как Uno, Nano, Mega и т.п.


Как подключить USB-клавиатуру к Arduino

Это скорее пример того, как интегрировать с Arduino клавиатуры USB или PS/2 простым и экономичным способом. Поэтому в данном случае нет поддержки клавиш модификации, таких как Shift или Alt. Однако здесь мы используем полностью функциональную библиотеку PS/2, доступная через менеджер библиотек Arduino IDE.


Подключение компонентов проекта взаимодействия USB-клавиатуры с Arduino с выводом данных на ЖК-дисплей производится согласно следующей схеме.


Как подключить USB-клавиатуру к Arduino

На макетной плате это может выглядеть следующим образом.


Как подключить USB-клавиатуру к Arduino

Код проекта представлен далее.



#define CLOCK 6 //D-
#define DATA 7  //D+

#include <LiquidCrystal.h>

const char keymap[] = {
  0, 0,  0,  0,  0,  0,  0,  0,
  0, 0,  0,  0,  0,  0, '`', 0,
  0, 0 , 0 , 0,  0, 'q','1', 0,
  0, 0, 'z','s','a','w','2', 0,
  0,'c','x','d','e','4','3', 0,
  0,' ','v','f','t','r','5', 0,
  0,'n','b','h','g','y','6', 0,
  0, 0, 'm','j','u','7','8', 0,
  0,',','k','i','o','0','9', 0,
  0,'.','/','l',';','p','-', 0,
  0, 0,'\'', 0,'[', '=', 0, 0,
  0, 0,13, ']', 0, '\\', 0, 0,
  0, 0, 0, 0, 0, 0, 127, 0,
  0,'1', 0,'4','7', 0, 0, 0,
  '0','.','2','5','6','8', 0, 0,
  0,'+','3','-','*','9', 0, 0,
  0, 0, 0, 0 };

const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup()
{
  Serial.begin(115200);
  pinMode(CLOCK, INPUT_PULLUP); // Для большинства клавиатур достаточно встроенных подтягивающих резисторов
  pinMode(DATA, INPUT_PULLUP);
  pinMode(13, OUTPUT);
  lcd.begin(20, 4);
  lcd.cursor();
  lcd.blink();
  bitSet(PCICR, PCIE2); // Включить прерывания по изменению на выводах D0-D7
  bitSet(PCMSK2, CLOCK);
 }

uint8_t lastscan;
uint8_t line = 0, col = 0;


ISR(PCINT2_vect)
{
  uint16_t scanval = 0;
  for(int i = 0; i<11; i++)
  {
    while(digitalRead(CLOCK));
    scanval |= digitalRead(DATA) << i;
    while(!digitalRead(CLOCK));
  }
  scanval >>= 1;
  scanval &= 0xFF;
  Serial.println(scanval, HEX);
  if(lastscan != 0xF0 && scanval != 0xF0)
  switch(scanval)
  {
    case 0x5A: //Enter
      lcd.setCursor(0, ++line & 0x03);
      col = 0;
      break;
    case 0x66: //Backspace
      lcd.setCursor(--col, line);
      lcd.write(' ');
      lcd.setCursor(col, line);
    break;
    default:
      lcd.write(keymap[scanval]);
      col++;
  }
  lastscan = scanval;
  bitSet(PCIFR, PCIF2);
}

void loop()
{
  /*digitalWrite(13, LOW);
  delay(500);  
  digitalWrite(13, HIGH);
  delay(500);*/
}



© digitrode.ru


Теги: Arduino, USB, клавиатура




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий
Цитата
  • able

  • 8 ноября 2021 08:55
  • Группа: Гости
  • ICQ:
  • Регистрация: --
  • Статус:
  • Комментариев: 0
  • Публикаций: 0
^
В тексте программы ошибка?
На схеме LCD подключен 2,3,4,5
а в скетче 4,5,6,7

Понял.
Вопрос снят