Надо отправить IR сигнал с ардуино

Artemiy
Offline
Зарегистрирован: 20.10.2014

А резистор подтягивать? И подключать как на картинке на первой странице данной темы?

И что означает значение 20 в строке

My_Sender.send(NEC,0x12181110, 20)

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

Библиотека "мрачная", ужасная и т.п. Если у Вас UNO, то к 3 пину цепляем передатчик. В других случаях, смотрите в библиотеке, пойду вымою руки после её просмотра. Буду знать, что точно не нужно использовать. Наследование через жопу - такого я еще не видел никогда.

Я про либу, которая здесь https://github.com/cyborg5/IRLib. Описание есть здесь http://tech.cyborg5.com/irlib/docs/1-irlib-reference/1-4-hardware-considerations/1-4-1-supported-hardware-platforms/ там можно посмотреть, какие пины нужно использовать. Удачи. Брр

Artemiy
Offline
Зарегистрирован: 20.10.2014

У меня Леонардо. А какую тогда лучше библиотеку использовать? IRremote?

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

Leonardo, 9 пин.
Универсальная библиотека - да IRremote. Для исследований нормально, но занимает немало места.
Наверняка найдутся ещё либы, которые тоже нормальные.
Лично я использовал бы IRremote на начальном этапе, а потом для уже известного протокола нашёл бы простую реализацию.
Хотя все это философия, пользуйтесь тем, что удобнее лично Вам.

Artemiy
Offline
Зарегистрирован: 20.10.2014

А насчет подключения не просветите? Я подключил к 9 пину. И он у меня посылает сигнал. Аж видно голубой огонек в момент посыла. Это нормально? И резистор я правильно между 9-м пином и передатчиком на 100 Ом поставил?

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

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

Artemiy пишет:

C пульта считал код. Оказался: Received NEC Value:0x12181110

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

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

Поищите на форуме, тем с кондиционерами было не так уж и много. У кого то получилось.

 
amdcooper
Offline
Зарегистрирован: 09.03.2015

Долго мучался с своей сплит системой(electrolux пульт YACIFBI), пока не нашел на просторах инета скетч 

#define LEDPIN 11
//you may increase this value on Arduinos with greater than 2k SRAM
#define maxLen 800

volatile  unsigned int irBuffer[maxLen]; //stores timings - volatile because changed by ISR
volatile unsigned int x = 0; //Pointer thru irBuffer - volatile because changed by ISR

void setup() {
  Serial.begin(9600); //change BAUD rate as required
  attachInterrupt(0, rxIR_Interrupt_Handler, CHANGE);//set up ISR for receiving IR signal
}

void loop() {
  // put your main code here, to run repeatedly:

  Serial.println(F("Press the button on the remote now - once only"));
  delay(5000); // pause 5 secs
  if (x) { //if a signal is captured
    digitalWrite(LEDPIN, HIGH);//visual indicator that signal received
    Serial.println();
    Serial.print(F("Raw: (")); //dump raw header format - for library
    Serial.print((x - 1));
    Serial.print(F(") "));
    detachInterrupt(0);//stop interrupts & capture until finshed here
    for (int i = 1; i < x; i++) { //now dump the times
      if (!(i & 0x1)) Serial.print(F("-"));
      Serial.print(irBuffer[i] - irBuffer[i - 1]);
      Serial.print(F(", "));
    }
    x = 0;
    Serial.println();
    Serial.println();
    digitalWrite(LEDPIN, LOW);//end of visual indicator, for this time
    attachInterrupt(0, rxIR_Interrupt_Handler, CHANGE);//re-enable ISR for receiving IR signal
  }

}

void rxIR_Interrupt_Handler() {
  if (x > maxLen) return; //ignore if irBuffer is already full
  irBuffer[x++] = micros(); //just continually record the time-stamp of signal transitions

}

Ir data подключается ко второму pin 
Получил на выходе код во много раз превышающий буфер Ir Remote

