Поговорим о клавиатурах. Часть 5 - Что можно найти на свалке радиоэлектронного хлама

28.01.2018 12:17

jazon



Поговорим о клавиатурах. Часть 5 - Что можно найти на свалке радиоэлектронного хлама

        Всем привет, в этот раз речь снова пойдёт о клавиатурах, но это будет не совсем обычный разговор. Необычный потому что в статье будет описываться необычный модуль, точнее не тот что можно в данный момент взять и заказать с Алиэкспресс, а такой, который можно найти на просторах техногенной свалки. Да... Именно подключение и работа с таким клавиатурным модулем и будет рассмотрена в данной статье, и возможно кто то из вас откроет для себя что то новое.

        Итак, клавиатурный модуль был найден на просторах техногенной свалки случайно, и если бы не увлечение радиоэлектроникой, то скорее всего, можно было бы его откинуть ногой подальше, пройти мимо и забыть. Но ведь мы же ардуиньщики, и фраза "подключение к ардуино ..." для нас является почти сакральной. Поэтому модуль был подобран, исследован визуально, рядом было найдено то чему он принадлежал во времена своей службы. Это был кнопочный телефон Siemens, да, это был когда то кнопочный телефон, сродни телефону дисковому, в далёкие советские времена. Обладатель такого кнопочного телефона, наверное чувствовал себя очень крутым парнем(или крутой гёрлой, хехе).

        Далее, ниже, можно лицезреть фотографии этого девайса. Также, на крайнем правом фото, вы увидте аналогичный девайс, который можно заказать на Алиэкспресс.

Тройное фото девайсов


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

Девайс разобранный на части


        Исследование и разбор полетов по данному девайсу можно пожалуй начать с гибкой контактной платы, именно она является сердцем устройства. На фото хорошо видна разводка контактов, именно по ним можно вычислить какие(а также откуда и куда) сигналы будут приходить на контакты и на контроллер. Эта процедура не составит большого труда...

Пленочная гибкая контактная плата

        Итак, путем нехитрого осмотра было выяснено, что клавиатура может принимать 5 входных сигналов и отдавать 4 выходных сигнала, ниже приведена таблица подачи и съёма высоких логических уровней с контактов клавиатуры, а также привязка номерных кнопок при работе с комбинацией подачи сигналов на входа.

Таблица 1. Комбинации контактов и связанные кнопки

        И всё таки, 5 входных и 4 выходных сигнала это многовато для контроллера Atmega 328, ведь в сумме нам придется задействовать 9 пинов платы Arduino. Но остановимся пока на этом, ведь нам надо просто подключить модуль к плате Arduino и прочесть нажатия кнопок. Следующая схема демонстрирует подключение клавиатуры к плате Arduino, для того чтобы подключить её, нам потребуется 5 штук резисторов, номиналом по 10к(10 килоОм). Еще, мы использовали для удобной связки маленькую макетную плату bredboard, на схеме она не показана, но вы можете увидеть её использование в обзорном видео в конце статьи. Итак, схема подключений...

Схема 1. Подключение клавиатуры к плате Arduino


        Теперь, когда у нас есть схема подключений и таблица соответствий принимаемых/отдаваемых сигналов с привязкой к кнопкам, отстаётся только придумать скетч для работы с этой штукой, в скетче мы будет активно использовать монитор порта, также - скетч выполнен без обработки фильтрации дребезга контактов кнопок, так сказать сырой набросок. Но в дальнейшем опираясь именно на этот скетч мы создадим более продвинутый вариант использования данной клавиатуры.

Скетч 1. Первоначальная обработка нажатий кнопок и отслеживание нажатий в мониторе порта.
short OutPortMap[4] = {5, 6, 7, 8};
short  InPortMap[5] = {9, 10, 11, 12, 13};
short ScanPortMap[4][3] = {{9, 10, 12}, {10, 11, 12}, {10, 11, 12}, {9, 12, 13}};
short KeyPressMap[4][3] = {{5, 4, 6}, {7, 8, 9}, {10, 0, 11}, {2, 3, 1}};

short ScanCounter = 0;

void setup() 
{
  Serial.begin(9600);

  //Определяем пины для выходных портов
  for(int i = 0; i < 4; i ++)
  {
    pinMode(OutPortMap[i], OUTPUT);
    digitalWrite(OutPortMap[i], LOW);
  }
  //Определяем пины для входных портов
  for(int i = 0; i < 5; i ++)
    pinMode(InPortMap[i],  INPUT);
}

void loop() 
{
  digitalWrite(OutPortMap[ScanCounter], HIGH);

  for(int j = 0; j < 3; j ++)
  {
    if(digitalRead(ScanPortMap[ScanCounter][j]))
      Serial.println(KeyPressMap[ScanCounter][j]);
  }

  digitalWrite(OutPortMap[ScanCounter], LOW);
  
  if(ScanCounter == 3)
    ScanCounter = 0;
  else
    ScanCounter ++;
}

Как всё это работает вы можете увидеть из обзорного видео к статье.

Видео 1. Начало работы с клавиатурой.



Это еще не конец, продолжение следует....



Расскажи о нас

Сообщение

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