Считывание ИК приемника код от пульта люстры по протоколу NEC

Здравствуйте может кто ни будь подсказать как считать код от пульта люстры. Дело в том IRremote библиотека устанавливал разные версий при считываний кода выдает разные бит и иногда Rawdata разные 71,61 и т.д. Был бы признателен если бы кто нибудь подсказал как считать и запрограммировать для управление с ардуино и esp8266. Заранее благодарен!!!

Поставить библиотеку и считать для начала примером из библиотеки.

А что Вы там

как Вы там

и почему у Вас

Про то мы не знаем, т.к. ни кода, ни схемы, ни фото Вашего девайса мы не видели, а хрустальные шары тут ещё Клапа много лет назад запретил :frowning:

Скажите пожалуйста, какой пример ставить чтоб прочитать код пульта? Протокол не знаю

Вопрос решен,прочитал коды

Я еще так долго никогда не пытался «поймать что скопировать» (постоянно обновление в странице) и вот результат.
Молодец!

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

Отважные у нас люди! Не скудеет земля :slight_smile:

12 лет не сморю этот «зомбоящик» и не жалею.
Столько свободного времени он жрёт!!!

1 лайк

У меня на фоне всегда работает, 1-й НТВ и все такое никогда не включаю.

У меня на фоне тоже всегда что-то «мурчит». Только не телевизор. Включаю сериал какой или фильм или аудиокнигу. Последнее лучше всего, но только если механической работой заниматься. Если думать - сильно отвлекают, фантазия увлекает в сюжет и вся мыслительная идет по женскому органу.

2 лайка

Вот это самое опасное на самом деле. Надо избавляться от этой привычки. Не хочу тут разводить, если интересно, сами почитайте, там про это (особенно про фон). Заодно поймёте почему я вообще никакое видео и аудио без крайней нужды не смотрю, предпочитаю читать.

1 лайк

Я тоже кроме НТВ ничего не смотрю-стоит фоном,тв называется Doffler,когда телек на витрине магазина стоял красивенький и большой ничего на яндекс не указывало,я только после покупки и включения дома понял что он того-с алисой…

Привычка, оно дело такое…

1 лайк

Да и когда дома один, а привык что кто-то еще есть всегда - как то не по себе. А так - болтовня есть, вроде как и не один.

Мои соболезнования

так вот что ворует энергию ЧИ )))
ЗЫ ПО - ЧИ - ТАТЬ

А где можно спросить на счет скетча? Проблема возникла…

Решено!
Делаю пульт ,о нем писал выше.Таймер0 настроен в режиме СТС,на переключение пин 6 с частотой 76 кГц,к нему подключен светодиод.Таймер2 отсчитывает временные интервалы (время свечения светодиода и время паузы).
Так вот-если просто запустить таймер0,то светодиод моргает с частотой 38 кГц-то что надо! Но если разрешить работу таймер2,то таймер0 начинал работу по переполнению и частота снижаласьвключения светодиода до 31 кГц

Вот такой код получился,работает нормально,осталось добавить DS3231 и дисплейчик :slight_smile:


//Константы для интервалов
const unsigned int  Preset_110ms=977;    // Предустановка счетчика на 110 мс      
const unsigned int  Preset_40ms=360;     //Предустановка счетчика на 40 мс    для повтора 
const byte          Preset_9ms=80;       // Предустановка счетчика на 9 мс
const byte          Preset_4_5ms=40;     // Предустановка счетчика на 4,5 мс
const byte          Preset_2_25ms= 20;    // Предустановка счетчика на 2,25 мс
const byte          Preset_1_6875ms=15;  // Предустановка счетчика на 1,6875 мс
const byte          Preset_562_5us=5;    // Предустановка счетчика на 562,5 мкс
volatile unsigned int Count_set;         //Для задания кол-ва тактов   
unsigned int Count;                      //Для отсчета тактов,1 такт=112,5 мксек
volatile boolean Flag=0;                 //Флаг что отсчет закончен
byte Address1=0,Address2 = 254;          //Адресс NEC устройства
byte Command1= 207,Command2 = 48;        //Команда NEC устройства
byte data; 
ISR (TIMER2_COMPA_vect) {                                    // 112.5 usec
  Count++; 
  if (Count==Count_set){Count=0;Flag=0;}       
}