9048, -4468, 680, -1624, 672, -536, 672, -532, 680, -1628, 672, -540, 676, -528, 676, -528, 676, -532, 676, -532, 672, -532, 672, -536, 672, -1636, 672, -532, 672, -536, 680, -524, 672, -536, 680, -524, 680, -524, 672, -536, 680, -528, 676, -528, 676, -532, 672, -1640, 672, -532, 672, -532, 684, -528, 676, -528, 668, -536, 680, -1628, 680, -528, 676, -1628, 680, -528, 680, -528, 676, -1632, 676, -528, 676, -19964, 676, -528, 680, -528, 676, -528, 676, -532, 672, -536, 672, -532, 672, -536, 668, -536, 672, -536, 680, -524, 680, -528, 676, -528, 676, -532, 676, -1628, 680, -528, 676, -532, 672, -536, 672, -536, 668, -536, 680, -528, 676, -528, 676, -528, 680, -532, 672, -532, 672, -532, 676, -532, 672, -532, 672, -536, 672, -1632, 676, -528, 676, -1636, 672, -1636, 672,-39980,9004, -4464, 672, -1636, 676, -532, 672, -536, 668, -1640, 668, -536, 672, -536, 676, -528, 680, -528, 676, -528, 668, -536, 680, -528, 676, -1632, 676, -528, 676, -532, 676, -528, 676, -532, 672, -532, 676, -532, 672, -532, 672, -536, 680, -528, 676, -532, 676, -1628, 680, -528, 676, -528, 680, -532, 672, -528, 676, -532, 672, -1636, 676, -1632, 672, -1632, 676, -532, 676, -532, 672, -1632, 676, -532, 672,-19964,680, -528, 676, -528, 680, -528, 676, -532, 672, -532, 672, -536, 672, -532, 672, -536, 680, -528, 676, -528, 680, -528, 676, -532, 672, -532, 672, -536, 672, -532, 672, -536, 668, -540, 676, -528, 680, -524, 680, -528, 676, -532, 676, -524, 680, -532, 672, -532, 672, -532, 676, -532, 672, -532, 676, -528, 676, -1636, 672, -1636, 672, -536, 668, -1636, 672, 

Нашел что между сигналами проходит около 20 и 40 милисекунд(не уверен точно в чем там исчесляется) и тут получился следующий код использующий библиотеку Ir Remote
 

#include <IRremote.h>

IRsend irsend;

//int incomingByte = 0;   // for incoming serial data
//char character;
void setup() {
        Serial.begin(9600);     // opens serial port, sets data rate to 9600 bps
}

int x;
String str;

void loop() 
{
    //while(Serial.available() > 0)
    int a=0;
    while (a==0)
    {
       
   
       
       unsigned int r11[73]      = {9048,4468,680,1624,672,536,672,532,680,1628,672,540,676,528,676,528,676,532,676,532,672,532,672,536,672,1636,672,532,672,536,680,524,672,536,680,524,680,524,672,536,680,528,676,528,676,532,672,1640,672,532,672,532,684,528,676,528,668,536,680,1628,680,528,676,1628,680,528,680,528,676,1632,676,528,676
};
       unsigned int r12[65]      = {676,528,680,528,676,528,676,532,672,536,672,532,672,536,668,536,672,536,680,524,680,528,676,528,676,532,676,1628,680,528,676,532,672,536,672,536,668,536,680,528,676,528,676,528,680,532,672,532,672,532,676,532,672,532,672,536,672,1632,676,528,676,1636,672,1636,672};
       unsigned int r13[73]      = {9004,4464,672,1636,676,532,672,536,668,1640,668,536,672,536,676,528,680,528,676,528,668,536,680,528,676,1632,676,528,676,532,676,528,676,532,672,532,676,532,672,532,672,536,680,528,676,532,676,1628,680,528,676,528,680,532,672,528,676,532,672,1636,676,1632,672,1632,676,532,676,532,672,1632,676,532,672};
       unsigned int r14[65]      = {680,528,676,528,680,528,676,532,672,532,672,536,672,532,672,536,680,528,676,528,680,528,676,532,672,532,672,536,672,532,672,536,668,540,676,528,680,524,680,528,676,532,676,524,680,532,672,532,672,532,676,532,672,532,676,528,676,1636,672,1636,672,536,668,1636,672};
       irsend.sendRaw(r11,73,38);
       delay(20);
       irsend.sendRaw(r12,65,38);
       delay(40);
       irsend.sendRaw(r13,73,38);
       delay(20);
       irsend.sendRaw(r14,65,38);
       delay(5000);
       
    }
}

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

 

 

