Бибилиотека IRremote и работа с ней

knaight
Offline
Зарегистрирован: 05.11.2014

Доброго времени суток.

Никак не могу найти толкового описания использования данной библиотеки.

Готовые примеры с JVC и Панасоником есть

но вот при использовании той же irsend.sendJVC(JVC1, 16,0) хотелось бы понимать что такое 16 и что такое 0.

 

knaight
Offline
Зарегистрирован: 05.11.2014

Неужели никто не работает с пультами?

Или может у кого то завалялся пример кода для отпраки посылки на телевизоры Самсунг....

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Находим исходники в бесплатном гугле с помощью запроса "irremote arduino", открываем первую ссылку и в ней находим заголовочный файл IRremote.h:

https://github.com/shirriff/Arduino-IRremote/blob/master/IRremote.h

Ищем JVC и видим:

void sendJVC(unsigned long data, int nbits, int repeat); // *Note instead of sending the REPEAT constant if you want the JVC repeat signal sent, send the original code value and change the repeat argument from 0 to 1. JVC protocol repeats by skipping the header NOT by sending a separate code value like NEC does.

А если этого мало, то открываем

https://github.com/shirriff/Arduino-IRremote/blob/master/IRremote.cpp

Ищем JVC и смотрим код:

void IRsend::sendJVC(unsigned long data, int nbits, int repeat)
{
    enableIROut(38);
    data = data << (32 - nbits);
    if (!repeat){
        mark(JVC_HDR_MARK);
        space(JVC_HDR_SPACE); 
    }
    for (int i = 0; i < nbits; i++) {
        if (data & TOPBIT) {
            mark(JVC_BIT_MARK);
            space(JVC_ONE_SPACE); 
        } 
        else {
            mark(JVC_BIT_MARK);
            space(JVC_ZERO_SPACE); 
        }
        data <<= 1;
    }
    mark(JVC_BIT_MARK);
    space(0);
}

А рядом есть еще и самсунг:

void IRsend::sendSAMSUNG(unsigned long data, int nbits)
{
  enableIROut(38);
  mark(SAMSUNG_HDR_MARK);
  space(SAMSUNG_HDR_SPACE);
  for (int i = 0; i < nbits; i++) {
    if (data & TOPBIT) {
      mark(SAMSUNG_BIT_MARK);
      space(SAMSUNG_ONE_SPACE);
    } 
    else {
      mark(SAMSUNG_BIT_MARK);
      space(SAMSUNG_ZERO_SPACE);
    }
    data <<= 1;
  }
  mark(SAMSUNG_BIT_MARK);
  space(0);
}

Какая нужна документация на код в десять строк? Всё равно непонятно? Тогда читайте книги по С.

 

MW
Offline
Зарегистрирован: 23.01.2017

Здравствуйте помогите мне

при нажати на среднюю кнопку ИК пульта должно остановиться процесс. Как это сделать

//Stepper with IR remote

#include "Stepper.h"
#include "IRremote.h"

/*----- Variables, Pins -----*/
#define STEPS  32   // Number of steps per revolution of Internal shaft
int  Steps2Take=0;  // 2048 = 1 Revolution
int receiver = 6; // Signal Pin of IR receiver to Arduino Digital Pin 6

/*-----( Declare objects )-----*/
// Setup of proper sequencing for Motor Driver Pins
// In1, In2, In3, In4 in the sequence 1-3-2-4

Stepper small_stepper(STEPS, 8, 10, 9, 11);
IRrecv irrecv(receiver);    // create instance of 'irrecv'
decode_results results;     // create instance of 'decode_results'

void setup()
{
  irrecv.enableIRIn(); // Start the receiver
}

void loop()
{
if (irrecv.decode(&results)) // have we received an IR signal?

  {
    switch(results.value)

    {

      case 0xFF629D: // UP button pressed
                      small_stepper.setSpeed(700); //Max seems to be 700
                      Steps2Take  =  2048;  // Rotate CW
                      small_stepper.step(Steps2Take);
                      delay(500);
                      break;
                     
      case 0xFFA857: // DOWN button pressed
                      small_stepper.setSpeed(700);
                      Steps2Take  =  -2048;  // Rotate CCW
                      small_stepper.step(Steps2Take);
                      delay(500);
                      break;       
     case 0xFF02FD: // MIDDLE button pressed
                      
                      break;                                                         
     }
    
      irrecv.resume(); // receive the next value
  }  

}/* --end main loop -- */

Voodoo Doll
Voodoo Doll аватар
Offline
Зарегистрирован: 18.09.2016
small_stepper.setSpeed(0);
матвей
Offline
Зарегистрирован: 08.02.2017
Arduino: 1.7.7 (Windows 7), Плата"Arduino Uno"
 
sketch_feb08c.ino:2:29: fatal error: IRremote_header.h: No such file or directory
 
compilation terminated.
 
