#1 Re: Програмування Arduino » Нужна помощь, пульт ДУ » 2015-09-24 21:20:34

Выше я привел два примера.17 пост. Теперь их нужно как то объединить, что бы одна кнопка включала\выключала сеть  режим стендбай т.е. при нажатии на кнопку давалась команда на  один из выходов  ардуино , чтобы включить реле питание усилителем. И чтобы при этом разблокировались ( или как правильно сказать, стали активны команды для переключения других кнопок. А именно переключение каналов. Их четыре. В примере выше нажал включено, еще нажал выключилось.
А как сделать, чтобы нажал и переключилось с предыдущего выхода на тот который нажал ?
На счет сервы, давайте пока отложим. Еще не выбрал, серво двигатель или мотор альпс. Не совсем разобрался с устройством и работой. Если серво то нужно углы поворота задавать ? Ну так вроде бы и мотор альпсы тоже также. Хотя видел в старых усилителях и с концевиками.
У меня в усилителе какой то мотор на громкости стоит. Алгоритма его работы я не знаю. Курочить пока не могу, усилитель сильно не дешевый ...
Хотя команды можно заложить , держишь кнопку на пульте + громкость на выходе ардуино есть сигнал,   - громкость на другом выходе сигнал.
Так сказать команды с удержанием. Вот такие нужны команды.

И еще один момент. В 10 посте тоже есть пример. Чем он лучше\хуже того , что в 17. (первый пример)?

#2 Re: Програмування Arduino » Нужна помощь, пульт ДУ » 2015-09-23 20:34:35

Самый первый опыт был вот с таким скетчем . Изменил коды кнопок на свои.
Этот скетч с фиксацией кнопок. Работает.

//урок от Дмитрия Осипова - управление arduino ИК пультом   
С исправленными моими кодами команд (пульт ТВ Самсунг)
#include <IRremote.h> // это скачанная библиотека

int RECV_PIN = 11; //вход ИК приемника
IRrecv irrecv(RECV_PIN);
decode_results results;
int a=0; // переменная переключения режима, при нажатии кнопки она принимает значение +1
int b=0; //
int c=0; //
int d=0; //
int e=0; //
int f=0; //
int g=0; //


void setup()
{
irrecv.enableIRIn(); // включить приемник

pinMode(13, OUTPUT);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT); // назначаем пины как выходы
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);

}

void loop() {
if (irrecv.decode(&results)) {
delay(300); // задержка перед выполнением определения кнопок, чтобы избежать быстрое двойное нажатие

if (results.value == 0xE13DDA28) {a=a+1;} // обработка нажитя клавиши, здесь переменная принимает значение +1
if (results.value == 0xAD586662) {b=b+1;} //ВАЖНО !!! ( 1008889 ) это код кнопки №2 - моего пульта от телевизора Panasonic - у вашего пульта будет другой код - замените на свой
if (results.value == 0x273009C4) {c=c+1;}
if (results.value == 0xF5999288) {d=d+1;}
if (results.value == 0x731A3E02
) {e=e+1;}
if (results.value == 0x2C452C6C
) {f=f+1;}
if (results.value == 0xB9F56762) {g=g+1;}

// начинаем включать светодиоды на пинах
if (a==1){digitalWrite(13, HIGH);} else {digitalWrite(13, LOW); a=0;} // действие после нажатия кнопки, если переменная стала равна 1 то
if (b==1){digitalWrite(2, HIGH);} else {digitalWrite(2, LOW); b=0;} // произвести переключение пина в режим HIGH, если же нет то вернуть переменную в исходное состояние
if (c==1){digitalWrite(3, HIGH);} else {digitalWrite(3, LOW); c=0;} // Дествие может быть другим
if (d==1){digitalWrite(4, HIGH);} else {digitalWrite(4, LOW); d=0;} // действие после нажатия кнопки
if (e==1){digitalWrite(5, HIGH);} else {digitalWrite(5, LOW); e=0;} // действие после нажатия кнопки
if (f==1){digitalWrite(6, HIGH);} else {digitalWrite(6, LOW); f=0;} // действие после нажатия кнопки
if (g==1){digitalWrite(7, HIGH);} else {digitalWrite(7, LOW); g=0;} // действие после нажатия кнопки


{ //
delay(50); //пауза между повторами //
} //
irrecv.resume(); //

}

}