Artemiy
Offline
Зарегистрирован: 20.10.2014

kisoft пишет:

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

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

Поищите на форуме, тем с кондиционерами было не так уж и много. У кого то получилось.

Попробовал считать код со своего передатчика. Приемник молчит. Типа передатчик ничего не передает. Хотя ИК передатчик моргает голубым светом однократно. Но сигнал походу не посылает. Ресивер ничего не пишет в буфер, хотя когда в него пультом от кондея тычу, всё прекрасно реагирует. Начал думать. Может я схему неправильно собрал? На зарубежном блоге mySensors чел собрал передатчик из 5-ти диодов. У него в схеме транзистор использовался  NPN (ох уж эти дырки и переходы мне в универе тяжело давались) и сопротивление 1КОм. У меня же 1 диод. Подключен к 3-му пину Ардуины Нано через резистор 100 Ом. Всё как написано тут. Может, я в схеме что-то напутал? Или по какой другой схеме надо подключать, объясните, зачем тут транзистор, идля чего он нужен?

 

Artemiy
Offline
Зарегистрирован: 20.10.2014

Фотка для наглядности.

igorcds
Offline
Зарегистрирован: 03.12.2013

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

 

igorcds
Offline
Зарегистрирован: 03.12.2013

у вас на фотграфии ir передатчик

 

Artemiy
Offline
Зарегистрирован: 20.10.2014

ну да, передатчик. Который ничего не отсылает. Приемник висит на той же ардуине. "Заведомо исправным пультом" всё шлется в приемник и коды в сериал выводит. А этим ir передатчиком глухо как в танке. Проблема в вещании. Попробую конечно полярность поменять, но склоняюсь уже взять передатчик с обвязкой типа такого: http://www.ebay.com/itm/3W-Infrared-Ray-IR-Transmission-Module-940nm-LED...

Artemiy
Offline
Зарегистрирован: 20.10.2014

Пробовал полярность менять. Все без толку. Вроде длинный это плюс (анод), а короткий - минус (катод).

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Камерой мобильника гляньте: отсылает - не отсылает......

Artemiy
Offline
Зарегистрирован: 20.10.2014

Нет, через камеру ничего не видно.

igorcds
Offline
Зарегистрирован: 03.12.2013

Как то я тоже пытался сделать на одной ардуино и приемник и передатчик, вообщем у меня не получилось..(может я что то не правильно делал...) работало или приемник или передатчик. В итоге сделал- на одной ардуине передатчик, на второй ардуине приемник и все заработало...может вам тоже пойти по этому пути?...

 

igorcds
Offline
Зарегистрирован: 03.12.2013

посмотрите пост 70 и ниже, и вот тут я спрашивал про работу ir передатчика и приемника на одной ардуине

http://arduino.ru/forum/programmirovanie/ir-peredatchik#comment-61224

Artemiy
Offline
Зарегистрирован: 20.10.2014

Ну вообще должно работать и на одной ардуине. В скетче прописан

 // Start receiving ir again...
irrecv.enableIRIn(); 

То есть ардуина возвращается в режим приема сигналов. Плюс еще в той теме, что Вы мне посоветовали на куартинке что-то воткнуто перед ИК передатчиком. Но картинка мелкая - не разглядеть.

 
maksim
Offline
Зарегистрирован: 12.02.2012