void setup() {
Serial.begin(9600);
pinMode (6,OUTPUT); // выход генератора

//Настраиваем вывод таймера OC0A (PD6) на вывод
  PORTD&= ~(1<<PIND6);         //Значение по умолчанию 0.
  DDRD|= (1<<DDD6);            //Вывод PD6 - выход
  //Настраиваем Таймер0
  TCCR0A=0;TCCR0B=0;
  TCCR0A|= (1<<WGM01); //Выставляем режим CTC
  TCCR0B|= (1<<CS00);  //Ставим предделитель на значение 1. CS02=1. CS00=1. Запускаем генерацию
  OCR0A=0xD1;          //Выставляем значение счетчика (16000000/76000+1)
  TCCR0A|= (1<<COM0A0); //Инвертируем значение OC0A (PD6) по срабатыванию таймера.
//Настраиваем Таймер2, Прерывание от TIMER2 каждые 112,5 мкс 
//https://adior.ru/index.php/robototekhnika/178-timer-interrupt
  TCCR2A = 0;TCCR2B = 0; 
  OCR2A = 225;                                               // F=16000000/Prescale*Ocr2a = 8888,88 Ãö  = 112,5 ìêñ 
  TCCR2A = (1 << WGM21);                                     // CTC режим
  TIMSK2 |= (1 << OCIE2A);                                   // включение прерываний по совпадению
  TCCR2B = 0 << CS21;          // запуск с таймера с делителем на 8
}

void loop() {
 Flag=1;//взводим флаг
 Count_set=Preset_9ms; // Уснавливаем задержку 9000/112,5=80
  
 TCCR2B = 1 << CS21;
 TCCR0A|= (1<<WGM01); //Выставляем режим CTC
 TCCR0A|= (1<<COM0A0); //Инвертируем значение OC0A (PD6) по срабатыванию таймера.
 while (Flag==1){};
 TCCR0A= 0<<COM0A0;//останавливаем генерацию 38 кГц 
 //пауза 4,5 мсек
 Count_set=Preset_4_5ms; // Уснавливаем задержку 4500/112,5=40
 Flag=1;
 while (Flag==1){}; 
 //передаем адресс1,вкл генерацию на 560 мксек
 for(uint8_t j = 0; j <4; j++) {
         switch (j) {
              case 0:data=Address1;break;
              case 1:data=Address2;break;
              case 2:data=Command1;break;
              case 3:data=Command2;break;
                }
    for(uint8_t i = 8; i > 0; i--) {
       TCCR0A|= (1<<WGM01); //Выставляем режим CTC
       TCCR0A|= (1<<COM0A0); //Инвертируем значение OC0A (PD6) по срабатыванию таймера.
       Count_set=Preset_562_5us; // Уснавливаем задержку 4500/112,5=40
       Flag=1;
       while (Flag==1){};
       TCCR0A= 0<<COM0A0;//останавливаем генерацию 38 кГц 
    //пауза,лог 0=560 мксек,1=1_6875 мсек
      if (bitRead(data, i-1)==0)
        {Count_set=Preset_562_5us;}
      else
        {Count_set=Preset_1_6875ms;}
      Flag=1;
      while (Flag==1){};
  }
 }

  
    TCCR0A|= (1<<WGM01); //Выставляем режим CTC
    TCCR0A|= (1<<COM0A0); //Инвертируем значение OC0A (PD6) по срабатыванию таймера. 
    Count_set=Preset_562_5us; // Уснавливаем задержку 4500/112,5=40
    Flag=1;
    while (Flag==1){};
    TCCR0A= 0<<COM0A0;//останавливаем генерацию 38 кГц
  //просто пауза-ВРЕМЕННО!
  Count_set=Preset_110ms;
  Flag=1;
  while (Flag==1){};
  Count_set=Preset_110ms;
  Flag=1;
  while (Flag==1){};
  Count_set=Preset_110ms;
  Flag=1;
  while (Flag==1){};
}

Позже добавлю повтор