Дублирование сигналов на пины

Demic
Offline
Зарегистрирован: 17.05.2016

Господа, помогите плиз новичку. В общем-то задача следующая. Нужно управлять телевизорами с помощью ардуино. С горем пополам скетч написал. Костыль на костыле) Сейчас его приведу здесь, просьба ногами не пинать, первый скетч в жизни. Вопрос номер раз. Скетч в том виде который есть - работает. Для отладки ставил Serial.print что бы вообще понимать что происходит. После проверки убрал это. В итоге одна команда проходит, вторая - нет. И вопрос номер 2. Библиотека IRremote посылает сигнал на 3 цифровой пин. Изменить это нельзя. В принципе это не критично. Но! На пин можно повесить 4 светодиода, больше не тянет. Варианта решения проблемы вижу 2: 1. Поставить транзистор для усиления, самое очевидное, но у меня же еще куча свободных пинов! Отсюда  возможное решение номер 2. программно продублировать сигнал с 3го пина на несколько других, и расключить светодиоды на них. Как это можно сделать? Заранее благодарю! Вот мой скетч:

 

Moderator : пожалуйста, вставьте код правильно (возможно, новым сообщением в тему), 

 
 

 

Demic
Offline
Зарегистрирован: 17.05.2016
#include <IRremote.h>

IRsend irsend;

unsigned int irSignal[] = {9100,4300, 550,550, 850,300, 550,600, 550,550, 600,550, 800,350, 550,1700, 550,550, 600,1650, 600,1650, 600,1650, 600,1700, 550,1700, 550,1700, 550,550, 600,1650, 600,550, 550,1700, 550,600, 750,350, 700,1550, 750,400, 700,450, 750,350, 600,1700, 550,550, 550,1700, 700,1550, 600,550, 550,1700, 550,1700, 750,1500, 550}; //AnalysIR Batch Export (IRremote) - RAW

  unsigned int irSignal2[] = {8950,4450, 550,550, 800,350, 550,600, 550,550, 850,300, 700,450, 550,100, 100,1500, 550,600, 550,1700, 800,1450, 550,1700, 550,1700, 550,1700, 550,1700, 550,600, 550,1700, 550,550, 600,1650, 600,550, 550,1700, 550,600, 550,600, 550,550, 550,600, 550,1700, 550,600, 550,1700, 750,350, 600,1650, 600,1650, 600,1650, 600,1700, 700}; //AnalysIR Batch Export (IRremote) - RAW

int khz = 38; // 38kHz carrier frequency for the NEC protocol

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

void loop() 
{
Serial.print("Wait 30 sec");
 delay (30000); //ждем 30 сек
  
    
  irsend.sendRaw(irSignal, sizeof(irSignal) / sizeof(irSignal[0]), khz); //Note the approach used to automatically calculate the size of the array.
  Serial.print("irSignal sent ON"); 
  delay (1200000); //ждем 2 мин
  Serial.print("Wait 30 sec");  
  
 
  irsend.sendRaw(irSignal2, sizeof(irSignal2) / sizeof(irSignal2[0]), khz); //Note the approach used to automatically calculate the size of the array.
 Serial.print("irSignal2 sent OK"); 
  Serial.print("Wait 48 hour");
  delay (1728000000); //ждем 48 часов, просто так
  
}

 

b707
Offline
Зарегистрирован: 26.05.2017

Demic пишет:

 В итоге одна команда проходит, вторая - нет.

А долго ждали вторую команду? - у вас задержка между командами 20 минут(строка 24).

Во второй команде, кстати, тоже задержка не 48 часов... поаккуратнее с длинными числами

 

Цитата:
И вопрос номер 2. Библиотека IRremote посылает сигнал на 3 цифровой пин. Изменить это нельзя.

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

Demic
Offline
Зарегистрирован: 17.05.2016

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

Может я конечно не разобрался, но в примере с которого я это переделывал как раз наоборот написано. например считывал нужные мне команды я на 11 пине. И его поменять можно. Вот цитата:

"Для приема сигнала, будем использовать скетч для примеров IRrecvDump, библиотеки IRremote. Соответственно перед работой, библиотеку нужно скачать и установить. Открываем скетч IRrecvDump, проверяем номер пина у переменной RECV_PIN, должен стоять тот, к которому Вы подключили сигнальный провод к Arduino. В нашем случае, этот рядок должен иметь такой вид int RECV_PIN = 4;"

Что касаемо передачи:

"Подключение IR передатчика к Arduino производится следующим образом: минус передатчика подключаем к пину GND. Плюс подключаем к 3 пину (цифровой выход). Причем, номер пина указан в самой библиотеке IRremote, и выставить другой пин в самом скетче нельзя. "

Можете подсказать как передать сигнал на несколько пинов? 

b707
Offline
Зарегистрирован: 26.05.2017

Demic пишет:

Все нормально с задержками.

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

Цитата:
Можете подсказать как передать сигнал на несколько пинов? 

залезть в библиотеку и дописать дублирование сигнала на другие пины.

Но вообще  самое простое - это подключить несколько диодов к одному пину через транзистор

Demic
Offline
Зарегистрирован: 17.05.2016
С нулями нормально) ждёт как и должно 30 сек и 2 мин. Милисекунды же. 30к милисекунд это 30 сек.
Спасибо за совет. Так и будем делать. Просто не хочется добавлять деталей, если есть избыточные выходы. Жаль что программно не реализовать.
b707
Offline
Зарегистрирован: 26.05.2017

Demic пишет:

С нулями нормально) ждёт как и должно 30 сек и 2 мин. Милисекунды же. 30к милисекунд это 30 сек.

с 30 сек все нормально, а 1 200 000 миллисекунд - это не 2 минуты, а 20. Считайте внимательно.

Demic
Offline
Зарегистрирован: 17.05.2016

Спасибо! Когда правил лишний ноль поставил.....