DigiSpark attiny85 считываем код пульта ДУ.

Разработка проектов под заказ

Сегодня в уроке рассмотрим, как можно считать код клавиш с пульта ДУ при помощи DigiSpark на микроконтроллере attiny85. Боле подробно познакомиться с отладочной платой DigiSpark attiny85 вы можете вот в этой статье.

Сегодня в уроке рассмотрим, как можно считать код клавиш с пульта ДУ при помощи DigiSpark на микроконтроллере attiny85.

Программировать DigiSpark будем в среде Arduino IDE. Для получения кода клавиш с инфракрасного пульта дистанционного управления необходимо установить дополнительную библиотеку, но обо всем по порядку.

Настройка Arduino IDE для работы с DigiSpark и установка библиотеки Adafruit Trinket USB.

Для начала нам необходимо настроить Arduino IDE для работы с платой DigiSpark. Пошаговую инструкцию вы можете посмотреть в статье DigiSpark ATtiny85 настройка Arduino IDE и установка драйвера. А в данном уроке вкратце расскажу про данные настройки.

  • Добавляем DigiSpark в список отладочных плат Arduino IDE.

В открывшемся окне настроек нам нужно добавить ссылку для менеджера плат.

  • Устанавливаем драйвер для DigiSpark.

Установка драйверов для DigiSpark.

Все материалы, используемые в данном уроке, вы можете скачать внизу статьи в разделе «Файлы для скачивания».

Установка библиотеки Adafruit Trinket USB.

Библиотека Adafruit Trinket USB содержит различные функции позволяющие использовать микроконтроллер, такой как DigiSpark, Arduino Micro, Arduino Leonardo в качестве клавиатуры, мышки для ПК. В данном уроке будем использовать библиотеку TrinketHidCombo, которая идет в составе набора библиотек Adafruit Trinket USB. Давайте приступим к её установке.

Для того чтобы установить библиотеку Adafruit Trinket USB необходимо её скачать с сайта GitHub.

 библиотеку Adafruit Trinket USB необходимо её скачать

После чего с помощью инструмента «Скетч -> Подключить библиотеку -> Добавить ZIP библиотеку..». Загружаем библиотеку в среду разработки.

Скетч Подключить библиотеку Добавить ZIP библиотеку..

Для этого выбираем скаченный архив. После чего мы увидим, что установка прошла успешно. Сейчас можно перейти к написанию кода. Также с библиотекой устанавливаются примеры, которые помогут лучше понять возможности данного инструмента.

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

Схема подключения к DigiSpark IR приемника в виде модуля KY-022.

Для простоты использования в уроке будем использовать модуль IR приемника KY-022. Про данный модуль у меня есть отдельный урок, почитать который вы сможете тут. Итак, берем модуль KY-022 и подключаем его к DigiSpark по схеме приведённой ниже.

Схема подключения к DigiSpark IR приемника в виде модуля KY-022.

Схема подключения ИК приёмника (IRremote) KY-022 к DigiSpark и пульт ДУ.

Схема подключения ИК приёмника (IRremote) KY-022 к DigiSpark и пульт ДУ.

Вот так будет схематично выглядеть передача сигнала с пульта ДУ. Сейчас перейдем к программной части и передадим полученный код с пульта ДУ на компьютер.

Скетч DigiSpark attiny85 считывания кода с пульта ДУ.

Для начала нам необходимо подключить библиотеку, которая позволит печатать команды полученные с пульта ДУ в любой текстовый документ на вашем компьютере.

#include "TrinketHidCombo.h"

Затем в блоке setup() сделаем все необходимые настройки.

  DDRB |= (1 << DDB1);      //P1 (LED) OUT в скетче не использован
  PORTB |= 1 << PB2;        // подтяжка PB2 не помешает.
  GIMSK |= 1 << INT0;       //прерывание int0 включить
  MCUCR |= 1 << ISC00;      //Любое логическое изменение в INT0 генерирует запрос на прерывание
  GTCCR |= 1 << PSR0; TCCR0A = 0;
  TCCR0B = (1 << CS02) | (1 << CS00); 
  TIMSK = 1 << TOIE0;       //таймер прерывания
  TrinketHidCombo.begin(); // запустите механизм USB-устройства

Напишем 2 вспомогательные функции.

ISR (INT0_vect) {
  if (PINB & 1 << 2) { // Если лог1
    TCNT0 = 0;
  }
  else {
    tcnt = TCNT0; // если лог 0
    if (startflag) {
      if (30 > tcnt  && tcnt > 2) {
        if (tcnt > 15 && m < 32) {
          irdata |= ((uint32_t)1 << m);
        }
        m++;
      }
    }
    else  startflag = 1;
  }
}
ISR (TIMER0_OVF_vect) {
  //если сработало это прерывание, значит конец посылки
  if (m) {
    complete = 1; m = 0; startflag = 0; keydata = irdata; irdata = 0; // если индекс не 0, то создать флаг конца
  }
}

И в основном цикле loop() получение значения с IR приемника выведем на ПК в любом текстовом редакторе.

if (complete) {         // получили что то сприемника
    TrinketHidCombo.println(keydata, HEX); 
    TrinketHidCombo.pressKey(0, 0); // печатем полуенное значение
    delay(200);           // во избежание слишком частого повтора ввода клавиш
    complete = 0;
  }

Проверка кода и вывод полученных значений в текстовый документ.

После загрузки кода в Digispark приступим к проверке кода. Для этого подключим плату к компьютеру и откроем любой текстовый документ и нажмем по порядку все клавиши на пульте дистанционного управления. Получим список команд всех клавиш в текстовом документе, как показано на картинке ниже.

Получим список команд всех клавиш в текстовом документе,

У вас, наверное, возник резонный вопрос: Зачем это нужно? Ведь с помощью Arduino UNO получить коды клавиш пульта ДУ проще. Так и есть. Но данный урок это подготовка базы для реализации управления приложениями на ПК с помощью Digispark. О чем расскажу в ближайшем проекте.

Появились вопросы или предложения оставляйте их в комментариях.

Понравился урок. DigiSpark attiny85 считываем код пульта ДУ? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте, в группу на Facebook.

Спасибо за внимание!

Технологии начинаются с простого!

Фотографии к статье

Файлы для скачивания

Скетч DigiSpark attiny85 считывания кода с пульта ДУ Скетч DigiSpark attiny85 считывания кода с пульта ДУ.ino2 Kb 32 Скачать
DigiSpark Drivers DigiSpark Drivers.zip2861 Kb 21 Скачать

Комментарии

Ваше Имя*