Следующий опыт был с удержанием кнопок. Пока кнопка нажата светодиод светится.
Работает

/* урок от Дмитрия Осипова. http://www.youtube.com/user/d36073?feature=watch
v.01 Arduino IR Управление с ИК пульта в режиме удержания кнопки
Version 0.1 2013/07/02

После того как я выложил видео
1/6 Управление Arduino с ИК пульта - начало
http://www.youtube.com/watch?v=PjR9jlP4644
поступило немало  просьб такого содержания
(Антон Палыч
Дмитрий, огромная благодарность за Ваш труд! Все просто и доходчиво.
Скачал Ваш пример "urok ot Dmitriya Osipova - upravleniye Arduino IK pulоtom"
Все работает но у меня возник вопрос. Как сделать,
что бы кнопка определенного пина работала в режиме удержания а не в режиме "триггер" как в уроке?
То есть нажимая и удерживая кнопку пульта напряжение идет, отпуская исчезает.)
//
Поначалу я думал все это будет сделать очень легко и просто, а потом выяснилось что тут
много подводных камней.
в видео я подробно все это изложу
v.01 Arduino IR Управление с ИК пульта в режиме удержания кнопки
https://www.youtube.com/watch?v=AjIASUNiWkY

*******************************************************************


Скачать библиотеку IRremote для ИК пульта
https://disk.yandex.ru/public/?hash=yNz … mhW4Xt0%3D

скетч arduino чтобы узнать код кнопки ИК пульта
sketch arduino buttons on the remote to learn the code
https://disk.yandex.ru/public/?hash=KzL … QKJHGRQ%3D

4/6 как ? узнать код - кнопки своего ИК пульта
http://www.youtube.com/watch?v=InZuGntH_wk

Arduino Розетки, Управление любым ИК пультом, (программируемые на лету) socket IR remote control
http://www.youtube.com/watch?v=Nx6DUQ7Tx1w

усилитель ИК инфракрасного сигнала IR infrared signal amplifier на одном транзисторе Arduino
http://www.youtube.com/watch?v=3EYxONWSyR4

*/

#include <IRremote.h> // это скачанная библиотека

int RECV_PIN = 11; //вход ИК приемника
IRrecv irrecv(RECV_PIN);
decode_results results;

//eventTime, для паузы,  вместо delay,будем использовать функцию millis.
unsigned long eventTime=0;
//индикация таймера
int timer = 12;

int L13 = 13; //пины управляющие моторами, светодиодами, или реле, чем угодно.
int L2 = 2;
int L3 = 3;
int L4 = 4;
int L5 = 5;
int L6 = 6;
int L7 = 7;
int L8 = 8;

