Проблема с управление по ИК

doc_bravn
Offline
Зарегистрирован: 26.08.2017

Хочу сделать ретранслятор ИК команд с пульта одного устройства на другое и при этом включать и выключать нагрузку с помощью реле. Использовал для этого такой код:

 

#include <IRremote.h>

int RECV_PIN = 2;
int RELAY_PIN = 5;
unsigned long ON_OFF = 0xFDC23D; // Кнопка пульта Dune HD TV-102  включение
//Аналогично можно прописывать остальные кнопки пульта
IRrecv irrecv(RECV_PIN);
decode_results results;
IRsend irsend;

void setup()
{
  pinMode(RELAY_PIN, OUTPUT);
  digitalWrite(RELAY_PIN,LOW);
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
}

void loop() {
  if (irrecv.decode(&results)) {
    if ( results.value != ON_OFF) {
      // Исключили из принятого ненужное, оставили только прописанные команды пульта
      delay(200);/*без этой строки неустойчивое управление,
       значение подбираем: чем больше значение - тем больше задержка,
       чем меньше значение - тем хуже управление, у меня от 100 до 200*/
      Serial.print("Not declared command - ");
      irrecv.enableIRIn();
    }

    if ( results.value==ON_OFF ) {
      delay(200);
      Serial.print("ON_OFF - ");
      irsend.sendSAMSUNG(0xE0E040BF, 32); // Передаем команду вкл/выкл
      digitalWrite(RELAY_PIN, !digitalRead(RELAY_PIN));
	  delay(100);
      irrecv.enableIRIn();
    };

    Serial.println(results.value, HEX);

  }
  delay(40);
}

Команду с пульта принимает, реле включается и выключается. Но вот команда на другое устройство(телевизор Samsung) не реагирует. Посмотрел камерой смартфона на ИК диод. Он ничего не излучает. Уже даже диод купил новый пошел и подключил. Не помогает. Попробовал залил скетч пример IRsendDemo. Снова смотрю на светодиод камерой смартфона и не видно никакого излучения. Неужели два новых ИК диода и оба неисправные?

Диоды использовал такие:

http://robotdyn.ru/catalog/led/infrared_led_module/

и такой:

https://www.chipdip.ru/product/troyka-ir-transmitter-5mm-led

Подскажите пожалуйста что не так делаю? Почему диоды не работают и ничего не излучают?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

При приёме: строка 36 не нужна. Зато нужна команда resume и вставить её надо в строку 38

Можно посмотреть на печатаемый протокол?

Дополнение: ладно, мне уходить надо. Если в протоколе печатается тот print, что перед отправкой, попробуйте перед отправкой всунуть resume на получение, чтобы завершить получение, а потом уж отправлять.

doc_bravn
Offline
Зарегистрирован: 26.08.2017

В протоколе печатается: 

ON_OFF - FDC23D
ON_OFF - FDC23D
ON_OFF - FDC23D
ON_OFF - FDC23D
ON_OFF - FDC23D

Больше вообще ничего не выводится.

Попробую сейчас внести корректировки и проверить.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Заодно в строке 33 вместо 0xE0E040BF напишите 0xE0E040BFul.

doc_bravn
Offline
Зарегистрирован: 26.08.2017

Закомментировал

irrecv.enableIRIn(); в 36 строке и добавил irrecv.resume(); в 38 строку. 

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

Также добавил 

 irrecv.resume();
      irsend.sendSAMSUNG(0xE0E040BF,32); // Передаем команду вкл/выкл
 
как вы и посоветовали перед отправкой.
doc_bravn
Offline
Зарегистрирован: 26.08.2017

В строке 33 вместо 0xE0E040BF  написал 0xE0E040BFul. Ровным счетом ничего не поменялось. Как не выдавался сигнал диодом так и не выдается. 

Кстати, когда нажимаю кнопку на пульте, то на самой адруине взмаргивает свтодиод раза 3. И также взмаргивает при повторном нажатии кнопки на пульте.

Но больше всего меня напрягает, что даже при загрузке скетча из примеров у меня светодиод никак не проявляет себя и ничего не излучает. Может у меня ардуина какая-то неправильная? Бракованная?

Использую Leonardo, правда не оригинал, а китайский клон.

doc_bravn
Offline
Зарегистрирован: 26.08.2017

А еще не понятно мне зачем у светодиодов 3 выхода. Вроде как достаточно подключения к 3 пину и земли. А тут получается отдельно питание 5В, земля и данные. Может неправильно подключаю ИК свтодиод?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