Ничего вам ардуина не должна, с данной библиотекой,свой собственный сигнал принимать она не может. Светодиод не должен гореть никаким светом, если горит значит у вас не ИК светодиод. Да и вообще, вы когда откуда то взяли этот светодиод о нем была какая то информация, что это именно ИК светодиод?

Artemiy
Offline
Зарегистрирован: 20.10.2014

Ладно, куплю ИК передатчик с обвязкой, разнесу всё на разные ардуины, тогда попробую - отпишусь.

ИК диод шел в комплекте с пультом и ресивером: http://www.ebay.com/itm/HX1838-Infrared-Remote-Control-Module-Code-Infrared-Remote-Control-Code-/311144145200?pt=LH_DefaultDomain_0&hash=item4871a2e130

Из той же темы:

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

maksim
Offline
Зарегистрирован: 12.02.2012

Значит не тот всетодиод вам прислали.

Artemiy пишет:

Из той же темы:

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

Ну и? Что из этого следует?

Мы наверное не понимаем друг друга. Если вы пыаетесь принять ИК сигнал передавемый этой же дуиной, то ничего не получится. Если же речь идет о том, что дуина всегда "слушает" - ожидает сигнала и переодически еще куда то передает сигнал, при этом в этот момент она перестает "слушать", то да это работает.

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

igorcds
Offline
Зарегистрирован: 03.12.2013

ir светодиод это тот же самый светодиод,только он вещает в другом спектре(не видим человеческому глазу). а ir приемник принимает этот переданный пакет информации(света). посмотреть на работу можно только фотоаппаратом(телефонного к примеру) - будет видно мерцание. Если ваш светик видно как моргает в живую при наличии ограничивающего ризистора- то по идее у вас или не тот светик или напруга завышена. нечего видно быть не должно, возьмите обычный пульт и посмотрите телефоном как ваш пульт мерцает при нажатии кнопки...у вас так же должно быть.

 

igorcds
Offline
Зарегистрирован: 03.12.2013

В этой же ветке есть - и что такое ир светодиод и что такое ирда приемник и схемы и т.д

Artemiy
Offline
Зарегистрирован: 20.10.2014

с ирда приемником всё более-менее понятно. Я хотел выяснить по поводу передатчика. на сколько резистор подтягивать, полярность и вообще тот ли мне светодиод подсунули. Теперь, в общем, заказал передатчик с обвязкой и буду на разных дуинах тестировать. Понятно, что когда она посылает сигнал, считывать он не может. И на этом спасибо.

PS: Пора FAQ на форуме делать. Много смежных тем раскидано по всему форуму.

vergleb
Offline
Зарегистрирован: 15.06.2015

Amdcooper, подскажи плиз, удалось ли наладить в итоге взаимодействие ардуино и кондея?

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

Если есть исходники программы, то просто супер, спасешь от жары!

Заренее спасибо

hugoboss317
Offline
Зарегистрирован: 21.03.2013

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

vergleb
Offline
Зарегистрирован: 15.06.2015