Ошибка компиляции.
 
  Это сообщение будет содержать больше информации чем
  "Отображать вывод во время компиляции"
  включено в Файл > Настройки
что делать 
 
ZIA
ZIA аватар
Offline
Зарегистрирован: 04.02.2017

fatal error: IRremote_header.h: No such file or directory

IDE откуда такой? Вроде как не бывает таких релизов

матвей
Offline
Зарегистрирован: 08.02.2017

Помогите в амперка вики нашёл проэкт управление устройствами по блютус скопировал скачал библиотеки выдаёт ошибку плата ардуино уно тройка слот шилд и тройка модуль hc 05 и ик передатчик и ик приёмник тоже тройка модули

Баллы: 1
Плюсую!
0
Минусую
0
Arduino: 1.7.7 (Windows 7), Плата"Arduino Uno"

sketch_feb08c.ino:2:29: fatal error: IRremote_header.h: No such file or directory

compilation terminated.

Ошибка компиляции.

Это сообщение будет содержать больше информации чем
"Отображать вывод во время компиляции"
включено в Файл > Настройки
что делать

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

В библиотеке IRremote нет файла IRremote_header.h, который подключается в скетче. Спрашивай там, где качал скетч и библиотеку.

UPD: В библиотеке IRremote есть файл IRremote.h. Откуда взялся IRremote_header.h непонятно. Возможно какая-то модифицированная библиотека.

матвей
Offline
Зарегистрирован: 08.02.2017

Это было в скетче от амперки
http://wiki.amperka.ru/projects:ir-repeater

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Ну дык и скачай оттуда IRremote_header.h и другие файлы, необходимые для скетча. В чём проблема-то?

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Вот еще, качать! Зачем! Может человек пришел пообщаться, а ты ему, таво, давай качай! :)

матвей
Offline
Зарегистрирован: 08.02.2017
// Подключаем код для работы ИК-приёмника и передатчика
#include "IRremote_header.h"
// Подключаем код для работы с приложением remoteXY
#include "remoteXY_header.h"
// Подключаем код с логикой работы с энергонезависимой памятью
#include "eeprom_logic.h"
// Подключаем код с логикой работы с ИК-командами
#include "IRremote_logic.h"
 
// Переменная для хранения состояния "запись ИК-сигналов"
bool recordState = false;
 
// Переменная для хранения состояния кнопки записи
bool recButtonLastState = false;
 
// Переменная для хранения номера последеней нажатой кнопки на телефоне
byte buttonLast = 0;
 
void setup() {
  // Инициализируем remoteXY
  RemoteXY_Init ();
  // Запускаем работу ИК-приёмника (IRremote_header.h)
  irrecv.enableIRIn();
  // Если у нас есть записанные комбинации ИК-сигналов - достаём их (eeprom_logic.h)
  eepromDataInit();
}
 
void loop() {
  // Опрашиваем remoteXY. Не пришли ли новые команды по bluetooth?
  RemoteXY_Handler ();
  // Запоминаем состояние кнопки record на смартфоне.
  bool recButtonState = RemoteXY.record;
  // Если состояние кнопки изменилось...
  if (recButtonLastState != recButtonState) {
    // ... запомним новое состояние этой кнопки.
    recButtonLastState = recButtonState;
    // Если кнопка record нажата...
    if (recButtonState) {
      // меняем состояние "запись ИК-сигналов" на противоположное
      recordState = !recordState;
    }
    // Если мы вошли в состояние записи...
    if (recordState) {
      // ... зажгём красный "светодиод" на смартфоне.
      RemoteXY.recMode_r = 255;
      // Если мы вышли из состояния записи
    } else {
      // ... сохраним записанные данные ИК-пульта
      saveAll();
      // и потушим светодиод
      RemoteXY.recMode_r = 0;
    }
  }
  // Если на смартфоне была нажата новая кнопка...
  if (RemoteXY.buttons != buttonLast) {
    // ... сохраним её значение.
    buttonLast = RemoteXY.buttons;
    // Еслим мы в состоянии записи — сохраним записанные данные ИК-пульта,
    // если нет — отправим ИК-сигналы, соответствующие этой кнопке (IRremote_logic.h)
    recordState ? saveAll() : sendButton(buttonLast);
  }
  // Если мы в состоянии записи, и пришла новая команда с ИК-пульта...
  if ((recordState) && (irrecv.decode(&results))) {
    // сохраним команду с ИК-пульта (IRremote_logic.h) в последовательность команд текущей кнопки
    storeCode(&results, buttonLast);
    // перезапустим ИК-приёмник
    irrecv.resume();
  }
}
// Функция для сохраняем данных с ИК-пульта
void saveAll() {
  // Если была принята хотя бы одна команда с ИК-пульта
  if (macroPos > 0) {
    // записываем принятую последовательность команд (eeprom_logic.h)
    saveIRToEEPROM();
    // обнуляем счётчик команд
    macroPos = 0;
  }
}