Vytápění

Jak přečíst kód z dálkového ovladače?

V tomto návodu vytvoříme univerzální IR dálkový ovladač. Šest tlačítek univerzálního IR dálkového ovladače vám umožní naprogramovat se k přenosu příkazů z jakéhokoli* jiného IR dálkového ovladače. Kód tlačítka je uložen v energeticky nezávislé oblasti paměti Arduina – EEPROM. To znamená, že nemusíte programovat tlačítka pokaždé, když zapnete univerzální IR dálkový ovladač.

*Univerzální IR dálkové ovládání může reprodukovat pouze signály těch IR dálkových ovladačů, které přenášejí data v jednom informačním paketu ne delším než 32 bitů a také mají (nebo nemají) stejné zadržovací pakety (opakované pakety).

Potřebujeme:

  • Arduino Uno x 1ks.
  • Modul Trema – IR přijímač x 1 ks.
  • Modul Trema – IR vysílač x 1 ks.
  • Modul Trema – tlačítko (modrý) x 7 ks.
  • Modul Trema – bzučák x 1 ks.
  • Trema Shield x 1ks.
  • Konstruktor pro vytvoření rámce.

K realizaci projektu potřebujeme nainstalovat knihovnu:

  • iarduino_IR pro práci s IR transceivery.
  • EEPROM – součástí standardní sady Arduino IDE.

Jak instalovat knihovny najdete na stránce Wiki – Instalace knihoven v Arduino IDE.

Video:

Elektrické schéma:

Všechny moduly použité v lekci lze připojit k libovolným pinům Arduino, digitálním i analogovým. Čísla kolíků, ke kterým jsou moduly připojeny, jsou vyznačena na náčrtu.

  • Tlačítka Trema jsou připojena k digitálním pinům 2-8.
  • IR přijímač Trema je připojen k digitálnímu pinu 9.
  • IR vysílač Trema je připojen k digitálnímu pinu 10.
  • Bzučák Trema je připojen k digitálnímu kolíku 11.
  • Všechny moduly jsou připojeny k Arduino Uno přes Trema Shield.

Algoritmus operace:

Odesílání příkazů:
  • Když stisknete jedno ze 6 tlačítek univerzálního IR dálkového ovladače, vyšle příkaz odpovídající stisknutému tlačítku.
  • Pokud stisknutému tlačítku není přiřazen žádný příkaz, IR dálkové ovládání vydá pípnutí indikující chybu.