Спасибо за совет! Кнопка действительно есть, но проблема в том, что он стоит на нагрев с зимних времен, и получается не очень прохладно(((

amdcooper
Offline
Зарегистрирован: 09.03.2015

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

vergleb
Offline
Зарегистрирован: 15.06.2015

Спасибо за ответ!

Буду очень благодарен если скинешь коды на следующие функции:

- Вкл\выкл

- Температура вверх

- Температура вниз

- Переключение режимов

- Регулировка мощности

- Направление струи

Остальное не критично.

 

Готов отблагодирить за эту бесценную для меня в этот жаркий период инфу.

Чтобы не заспамить тему окончательно, предлагаю продолжить диалог по почте vergleb@yandex.ru

Спасибо

ansh
Offline
Зарегистрирован: 26.09.2014

Поделюсь своим опытом для кондея LG. 

Во-первых, у меня на включение выходил код:



8800 
Decoded JVC: 8800 (16 bits) 
Raw (60): {8400, 4150, 550, 1650, 500, 550, 550, 550, 600, 500, 550, 1600, 600, 450, 600, 500, 550, 550, 500, 550, 550, 550, 600, 500, 600, 450, 600, 500, 600, 500, 600, 450, 600, 500, 600, 500, 500, 1650, 600, 500, 600, 1550, 600, 450, 600, 1600, 600, 450, 600, 500, 500, 1650, 600, 500, 600, 450, 600, 1600, 600}; 

не заработало через "Raw" и через "sendJVC" не включался даже если три или два раза отправлять код:

irsend.sendJVC(ConditionerOn,16,0);

Во-вторых, при считывании, нажимая вкл. на пульте несколько раз, увидел три разных кода и решил, что все эти три кода нужны для включения. Вставил эти коды и кондер включился...)

irsend.sendRaw(ConditionerOn1,60,38); 
delay(1*10); 
irsend.sendRaw(ConditionerOn2,60,38); 
delay(1*10); 
irsend.sendRaw(ConditionerOn3,60,38); 
delay(1*5000);

где, ConditionerOn1, ConditionerOn2, ConditionerOn3 - код кнопки включения.

И в-третьих диод пришлось подносить к кондею на расстояние 30см, чтобы он включился.

______________________
Нашел ИК с усилком...

 

 

Vasia.Z
Vasia.Z аватар
Offline
Зарегистрирован: 30.11.2013

Ничего удивительного - пульты отправляют в кондиционеры не абстрактное "включись", а <b>все</b> параметры - сколько градусов, куда дуть и т.д.

ansh
Offline
Зарегистрирован: 26.09.2014

Проблема с скетчем для включения кондея по сетке. Взял скетч для реле отсюда (ENC28J60 Enternet HR911105A Pin ON OF Relaysне нужное убрал и добавил IR. Но при отправки команды на кондей (вижу как моргает дион на IR датчике) кондей издает звук и не включается. Как будто отправляет не все три команды irsend.sendRaw...

#include <EtherCard.h>  // Подключаем скачанную библиотеку. https://yadi.sk/d/R57sVoglbhTRN



#include "IRremote.h"
IRsend irsend;



// MAC Address должен быть уникальным в вашей сети. Можно менять. 
static byte mymac[] = { 
  0x5A,0x5A,0x5A,0x5A,0x5A,0x5A };

// ip статический / постоянный Address нашей Web страницы.  
static byte myip[] = { 
  192,168,0,198 };

// Буфер, чем больше данных на Web странице, тем больше понадобится значения буфера.
byte Ethernet::buffer[900];
BufferFiller bfill;

// Массив задействованных номеров Pins Arduino, для управления например 8 реле.
int LedPins[] = {
  2};

// Массив для фиксации изменений.
boolean PinStatus[] = {
  1};

//-------------

const char http_OK[] PROGMEM =
"HTTP/1.0 200 OK\r\n"
"Content-Type: text/html\r\n"
"Pragma: no-cache\r\n\r\n";

const char http_Found[] PROGMEM =
"HTTP/1.0 302 Found\r\n"
"Location: /\r\n\r\n";

const char http_Unauthorized[] PROGMEM =
"HTTP/1.0 401 Unauthorized\r\n"
"Content-Type: text/html\r\n\r\n"
"<h1>401 Unauthorized</h1>";

//------------

// Делаем функцию для оформления нашей Web страницы. 
void homePage()
{
  bfill.emit_p(PSTR("$F"
    "<title>ArduinoPIN Webserver</title>" 
    "ArduinoPIN 1: <a href=\"?ArduinoPIN1=$F\">$F</a><br />"),   

  http_OK,
  PinStatus[1]?PSTR("off"):PSTR("on"),
  PinStatus[1]?PSTR("<font color=\"green\"><b>ON</b></font>"):PSTR("<font color=\"red\">OFF</font>"));
}

//------------------------



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

  // По умолчанию в Библиотеке "ethercard" (CS-pin) = № 8.
  // if (ether.begin(sizeof Ethernet::buffer, mymac) == 0).
  // and change it to: Меняем (CS-pin) на 10.
  // if (ether.begin(sizeof Ethernet::buffer, mymac, 10) == 0).

  if (ether.begin(sizeof Ethernet::buffer, mymac,10) == 0);

  if (!ether.dhcpSetup()); 

  // Выводим в Serial монитор IP адрес который нам автоматический присвоил наш Router. 
  // Динамический IP адрес, это не удобно, периодический наш IP адрес будет меняться. 
  // Нам придётся каждый раз узнавать кой адрес у нашей страницы.
  ether.printIp("My Router IP: ", ether.myip); // Выводим в Serial монитор IP адрес который нам присвоил Router. 

  // Здесь мы подменяем наш динамический IP на статический / постоянный IP Address нашей Web страницы.
  // Теперь не важно какой IP адрес присвоит нам Router, автоматический будем менять его, например на "192.168.1.222". 
  ether.staticSetup(myip);

  ether.printIp("My SET IP: ", ether.myip); // Выводим в Serial монитор статический IP адрес. 
  //-----

  for(int i = 0; i <= 8; i++)
  {
    pinMode(LedPins[i],OUTPUT); 
    PinStatus[i]=false;
  }  
}

unsigned int ConditionerOn1[60] = {8350, 4200, 550, 1650, 550, 500, 550, 550, 550, 550, 550, 1600, 550, 500, 600, 500, 600, 500, 550, 500, 550, 550, 550, 550, 550, 500, 550, 550, 550, 550, 550, 500, 550, 550, 600, 500, 550, 1600, 550, 550, 550, 1600, 550, 500, 550, 1650, 550, 500, 600, 500, 600, 1550, 600, 500, 500, 600, 500, 1650, 550};

unsigned int ConditionerOn2[60] = {8400, 4150, 600, 1550, 600, 500, 600, 450, 600, 500, 600, 1550, 600, 500, 600, 500, 600, 450, 600, 1550, 600, 1600, 600, 450, 600, 500, 600, 500, 600, 450, 600, 500, 600, 500, 600, 450, 600, 500, 600, 500, 600, 450, 600, 500, 600, 1550, 600, 500, 600, 1550, 600, 500, 600, 450, 600, 500, 600, 1550, 600};

unsigned int ConditionerOn3[60] = {8450, 4200, 550, 1550, 600, 500, 600, 450, 650, 450, 600, 1550, 650, 450, 600, 450, 650, 450, 650, 450, 600, 500, 600, 450, 650, 500, 550, 450, 650, 450, 650, 450, 600, 500, 600, 500, 600, 1550, 600, 450, 650, 1500, 650, 450, 600, 1600, 650, 400, 600, 450, 650, 1550, 600, 500, 600, 450, 600, 1600, 600};



// --------------------------------------

void loop()
{

  delay(1); // Дёргаем микроконтроллер.

  word len = ether.packetReceive();   // check for ethernet packet / проверить ethernet пакеты.
  word pos = ether.packetLoop(len);   // check for tcp packet / проверить TCP пакеты.

  if (pos) {
    bfill = ether.tcpOffset();
    char *data = (char *) Ethernet::buffer + pos;
    if (strncmp("GET /", data, 5) != 0) {
      bfill.emit_p(http_Unauthorized);
    }
    else {

      data += 5;
      if (data[0] == ' ') {       
        homePage(); // Return home page Если обнаружено изменения на станице, запускаем функцию.
        for (int i = 0; i <= 7; i++)digitalWrite(LedPins[i],PinStatus[i+1]);
      }

      // "16" = количество символов "?ArduinoPIN1=on ".
      else if (strncmp("?ArduinoPIN1=on ", data, 16) == 0) {
        PinStatus[1] = true;        
        bfill.emit_p(http_Found);
     irsend.sendRaw(ConditionerOn1,60,38);
       delay(1*10);
       irsend.sendRaw(ConditionerOn2,60,38);
        delay(1*10);
        irsend.sendRaw(ConditionerOn3,60,38);
      }

      //------------------------------------------------------  


      else if (strncmp("?ArduinoPIN1=off ", data, 17) == 0) {
        PinStatus[1] = false;        
        bfill.emit_p(http_Found);
         irsend.sendRaw(ConditionerOn1,60,38);
       delay(1*10);
       irsend.sendRaw(ConditionerOn2,60,38);
        delay(1*10);
        irsend.sendRaw(ConditionerOn3,60,38);
      }
      
      


      //---------------------------


      else {
        // Page not found
        bfill.emit_p(http_Unauthorized);
      }
    }
    ether.httpServerReply(bfill.position());    // send http response
  }
}

 

ansh
Offline
Зарегистрирован: 26.09.2014

увеличил ожидание до 1000 и обнаружил мигание диода на IR датчике не три раза а 12 раз. Почему?

delay(1*1000);

 

ansh
Offline
Зарегистрирован: 26.09.2014

заработало...))) уменьшил ожидание