void setup(){
  irrecv.enableIRIn(); // включить приемник

  pinMode(L13, OUTPUT); // назначаем пины как выходы
  pinMode(L2, OUTPUT);
  pinMode(L3, OUTPUT);
  pinMode(L4, OUTPUT);
  pinMode(L5, OUTPUT);
  pinMode(L6, OUTPUT);
  pinMode(L7, OUTPUT);
  pinMode(L8, OUTPUT);

  pinMode(timer, OUTPUT);
}
void loop() {
  // Эта конструкция нужна чтобы конвертировать пульсирующий (-) с (ИК) преемника сигнал в постоянный.
  //После появление и пропадания сигнала, состояние сразу не меняется! а ждет  100 миллисекунд.
  //Если 100 миллисекунд не прошло, и поступил еще один сигнал с пульта, тогда таймер заново запускается на 100 миллисекунд.

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

  // Читаем данные с (ИК) преемника. В момент приема данных у (ИК) приемника на выходе появляется пульсирующий (-)отрицательный сигнал
  if (digitalRead(RECV_PIN) == LOW)
    //  Если обнаружен отрицательный сигнал запускаем таймер,и включаем таймерПИН //(timer, HIGH);
    eventTime=millis(),digitalWrite(timer, HIGH);
  //  Продолжительность работы таймера >100 миллисекунд. И ТаймерПИН выключаем //(timer, LOW)
  if(millis()-eventTime>100) digitalWrite(timer, LOW)
    //  и вЫключаем все
    ,digitalWrite(L13, LOW),digitalWrite(L2, LOW),digitalWrite(L3, LOW)
      ,digitalWrite(L4, LOW),digitalWrite(L5, LOW),digitalWrite(L6, LOW),digitalWrite(L7, LOW),digitalWrite(L8, LOW);

  if (irrecv.decode(&results)) {
    //ВАЖНО !!! ( 1000809 ) это код кнопки №1 - моего (ИК)! (инфракрасного пульта)!, -
    //-у вашего пульта будет другой код, замените на свой!
    // У моего пульта при нажатии на одну и ту же кнопку, могут отсылаться два разных (КОДА) сигнала,  чтобы обойти эту проблему
    //я использовал Логический оператор "или" (||) if (results.value == 0x1000809 || results.value == 0xF7283C77
    // Теперь неважно какой код отправлен  с кнопки пульта, первый или второй
    // Если ваша кнопка пульта не страдает раздвоением личности, можете написать так if (results.value == 0x1000809

    //Только при условии если, (Одновременно),Обнаружен поступивший код кнопки
    // и выключен ТаймерПИН,"и" "&&" (digitalRead(timer) == HIGH)
    // включаем нужный нам pin, digitalWrite(L13, HIGH);

    if (results.value == 0xE13DDA28 || results.value == 0xF7283C77 && (digitalRead(timer) == HIGH) )digitalWrite(L13, HIGH);
    if (results.value == 0xAD586662 || results.value == 0x757FB4DF && (digitalRead(timer) == HIGH) )digitalWrite(L2, HIGH);
    if (results.value == 0x273009C4 || results.value == 0xB33B4597 && (digitalRead(timer) == HIGH) )digitalWrite(L3, HIGH);
    if (results.value == 0xF5999288 || results.value == 0x3C03E507 && (digitalRead(timer) == HIGH) )digitalWrite(L4, HIGH);
    if (results.value == 0x731A3E02 || results.value == 0xE705551F && (digitalRead(timer) == HIGH) )digitalWrite(L5, HIGH);
    if (results.value == 0x2C452C6C || results.value == 0xA4A58EC7 && (digitalRead(timer) == HIGH) )digitalWrite(L6, HIGH);
    if (results.value == 0xB9F56762 || results.value == 0xE2E45F7F && (digitalRead(timer) == HIGH) )digitalWrite(L7, HIGH);
   

    irrecv.resume();
  }
}

#3 Re: Програмування Arduino » Нужна помощь, пульт ДУ » 2015-09-23 16:03:54

Проводил эксперимент
Пульт от ТВ Самсунг

E13DDA28      1
AD586662      2
273009C4      3
F5999288       4
731A3E02       5
2C452C6C       6
B9F56762       0

5F12E8C4      +каналы
189D7928      -каналы

68733A46      +громкость
83B19366       -громкость

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

#4 Re: Програмування Arduino » Нужна помощь, пульт ДУ » 2015-09-23 11:48:45

Люди ... отзовитесь. Помогите за деньги. Не уже ли сложная задача ?
vvr  А, по командам, прописанным в скетче, нельзя увидеть,показать, объяснить ? Причем здесь коды кнопок пульта ?

#5 Re: Програмування Arduino » Нужна помощь, пульт ДУ » 2015-09-12 13:49:30

Подскажите, пожалуйста, знатоки. Может мне подойдет вот этот пример ?Или чего надо добавить ?
Не совсем понял кнопки , кроме повер , включаются с удержанием ?
http://arrduinolab.blogspot.ru/2014/04/ … st_10.html

#include <IRremote.h> // https://github.com/shirriff/Arduino-IRremote

#define RECV_PIN 8 // IR приемник
#define OUT1 11 // выхода на мосфеты\реле
#define OUT2 12
#define OUT3 15
#define OUT4 14