У-у-у, Вы что, питание ему не даёте? А чего от него хотите? Давайте схемуподключения  и фото, где видно, что и как подключаете.

doc_bravn
Offline
Зарегистрирован: 26.08.2017

Как раз я подключаю все 3 провода к ардуине. Питание +5В подключаю в пину 5В, землю к земле и выход данных(обозначен на модуле Signal) подключаю к 3 пину ардуины. Я пробовал вообще все отключать от ардуины. После этого подключал только 3 провода от модуля светодиода и заливал в него демо скетч. Не излучает ни один из двух указанных в моем первом сообщении модулей. Камера телефона абсолютно ничего не фиксирует.

Такое впечатление, что с ардуиной что-то не то. Может пин 3 не включается в ШИМ режиме. Не понятно...

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

doc_bravn пишет:

 Может неправильно подключаю ИК свтодиод?

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

doc_bravn
Offline
Зарегистрирован: 26.08.2017

Схема простая. ИК светодиод
https://www.chipdip.ru/product/troyka-ir-transmitter-5mm-led

Подключаю вывод V к пину 5V на ардуине, вывод G к пину GND на ардуине, вывод S к пин 3 на ардуине.
Заливаю скетч irsend demo из примеров. Затем смотрю камерой смартфона на светодиод. Тишина, никакого излучения нет.

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

doc_bravn
Offline
Зарегистрирован: 26.08.2017

Точно таким же образом подключаю светодиод в схеме с реле описанной в начале темы. Только к пину 2 подключен еще ИК приемник и к пину 5 подключено реле.

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

А в примере диод тоже к 3-му пину подключен?

А обычный светодиод не судьба подключить?  Чтоб хоть вузуально видно было, что 3й пин работает

doc_bravn
Offline
Зарегистрирован: 26.08.2017

Да, в примере диод тоже подключен к 3 пину.

Обычный светодиод подключать не пробовал. Его еще купить надой пойти сначала. :-)

Я к 3 пину подключал управляющий выход реле и заливал скетч из примеров для щелкания реле. Реле отлично управляется 3 пином. Срабатывает без проблем. Т.е. получается 3 пин работает, раз реле с него управлялось. Не работает именно в режиме вывода команд на ИК светодид.

Нельзя никак перенести вывод команд на ИК светодиод на другой пин, например на 7?

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

мда.

doc_bravn
Offline
Зарегистрирован: 26.08.2017

Ага. Какие могут быть причины? Оба модуля неисправны?

Или "мда" подразумевает что-то другое. Думаете что то что реле управляется отлично на 3 пине не показатель того что он работает?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

doc_bravn пишет:

например на 7?

Вы свою библиотеку открывали? Смотрели? Нет, на седьмой нельзя.

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

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

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

doc_bravn пишет:

Или "мда" подразумевает что-то другое. Думаете что то что реле управляется отлично на 3 пине не показатель того что он работает?

"Мда" подразумевает, что когда человеку МНОГО раз говорят "давай схему", а он упорно отписывается, что мол не надо - там всё просто, то данный человек либо идиот, либо тролль, которому не нужна никакая помощь - он пришёл просто подразнить всех.

doc_bravn
Offline
Зарегистрирован: 26.08.2017

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

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

я в полном скетче в упор не вижу, где на 3-й пин чо выводится.  Туплю?

doc_bravn
Offline
Зарегистрирован: 26.08.2017

Я тоже искал где же вывод 3 пина. Перерыл все аналогичные скетчи которные выводят ИК команды. И ни в одной нет указания на то что надо выводить на пин 3.

Вот например скетч irsend demo из примеров:

/*
 * IRremote: IRsendDemo - demonstrates sending IR codes with IRsend
 * An IR LED must be connected to Arduino PWM pin 3.
 * Version 0.1 July, 2009
 * Copyright 2009 Ken Shirriff
 * http://arcfn.com
 */


#include <IRremote.h>

IRsend irsend;

void setup()
{
}

void loop() {
	for (int i = 0; i < 3; i++) {
		irsend.sendSony(0xa90, 12);
		delay(40);
	}
	delay(5000); //5 second delay between each signal burst
}

В нем тоже нигде не прописан явный вывод пина 3. И тоже самое и в других найденных в инете скетчах в которых используется irsend

doc_bravn
Offline
Зарегистрирован: 26.08.2017

