Ви не увійшли.
Сторінки 1
Выше я привел два примера.17 пост. Теперь их нужно как то объединить, что бы одна кнопка включала\выключала сеть режим стендбай т.е. при нажатии на кнопку давалась команда на один из выходов ардуино , чтобы включить реле питание усилителем. И чтобы при этом разблокировались ( или как правильно сказать, стали активны команды для переключения других кнопок. А именно переключение каналов. Их четыре. В примере выше нажал включено, еще нажал выключилось.
А как сделать, чтобы нажал и переключилось с предыдущего выхода на тот который нажал ?
На счет сервы, давайте пока отложим. Еще не выбрал, серво двигатель или мотор альпс. Не совсем разобрался с устройством и работой. Если серво то нужно углы поворота задавать ? Ну так вроде бы и мотор альпсы тоже также. Хотя видел в старых усилителях и с концевиками.
У меня в усилителе какой то мотор на громкости стоит. Алгоритма его работы я не знаю. Курочить пока не могу, усилитель сильно не дешевый ...
Хотя команды можно заложить , держишь кнопку на пульте + громкость на выходе ардуино есть сигнал, - громкость на другом выходе сигнал.
Так сказать команды с удержанием. Вот такие нужны команды.
И еще один момент. В 10 посте тоже есть пример. Чем он лучше\хуже того , что в 17. (первый пример)?
Самый первый опыт был вот с таким скетчем . Изменил коды кнопок на свои.
Этот скетч с фиксацией кнопок. Работает.
//урок от Дмитрия Осипова - управление 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();
}
}
Проводил эксперимент
Пульт от ТВ Самсунг
E13DDA28 1
AD586662 2
273009C4 3
F5999288 4
731A3E02 5
2C452C6C 6
B9F56762 0
5F12E8C4 +каналы
189D7928 -каналы
68733A46 +громкость
83B19366 -громкость
Когда нажимаю кнопоку моего пульта на выходе ардуино загорается светодиод.
Нажимаю еще раз ,на ту же кнопку - светодиод тухнет.
Считаю, что это работа - с фиксацией.
Люди ... отзовитесь. Помогите за деньги. Не уже ли сложная задача ?
vvr А, по командам, прописанным в скетче, нельзя увидеть,показать, объяснить ? Причем здесь коды кнопок пульта ?
Подскажите, пожалуйста, знатоки. Может мне подойдет вот этот пример ?Или чего надо добавить ?
Не совсем понял кнопки , кроме повер , включаются с удержанием ?
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();
}
}
Alex Wels Вы не внимательно читали. Какие цифровые системы ? Потенциометр моторизированный ALPS.
А селектор входов на реле.
Я же писал, готов оплатить услугу. Ну или как Вы выразились - за денежку сделать проектик.
От пульта должна включаться сеть (включить с фиксацией) режим Standby.
Селектор входов , 4 входа. При переключении должен отключаться предыдущий (включить с фиксацией).
Желательно управление пультом привязать к ручному режиму (энкодер) или галетный переключатель.
Как будет удобно и целесообразно разработчику.
Ну и режим управления громкостью . Кнопки +\- режим без фиксации .Пока нажаты идет сигнал на включение реле.
Все стандартно, как во всех усилителях мощности, почти.
Вот такой вот алгоритм.
Интересует сам скетч. Все остальное соберу сам.
Может я чего не понимаю, но во втором видео, вроде бы объясняется только работа при удержании кнопки. А мне нужно при удержании регулировать только громкость. Сеть и селектор входов включать с фиксацией. То есть объединить два скетча в один. Объясните, пожалуйста. Или может поможете со скетчем ...
Добрый день.
Интересует скетч для дистанционного управления инфро красным сигналом.
В програмировании не силен.Есть ардуино уно.
Осилил, по отдельности, вот эти примеры :
https://www.youtube.com/watch?v=PjR9jlP4644
https://www.youtube.com/watch?v=AjIASUNiWkY
Могу считать коды кнопок своих пультов.
Но объединить, что бы часть кнопок работало с удержанием ,
а часть с фиксацией скетчи ит.д. не получается ...
Хочу сделать дистанционное управление усилителем мощности.
В усилителе стояла плата управления на двух микросхемах и плата с управляющими реле.
В грозу плата управления выгорела (ремонту не подлежит, да и устарело все это,
по сервисам замену не найти)
Нужно управлять моторизованным сопротивлением или Servo , громкостью
(на пульте нажал, с удержанием + в одну сторону крутит , - в другую) ,
включать /выключать сеть и селектором входов(энкодер), 4 входа .
Если бы еще при переключении отключался предыдущий канал, вход.
Помогите, пожалуйста . За ранее благодарен. Может есть готовый скетч ?
Наверняка, кому то еще, будет интересно ... Готов оплатить услугу.
Сторінки 1