delay(1*5);

 

 

igorcds
Offline
Зарегистрирован: 03.12.2013

Привет. Поздравляю. Сам всё и решил :)

ansh
Offline
Зарегистрирован: 26.09.2014

Подключил MEGA 2560... Cкетч залился без ошибок и теперь не пишется о не хватки памяти. Но сетка не заводится... Не загораются диоды на ENC28J60 Enternet. На UNO помогало быстрое переключение по питанию т.е. выключение питания UNO и резкое включение (менее чем через 1сек). Пробовал внешним питанием на 2А не помогло... У кого нибудь такое было? Что может быть?

ansh
Offline
Зарегистрирован: 26.09.2014

решилось внешним питанием...)

satelit
Offline
Зарегистрирован: 12.12.2015

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

 

Jon2013
Offline
Зарегистрирован: 18.12.2013
Поделюсь немного теорией которую нашел в интернете. 
 
Последовательный IR интерфейс  представляет собой комбинацию вспышек светодиода  в инфракрасном диапазоне. Это диапазон выбран для повышения помехоустойчивости. Замечу сразу, пару приемник-передачик нужно брать одинакового диапазона. Обычно 940 нм, но встречаются и другие.
 
Идея в протоколе заложена такая: логическая единица передается импульсом определенной длины и паузой, которая обычно длинее импульса в два раза. 
 