Тогда подскажите пожалуйста как правильно прописать вывод пина 3 если знаете. Я пока не смог найти его описания.

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

Может, он внутри библиотеки железно прописан, я ж библиотеку не смотрел, на вас оставил.  Ну и так тогда сам бох велел и Клапочка не запретил, повесить ОБЫЧНЫЙ светодиод на пин3 и понять, моргает он хотя бы или нет.  Тут сразу и ясно всё станет. 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

DetSimen пишет:

я в полном скетче в упор не вижу, где на 3-й пин чо выводится.  Туплю?

Кусочек файла irSend.cpp

void  IRsend::mark (unsigned int time)
{
	TIMER_ENABLE_PWM; // Enable pin 3 PWM output
	if (time > 0) custom_delay_usec(time);
}

Но и это ещё не всё. На самом деле, там не обязательно пин 3. Всё зависит от констант, определённых в #define (например, это может бить пин 9, если определно использование первого таймера, а не второго).

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

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

doc_bravn пишет:

Тогда подскажите пожалуйста как правильно прописать вывод пина 3 если знаете. Я пока не смог найти его описания.

Вам уже всё подсказали! Схема, фото сборки и полный скетч. Пока этого нет - мы теряем время.

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

doc_bravn
Offline
Зарегистрирован: 26.08.2017

Полный код скетча:

#include <IRremote.h>
02
	 
03
	int RECV_PIN = 2;
04
	int RELAY_PIN = 5;
05
	unsigned long ON_OFF = 0xFDC23D; // Кнопка пульта Dune HD TV-102  включение
06
	//Аналогично можно прописывать остальные кнопки пульта
07
	IRrecv irrecv(RECV_PIN);
08
	decode_results results;
09
	IRsend irsend;
10
	 
11
	void setup()
12
	{
13
	  pinMode(RELAY_PIN, OUTPUT);
14
	  digitalWrite(RELAY_PIN,LOW);
15
	  Serial.begin(9600);
16
	  irrecv.enableIRIn(); // Start the receiver
17
	}
18
	 
19
	void loop() {
20
	  if (irrecv.decode(&results)) {
21
	    if ( results.value != ON_OFF) {
22
	      // Исключили из принятого ненужное, оставили только прописанные команды пульта
23
	      delay(200);/*без этой строки неустойчивое управление,
24
	       значение подбираем: чем больше значение - тем больше задержка,
25
	       чем меньше значение - тем хуже управление, у меня от 100 до 200*/
26
	      Serial.print("Not declared command - ");
27
	      irrecv.enableIRIn();
28
	    }
29
	 
30
	    if ( results.value==ON_OFF ) {
31
	      delay(200);
32
	      Serial.print("ON_OFF - ");
33
	      irsend.sendSAMSUNG(0xE0E040BF, 32); // Передаем команду вкл/выкл
34
	      digitalWrite(RELAY_PIN, !digitalRead(RELAY_PIN));
35
	      delay(100);
36
	      irrecv.enableIRIn();
37
	    };
38
	 
39
	    Serial.println(results.value, HEX);
40
	 
41
	  }
42
	  delay(40);
43
	}

Этот же код скетча в начале темы. Это полный код, в скетче больше нет ничего вообще.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ссылка на библиотеку и схема соединений с фото

doc_bravn
Offline
Зарегистрирован: 26.08.2017

Наваял приблизительную схему того что у меня сделано в эмуляторе ардуины.

doc_bravn
Offline
Зарегистрирован: 26.08.2017

Фото сделаю вечером когда дома буду.

doc_bravn
Offline
Зарегистрирован: 26.08.2017

Откуда скачивал библиотеку уже и не помню. Вот сама скачанная библиотека:

https://yadi.sk/d/7r0wZ4vl3Mr5JL

Ее я и использую.

doc_bravn
Offline
Зарегистрирован: 26.08.2017

Подскажите пожалуйста как можно переопределить с помощью #define вывод ИК диода на пин 9? Для этого не нужно библиотеку, надеюсь, переписывать?

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

#define SEND_PIN 9

Но это ничего не дало. Все равно на 3 пине идет передача на диод.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Какая ардуина у Вас?

doc_bravn
Offline
Зарегистрирован: 26.08.2017

Arduino Leonardo R3

Точнее ее китайский клон. Покупал в этом магазине эту модельку:

http://robotdyn.ru/catalog/boards/leonardo_r3_atmega32u4/

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Опаньки! Так ни хрена себе!