Přiřazení příkazů tlačítkům:
  • Chcete-li přiřadit příkazy tlačítkům univerzálního IR dálkového ovladače, musíte provést následující kroky:
    • Stiskněte tlačítko „nahrát příkaz“ a bez jeho uvolnění stiskněte tlačítko na univerzálním IR ovladači, kterému chceme přiřadit příkaz z jiného IR ovladače.
    • Univerzální IR dálkový ovladač vydá dvě krátká pípnutí, která označí, že je připraven přijímat data.
    • Stiskněte tlačítko jiného IR dálkového ovladače, jehož kód chceme přečíst.
    • Jakmile je kód přečten, univerzální IR dálkový ovladač vydá krátké pípnutí indikující, že kód byl úspěšně zapsán. Nyní můžete uvolnit všechna tlačítka.

    Programový kód:

    #include // Подключаем библиотеку для работы с ИК-приёмником #include // Подключаем библиотеку для работы с ИК-передатчиком #include // Подключаем библиотеку для работы с EEPROM (энергонезависимой областью памяти) // Указываем выводы к которым подключены модули: const uint8_t PinButton1= 2; // Объявляем константу с указанием вывода к которому подключена кнопка 1 const uint8_t PinButton2= 3; // Объявляем константу с указанием вывода к которому подключена кнопка 2 const uint8_t PinButton3= 4; // Объявляем константу с указанием вывода к которому подключена кнопка 3 const uint8_t PinButton4= 5; // Объявляем константу с указанием вывода к которому подключена кнопка 4 const uint8_t PinButton5= 6; // Объявляем константу с указанием вывода к которому подключена кнопка 5 const uint8_t PinButton6= 7; // Объявляем константу с указанием вывода к которому подключена кнопка 6 const uint8_t PinButton7= 8; // Объявляем константу с указанием вывода к которому подключена кнопка 7 (запись) iarduino_IR_RX IR_Read ( 9); // Объявляем объект IR_Read с указанием вывода к которому подключён ИК-приёмник iarduino_IR_TX IR_Write (10); // Объявляем объект IR_Write с указанием вывода к которому подключён ИК-передатчик const uint8_t PinBuzzer= 11; // Объявляем константу с указанием вывода к которому подключен зуммер // Объявляем для хранения временных данных: uint8_t ValButton= 0; // Объявляем переменную для хранения номера нажатой кнопки uint32_t ValCode; // Объявляем переменную для хранения кода кнопки char ValProtocol[26]; // Объявляем строку для хранения 25 символов протокола передачи данных + символ конца строки void setup() < // Инициируем работу с ИК-приёмником и ИК-передатчиком: IR_Read.begin(); // Инициируем работу с ИК-приёмником IR_Write.begin(); // Инициируем работу с ИК-передатчиком // Конфигурируем выводы: pinMode(PinButton1, INPUT); // Конфигурируем вывод с подключенной кнопкой №1 в режим входа pinMode(PinButton2, INPUT); // Конфигурируем вывод с подключенной кнопкой №2 в режим входа pinMode(PinButton3, INPUT); // Конфигурируем вывод с подключенной кнопкой №3 в режим входа pinMode(PinButton4, INPUT); // Конфигурируем вывод с подключенной кнопкой №4 в режим входа pinMode(PinButton5, INPUT); // Конфигурируем вывод с подключенной кнопкой №5 в режим входа pinMode(PinButton6, INPUT); // Конфигурируем вывод с подключенной кнопкой №6 в режим входа pinMode(PinButton7, INPUT); // Конфигурируем вывод с подключенной кнопкой №7 в режим входа pinMode(PinBuzzer, OUTPUT); // Конфигурируем вывод с подключенным зуммером в режим выхода >void loop()< // Проверяем состояние кнопок: if(digitalRead(PinButton1))< ValButton=1;>else // Если нажата кнопка 1, записываем число 1 в переменную ValButton if(digitalRead(PinButton2))< ValButton=2;>else // Если нажата кнопка 2, записываем число 2 в переменную ValButton if(digitalRead(PinButton3))< ValButton=3;>else // Если нажата кнопка 3, записываем число 3 в переменную ValButton if(digitalRead(PinButton4))< ValButton=4;>else // Если нажата кнопка 4, записываем число 4 в переменную ValButton if(digitalRead(PinButton5))< ValButton=5;>else // Если нажата кнопка 5, записываем число 5 в переменную ValButton if(digitalRead(PinButton6))< ValButton=6;>else // Если нажата кнопка 6, записываем число 6 в переменную ValButton // Если кнопки 1-6 не нажаты, записываем число 0 в переменную ValButton и подавляем дребезг // Выполняем действия при нажатии на кнопку: if(ValButton) < // Если нажата кнопка 1-6 // Чтение данных: if(digitalRead(PinButton7))< // Если нажата кнопка 7 (запись), то . >((29-i)*8)));> // Vyplňte poslední 4 bajty daty z proměnné ValCode (toto je kód tlačítka) > myTone(100); // Výstup krátkého zvukového signálu oznamujícího úspěšné nahrávání > > // Odesílání dat: >else < // Pokud není stisknuto tlačítko 7, pak . // Přečtěte si protokol přenosu dat a kód tlačítka z EEPROM: for(uint8_t i=0; i// Zapište prvních 26 bajtů do řádku ValProtocol (toto je protokol přenosu dat) else // Zapište poslední 4 bajty do proměnné ValCode (toto je kód tlačítka) >// Odešlete kód tlačítka pomocí zadaného protokolu přenosu dat: if (IR_Write.protocol(ValProtocol))< // Nastaví protokol přenosu čtení dat ValProtocol IR_Write.send(ValCode, true); // Odeslání přečteného kódu tlačítka ValCode >else / / Pokud linka ValProtocol není protokol pro přenos dat, vyšle zvukový signál indikující chybu > > > // Funkce generující zvukový signál na výstupu PinBuzzer void myTone (uint32_t i)< i+=millis(); >

    Pro generování zvuku byla místo standardní funkce tone() napsána funkce myTone(), protože standardní funkce používá 2 hardwarové časovače, které již používá knihovna iarduino_IR.

    Odkazy:

    • Knihovna iarduino_IR.
    • Wiki – Instalace knihoven v Arduino IDE.
    • Wiki – IR přijímač (modul Trema).
    • Wiki – Trema Shield.
    • Programový kód.
    Přečtěte si více
    Proč je žárovka škodlivá?

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

Back to top button