Известные фирмы NEC, SONY, PANASONIC взяли такую модуляцию за основу и придумали протоколы под свои гаджеты. 
 
Так вот, всем известная библиотека  IRremote, вначале определяет соотношение импульса и паузы, вычисляя таким образом чей это протокол, затем  преобразует поток импульсов в логические единицы и показывает нам принятый дамп в виде HEX кода. 
 
Когда что-то не укладывается в рамки классического протокола, она (библиотека) сообщает нам  UNKNOWN и выводит на монитор просто набор длительностей импульсов и пауз разделенных запятой, а для наглядности ставит  минус перед длительностью паузы. Так называемый DAMP.
 
На заре вычислительной техники,  протоколы мало чем отличались и представляли 2-х байтовые посылки. Только PANASONIC  еще всегда добавлял впереди команды адрес устройства. Все это наша библиотека легко распознает и оборачивает в удобочитаемую компактную форму. Для кодировки десятка кнопок пульта этого вполне достаточно. Поэтому так легко настраивается самопальное управление телевизорами.
 
Но поперли кондиционеры и им для эффективного управления стало тесно в 16-разрядном поле. Поэтому дамп стал быстро расти и на моем кондишине он имеет уже массив на одну команду в 226 ячеек. Такой массив, библиотека уже не может переварить в силу программных ограничений. И это приводит в ступор многих. Вроде бы команда определилась, а устройством не рулит. Потому как хвост от команды потерялся. 
 