Если у Вас контроллер ATmega32U4, то у Вас и не третий пин-то ни хрена! Скорее всего 10-ый! Теперь понимаете. почему я требовал схему и фото? Попробуйте библиотечный пример на 10-ом пине. Должен заработать.

А вообще, в той библиотеке, что Вы мне дали, открываете файл  boarddefs.h. Таймер для 32U4 там определяется в строках 86-89. Выглядят они так:

#elif defined(__AVR_ATmega32U4__)
	//#define IR_USE_TIMER1   // tx = pin 14
	//#define IR_USE_TIMER3   // tx = pin 9
	#define IR_USE_TIMER4_HS  // tx = pin 10

Можете закомментировать строку 89 и раскомментировать 87 или 88 (но не обе сразу - из этих строк активна только одна должна быть).

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

doc_bravn
Offline
Зарегистрирован: 26.08.2017

О как! А я и не знал, что в зависимости от модели разные пины могут быть. Мне как-то думалось, что все ардуины стандартны по пинам и должно везде работать одинаково.

А где-то описаны в каких-нибудь мануалах о различиях в зависимости от модели контроллера?

Домой вечером приду и проверю на 10 пине.

Спасибо вам огромное за помощь и за то что дали ценные подсказки!!!

Проверю и напишу, что получилось.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

На каких пинах у кого ШИМ описано и в описаниях ардуин, и, само собой, в даташитах контроллеров.

doc_bravn
Offline
Зарегистрирован: 26.08.2017

Спасибо!

Посмотрел описание Arduino Leonardo. Там указано:

PWM: 3, 5, 6, 9, 10, 11, and 13. Provide 8-bit PWM output with

Получается и не 3 пине тоже есть ШИМ. А вот в библиотеке, получается, как раз и используется не 3-й пин для подключения диода, а 10-й.

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

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Меня смущает даже не это, а то, что они в библиотеке говорят ещё и о 14-ом пине, а в описании его нет. Ну, в общем, разбирайтесь :)

doc_bravn
Offline
Зарегистрирован: 26.08.2017

А можно еще нубский вопросик один.

Код моего скетча вы видели. Он весь именно такой. Как я понимаю ШИМ больше кроме как для ИК светодиода нигде не используется. Получается больше никаких других таймеров у меня не используется? Или все-таки используются они скетчем?

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

#include <IRremote.h>

int RECV_PIN = 2;
int RELAY_PIN = 5;
unsigned long ON_OFF = 0xFDC23D; // Кнопка пульта Dune HD TV-102  включение
//Аналогично можно прописывать остальные кнопки пульта
IRrecv irrecv(RECV_PIN);
decode_results results;
IRsend irsend;

void setup()
{
  pinMode(RELAY_PIN, OUTPUT);
  digitalWrite(RELAY_PIN,LOW);
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
}
   
void loop() {
  if (irrecv.decode(&results)) {
    if ( results.value != ON_OFF) {
      // Исключили из принятого ненужное, оставили только прописанные команды пульта
      delay(200);/*без этой строки неустойчивое управление,
       значение подбираем: чем больше значение - тем больше задержка,
       чем меньше значение - тем хуже управление, у меня от 100 до 200*/
      Serial.print("Not declared command - ");
      irrecv.enableIRIn();
    }

    if ( results.value==ON_OFF ) {
      delay(200);
      Serial.print("ON_OFF - ");
      irsend.sendSAMSUNG(0xE0E040BFul,32); // Передаем команду вкл/выкл
      digitalWrite(RELAY_PIN, !digitalRead(RELAY_PIN));
	  delay(100);
      irrecv.resume();
      irrecv.enableIRIn();
    };
    Serial.println(results.value, HEX);

  }
  delay(40);
}

Или может нужно еще какие-то правки в код внести для более правильной работы?

Кстати, что у меня Leonardo используется я написал в 5-м сообщении темы. Согласен, не прав, что в начале не указал.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

0-ой таймер используется всегда (в среде Ардуино), т.к. на нём живут такие сервисы, как millis, delay, и т.д.

По коду.

resume нужно использовать всегда. Это сигнал, что Вы закончили разбор сообщения и можно получать следующее. Вы же используете его только в ветке "if ( results.value==ON_OFF )", а в ветке "if ( results.value != ON_OFF)" не используете. Оно бы у Вас не работало, но Вы всунули в эту ветку "irrecv.enableIRIn();", что конечно перебор.