#define POWER_KEY 0x40BF30CF // коды пульта ДУ
#define KEY1 0x40BF7887
#define KEY2 0x40BFF807
#define KEY3 0xC03FC03F
#define KEY4 0xC03F40BF

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
  irrecv.enableIRIn(); 
  pinMode(OUT1, OUTPUT);
  pinMode(OUT2, OUTPUT);
  pinMode(OUT3, OUTPUT);
  pinMode(OUT4, OUTPUT);
}

void loop() {
  if (irrecv.decode(&results)) {
    if (results.value == KEY1) digitalWrite(OUT1, !digitalRead(OUT1));
    else if (results.value == KEY2) digitalWrite(OUT2, !digitalRead(OUT2));
    else if (results.value == KEY3) digitalWrite(OUT3, !digitalRead(OUT3));
    else if (results.value == KEY4) digitalWrite(OUT4, !digitalRead(OUT4));
   
    else if (results.value == POWER_KEY) { 
      if (digitalRead(OUT1) || digitalRead(OUT2) || digitalRead(OUT3) || digitalRead(OUT4)){
        digitalWrite(OUT1, LOW);
        digitalWrite(OUT2, LOW);
        digitalWrite(OUT3, LOW);
        digitalWrite(OUT4, LOW); 
      }
      else {
        digitalWrite(OUT1, HIGH);
        digitalWrite(OUT2, HIGH);
        digitalWrite(OUT3, HIGH);
        digitalWrite(OUT4, HIGH); 
      }         
    }
    irrecv.resume(); 
  }
}

#6 Re: Програмування Arduino » Нужна помощь, пульт ДУ » 2015-09-12 13:33:56

Alex Wels Вы не внимательно читали. Какие цифровые системы ? Потенциометр моторизированный ALPS.
А селектор входов на реле.

#7 Re: Програмування Arduino » Нужна помощь, пульт ДУ » 2015-09-11 09:17:21

Я же писал, готов оплатить услугу. Ну или как Вы выразились - за денежку сделать проектик.
От пульта должна включаться сеть (включить с фиксацией) режим Standby.
Селектор входов , 4 входа. При переключении должен отключаться предыдущий (включить с фиксацией).
Желательно управление пультом привязать к ручному режиму (энкодер) или галетный переключатель.
Как будет удобно и целесообразно разработчику.
Ну и режим управления громкостью . Кнопки +\- режим без фиксации .Пока нажаты идет сигнал на включение реле.
Все стандартно, как во всех усилителях мощности, почти.
Вот такой вот алгоритм.
Интересует сам скетч. Все остальное соберу сам.

#8 Re: Програмування Arduino » Нужна помощь, пульт ДУ » 2015-09-10 17:32:05

Может я чего не понимаю, но во втором видео, вроде бы объясняется только работа при удержании кнопки. А мне нужно при удержании регулировать только громкость. Сеть и селектор входов включать с фиксацией. То есть объединить два скетча в один. Объясните, пожалуйста. Или может поможете со скетчем ...

#9 Програмування Arduino » Нужна помощь, пульт ДУ » 2015-09-10 15:05:30

GE_NE
відповідей: 20

Добрый день.
Интересует скетч для дистанционного управления инфро красным сигналом.
В програмировании не силен.Есть ардуино уно.
Осилил, по отдельности, вот эти примеры :
https://www.youtube.com/watch?v=PjR9jlP4644
https://www.youtube.com/watch?v=AjIASUNiWkY
Могу считать коды кнопок своих пультов.
Но объединить, что бы часть кнопок работало с удержанием ,
а часть с фиксацией скетчи ит.д. не получается ...

Хочу сделать  дистанционное управление усилителем мощности.
В усилителе стояла плата управления на двух микросхемах и плата с управляющими реле.
В грозу плата управления выгорела (ремонту не подлежит, да и устарело все это,
по сервисам замену не найти)
Нужно управлять моторизованным сопротивлением или Servo , громкостью
(на пульте нажал, с удержанием + в одну сторону крутит , - в другую) ,
включать /выключать сеть и селектором входов(энкодер), 4 входа .
Если бы еще при переключении отключался  предыдущий канал, вход.
Помогите, пожалуйста . За ранее благодарен. Может есть готовый скетч ?
Наверняка, кому то еще, будет интересно ... Готов оплатить услугу.

Підвал форуму