Теперь следующая проблема. 
 
Если тупо собрать все дампы команд и попытаться их в прямом виде запихнуть в скеч - компиляция сорвется из-за нехватки памяти.
 
Из выше изложенной теории известно что дамп - это набор нулей и единиц записанных программой как длительности импеульсов и пауз, поробуем подготовить дамп по другому. Запишем длительности из нашего дампа типа 500-  это единица, а 1000 это ноль.
 
Массив становится компактней, но все равно упираемся в не хватку памяти.  Надо уходить от массивов. И вот тут нужен анализатор протокола. Промышленный аппарат для таких задач за 20 килотонн зеленых рублей. На просторах инета может и можно найти протоколы, но  мне под свой кондей - не удалось. Тогда....
 
Засучиваем рукова, закидываем все команды в Эксель и и тупо вычисляем закономерности. Скажу вам сразу, очень любопытно смотреть как работала логика профессионального разработчика. 
 
Ну обратная задача, заменить  в стандартном дампе отдельные биты, уже не представляет сложности.

 

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Интересно, автору текста не приходило в голову взять логический анализатор или осциллограф и посмотреть глазами закономерность? :)

Jon2013
Offline
Зарегистрирован: 18.12.2013

dimax пишет:

....взять логический анализатор или осциллограф и посмотреть глазами закономерность? :)

И что я этими приборами увижу????? Какую закономерность?

Чем отличаются два десятка соседних импульсов?

Логическим анализатором обычно смотрят паралельные потоки импульсов. Их взаимное расположение.

На пример работу параллельного интерфейса.

Осцилографом - форму сигнала, помехи. 

А вот анализатором протоколов выявляют закономерности в командах. И стоят они в районе $20 000.  

Прежде чем предлагать прибор, надо все же представлять, что им хочется смотреть. 

 

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Jon2013, вы смотрели сигнал от своего пульта на осциллографе, или это сейчас просто теоритические размышления были? Я смотрел, и тут-же писал протокол обработки. Поэтому и говорю что так удобно.

Jon2013
Offline
Зарегистрирован: 18.12.2013

Как можно в наборе последовательных импульсов увидеть логику работы целого дивайса? Тем более, что команда одна от другой отличаются парой битов в посылке из десятка байтов? Не, даже не пытался подключать лог.анализатор, тем более осцил. Я же не ремонтировал устройство, а искал закономерности в гиганском потоке последовательных посылок. Я еще могу себе представить команды для телевизора, там посылка из 16 битов. Настроить лог.анализатор чтобы он показывал все это в HEX-коде и тупо соображать в чем там хитрость. По мне так это изврат какой-то.

Тем более что библиотека как раз всю эту логику сама переваривает и дает дамп посылки.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Jon2013,  а какая у вас задача то? Тот способ, о котором я говорю облегчает работу по эмуляции посылки полного пакета. Т.е. точно воспроизвести нечто полученное как магнитофон не пользуясь никакими библиотеками. Можно конечно и побайтово разбирать, соотносить что за что отвечает( и энтузиасты были!), но это долго и очень муторно. Проще заказать дополнительный пульт, и  "нажимать" ардуиной  его кнопки.

Jon2013
Offline
Зарегистрирован: 18.12.2013

Мне нужен пульт для кондиционера фирмы McQuay который бы полностью копировал команды родного пульта. Я делаю пульт с привязкой через WiFi к сотовому телефону. Ну чтобы через интернет можно было бы включить кондишин до приезда домой. Готовые пульты эту задачу не решают. Похожие по функционалу стоят от $50 до $250.

Вот один из моих прототипов. 

Вот прототип такого пульта

armlive
Offline
Зарегистрирован: 07.12.2015

Так у тебя получилось или нет????

Все, разобрался и все работает.

satelit
Offline
Зарегистрирован: 12.12.2015

тоже интересно стало. хотя я видел видео дмитрия осипова про управление через интернет