Правильно было бы строки 27, 36 и 37 удалить, а после строки 39 поставить "irrecv.resume();". Но я не знаю, будет ли работать "irsend.sendSAMSUNG" до того, как завершилось чтение. Если нет, то можно вставить resume и перед этой строкой.

doc_bravn
Offline
Зарегистрирован: 26.08.2017

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

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

doc_bravn пишет:

При первом нажатии кнопки на пульте срабатывает реле и идет передача ИК диодом команды. 

Ну, это уже прогресс

doc_bravn пишет:

Видимо надо что-то другое использовать.

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

 

doc_bravn
Offline
Зарегистрирован: 26.08.2017

ЕвгенийП пишет:

Ну, это уже прогресс

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

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

Вернул строку 37. Заработало так как нужно. При нажатии кнопки пульта включается нагрузка и при повторном нажатии кнопки выключается.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

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

doc_bravn
Offline
Зарегистрирован: 26.08.2017

ЕвгенийП пишет:

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

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

Сейчас со всеми правками скетч получился такой:

#include <IRremote.h>

int RECV_PIN = 2;
int RELAY_PIN = 5;
unsigned long ON_OFF = 0xFDC23D; // Кнопка пульта Dune HD TV-102  включение
//Аналогично можно прописывать остальные кнопки пульта
IRrecv irrecv(RECV_PIN);
decode_results results;
IRsend irsend;

void setup()
{
  pinMode(RELAY_PIN, OUTPUT);
  digitalWrite(RELAY_PIN,LOW);
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
}

void loop() {
  if (irrecv.decode(&results)) {
    if ( results.value != ON_OFF) {
      // Исключили из принятого ненужное, оставили только прописанные команды пульта
      delay(200);/*без этой строки неустойчивое управление,
       значение подбираем: чем больше значение - тем больше задержка,
       чем меньше значение - тем хуже управление, у меня от 100 до 200*/
      Serial.print("Not declared command - ");
      
    }

    if ( results.value==ON_OFF ) {
      delay(200);
      Serial.print("ON_OFF - ");
      irrecv.resume();
      irsend.sendSAMSUNG(0xE0E040BFul, 32); // Передаем команду вкл/выкл
      digitalWrite(RELAY_PIN, !digitalRead(RELAY_PIN));
	  delay(100);
      irrecv.enableIRIn();
    };

    Serial.println(results.value, HEX);
      irrecv.resume();
  }
  delay(40);
}

Кстати, а зачем нужно было заменить 0xE0E040BF на 0xE0E040BFul ?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

doc_bravn пишет:

Кстати, а зачем нужно было заменить 0xE0E040BF на 0xE0E040BFul ?

Конкретно в данном случае не критично, компилятор и сам бы разобрался по типу параметра функции, но в общем случае это полезно. Число по умолчанию целое, а добавив в конец l или u или ul мо сообщаем компилятору, что оно соответсвенно длинное, беззнаковое или "длинное беззнаковое".

doc_bravn
Offline
Зарегистрирован: 26.08.2017

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

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Не знаю. Запустите, увидите.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

doc_bravn пишет:

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

Мы на каком форуме? - arduino.ru

В каком разделе? - Аппаратные вопросы

Видите вверху прикрепленную тему?

PIN Mapping - соответствие выводов и регистров

http://arduino.ru/forum/obshchii/pin-mapping-sootvetstvie-vyvodov-i-registrov

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

Но сам факт различия вывешен на самое видное место!

doc_bravn
Offline
Зарегистрирован: 26.08.2017

andriano пишет:

PIN Mapping - соответствие выводов и регистров

http://arduino.ru/forum/obshchii/pin-mapping-sootvetstvie-vyvodov-i-registrov

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

Но сам факт различия вывешен на самое видное место!

Ну если честно, то из приведенной вами таблички никак не понятно, что в библиотеке IRremote для Leonardo оказывается не 3 пин используется для подключения ИК диода, а 10 пин.

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

doc_bravn пишет:

Ну если честно, то из приведенной вами таблички никак не понятно, что в библиотеке IRremote для Leonardo оказывается не 3 пин используется для подключения ИК диода, а 10 пин.

А это и не может быть ниоткуда понятно, кроме как из документации по библиотеке. Она есть? Если нет, то это к авторам - типа "чо не написали?". Ну, а лучший способ - открывать текст бибилиотеки и смотреть, что я вчера и сделал.