Ви не увійшли.
Сторінки 1
Добрый день.
Интересует скетч для дистанционного управления инфро красным сигналом.
В програмировании не силен.Есть ардуино уно.
Осилил, по отдельности, вот эти примеры :
https://www.youtube.com/watch?v=PjR9jlP4644
https://www.youtube.com/watch?v=AjIASUNiWkY
Могу считать коды кнопок своих пультов.
Но объединить, что бы часть кнопок работало с удержанием ,
а часть с фиксацией скетчи ит.д. не получается ...
Хочу сделать дистанционное управление усилителем мощности.
В усилителе стояла плата управления на двух микросхемах и плата с управляющими реле.
В грозу плата управления выгорела (ремонту не подлежит, да и устарело все это,
по сервисам замену не найти)
Нужно управлять моторизованным сопротивлением или Servo , громкостью
(на пульте нажал, с удержанием + в одну сторону крутит , - в другую) ,
включать /выключать сеть и селектором входов(энкодер), 4 входа .
Если бы еще при переключении отключался предыдущий канал, вход.
Помогите, пожалуйста . За ранее благодарен. Может есть готовый скетч ?
Наверняка, кому то еще, будет интересно ... Готов оплатить услугу.
Неактивний
Может я чего не понимаю, но во втором видео, вроде бы объясняется только работа при удержании кнопки. А мне нужно при удержании регулировать только громкость. Сеть и селектор входов включать с фиксацией. То есть объединить два скетча в один. Объясните, пожалуйста. Или может поможете со скетчем ...
Неактивний
"Готов оплатить услугу." нужно быть убедительней ) тогда к Вам потянутся люди )
vvr , сказал правильно - начните с приемника, вместо моторов зажигайте лампочки, ну а потом по частям добавляйте свой функционал
т.е. вместо LED крутите свой мотор и т.д.
успеха
Неактивний
есть два пути.
или тупо попросить за денежку сделать проектик, выдав при этом полное задание
или самому начать писать код и просить помочь если что то не получается.
как действовать - решение за вами
Неактивний
Я же писал, готов оплатить услугу. Ну или как Вы выразились - за денежку сделать проектик.
От пульта должна включаться сеть (включить с фиксацией) режим Standby.
Селектор входов , 4 входа. При переключении должен отключаться предыдущий (включить с фиксацией).
Желательно управление пультом привязать к ручному режиму (энкодер) или галетный переключатель.
Как будет удобно и целесообразно разработчику.
Ну и режим управления громкостью . Кнопки +\- режим без фиксации .Пока нажаты идет сигнал на включение реле.
Все стандартно, как во всех усилителях мощности, почти.
Вот такой вот алгоритм.
Интересует сам скетч. Все остальное соберу сам.
Неактивний
уверен, Вы найдете исполнителя под эту задачу.
но если вдруг надумаете сами делать, напишите, в свободное время посмотрю и подправлю Ваш код.
иной вариант, для меня, на текущий момент неприемлем.
Неактивний
Бррр. Как то я например не приемлю в усилителях мощности цифровые системы. В уселках все таки аналог актуальнее и лучше звучит.
Кстати есть готовые решения по ДУ с аналогвовым резистором и реализованым к нему приводом от сервы.
Подскажите, пожалуйста, знатоки. Может мне подойдет вот этот пример ?Или чего надо добавить ?
Не совсем понял кнопки , кроме повер , включаются с удержанием ?
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();
}
}
Неактивний
GE_NE, привет.
vvr имел в виду сначала вывести на экран ваши коды от пульта. т.е. как их видит ваша ардуино.
надеюсь откликнется кто на отсурсе сидит.
есть тут несколько деятелей что заказы принимают , им отпишитесь.
успеха.
Неактивний
Проводил эксперимент
Пульт от ТВ Самсунг
E13DDA28 1
AD586662 2
273009C4 3
F5999288 4
731A3E02 5
2C452C6C 6
B9F56762 0
5F12E8C4 +каналы
189D7928 -каналы
68733A46 +громкость
83B19366 -громкость
Когда нажимаю кнопоку моего пульта на выходе ардуино загорается светодиод.
Нажимаю еще раз ,на ту же кнопку - светодиод тухнет.
Считаю, что это работа - с фиксацией.
Неактивний
Самый первый опыт был вот с таким скетчем . Изменил коды кнопок на свои.
Этот скетч с фиксацией кнопок. Работает.
//урок от Дмитрия Осипова - управление 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();
}
}
Остання редакція GE_NE (2015-09-23 21:09:15)
Неактивний
вы выложили код из примеров.
плс оформляйте как С++ код, 5 кнопка справа
но это не то что я хотел узнать,
кнопки вы уже идентифицируете.. какой следующий шаг,
сервой крутить? отработать на лампочках алгоритмы.
обьяснить что за строчка в примерах?
Неактивний
Выше я привел два примера.17 пост. Теперь их нужно как то объединить, что бы одна кнопка включала\выключала сеть режим стендбай т.е. при нажатии на кнопку давалась команда на один из выходов ардуино , чтобы включить реле питание усилителем. И чтобы при этом разблокировались ( или как правильно сказать, стали активны команды для переключения других кнопок. А именно переключение каналов. Их четыре. В примере выше нажал включено, еще нажал выключилось.
А как сделать, чтобы нажал и переключилось с предыдущего выхода на тот который нажал ?
На счет сервы, давайте пока отложим. Еще не выбрал, серво двигатель или мотор альпс. Не совсем разобрался с устройством и работой. Если серво то нужно углы поворота задавать ? Ну так вроде бы и мотор альпсы тоже также. Хотя видел в старых усилителях и с концевиками.
У меня в усилителе какой то мотор на громкости стоит. Алгоритма его работы я не знаю. Курочить пока не могу, усилитель сильно не дешевый ...
Хотя команды можно заложить , держишь кнопку на пульте + громкость на выходе ардуино есть сигнал, - громкость на другом выходе сигнал.
Так сказать команды с удержанием. Вот такие нужны команды.
И еще один момент. В 10 посте тоже есть пример. Чем он лучше\хуже того , что в 17. (первый пример)?
Неактивний
наверное я вам все таки порекомендую найти исполнителя.
то что вы хотите делается просто -
start
bool power_status = false;
set power OFF
if power button is pressed
{
set power ON
power_status = true
}
if power_status == true
{
check key1
check key2
check key3
и т.д.
}
пример алгоритма,
и не забывайте что выключение должно быть с удержанием например 700 мс, включение не по первому импульсу а например 300 мс
рекомендую расписать алгоритм хотя бы для себя, может в процессе создания корректного ТЗ прийдет понимание как сделать хороший алгоритм а не собрать код с двух примеров
код из примера более читабельный как по мне
http://arrduinolab.blogspot.ru/2014/04/ … st_10.html
#include <IRremote.h> // https://github.com/shirriff/Arduino-IRremote
#define RECV_PIN 8 // IR приемник
#define POWER_IR_KEY xxxx номер контакта что включает питание
#define OUT1 11 // выхода на мосфеты\реле
#define OUT2 12
#define OUT3 15
#define OUT4 14
#define POWER_IR_KEY 0x40BF30CF // коды пульта ДУ
#define KEY1 0x40BF7887
#define KEY2 0x40BFF807
#define KEY3 0xC03FC03F
#define KEY4 0xC03F40BF
IRrecv irrecv(RECV_PIN);
int power_status = 0;
decode_results results;
void setup()
{
irrecv.enableIRIn();
pinMode(POWER_PIN, OUTPUT);
pinMode(OUT1, OUTPUT);
pinMode(OUT2, OUTPUT);
pinMode(OUT3, OUTPUT);
pinMode(OUT4, OUTPUT);
digitalWrite(POWER_PIN, LOW);
}
void loop() {
if (irrecv.decode(&results))
{
if (results.value == POWER_IR_KEY)
{
if ( power_status == 0 )
{ power_status = 1; digitalWrite(POWER_PIN, LOW); }
else { power_status = 0; digitalWrite(POWER_PIN, HIGH); }
}
else if ( power_status )
{
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));
}
irrecv.resume();
}
}
подправите под свои нужды
вот его и возмите за основу, но начните с алгоритма
вариант "хочу это" не очень хорош
пример более корреткного описания задачи, тем более что цяця ваша хорошо звучит и наверяка денег стоит )
забейте в поиск state machine
много примеров понагляднее
Остання редакція NoName (2015-09-25 11:46:15)
Неактивний
А как сделать, чтобы нажал и переключилось с предыдущего выхода на тот который нажал ?
Ознакомитесь с этим уроком(а еще лучше со всеми с первого). Во второй части разбирается код который,
по моему, решит эту проблему.
https://www.youtube.com/watch?v=wjB2qZ3 … Zs_4VnJqLa
Сторінки 1