Управление с помощью ИК-пульта
- Войдите на сайт для отправки комментариев
Добрый день всем форумчанам!
Последнее время постоянно приходится создавать устройство на Ардуинке и управлять с помощью ИК-пульта, так как это самый дешевый способ дистанционного управления, по крайней мере известный мне.
Использую ИК-приемник VS1838b и пульты такого типа:
Управляем светодидами. При нажатии на определенную кнопку, меняеться значение переменной. Вроде все просто:
int i=0; int k=0; // выбор двухзначных регистров int a=0; int stope=0;// мигающий //Пин SH_CP int SH_CP = 4; //Пин ST_CP int ST_CP = 3; //Пин DS int DS = 2; #include <IRremote.h> // eto skachannaya biblioteka int RECV_PIN = 12; //vkhod IK priyemnika IRrecv irrecv(RECV_PIN); decode_results results; void setup() { irrecv.enableIRIn(); // Start the receiver // Настраиваем выходы SH_CP, ST_CP, DS pinMode(SH_CP, OUTPUT); pinMode(ST_CP, OUTPUT); pinMode(DS, OUTPUT); pinMode(5, OUTPUT); // светодиод 0 pinMode(6, OUTPUT); // светодиод 1 pinMode(7, OUTPUT); // светодиод 2 pinMode(8, OUTPUT); // светодиод 3 } void loop() { if (irrecv.decode(&results)) { delay(150); // zaderzhka pered vypolneniyem opredeleniya knopok , chtoby izbezhat? bystroye dvoynoye nazhatiye if (results.value == 0xFF9867) {k=1;delay(900);} if (results.value == 0xFF30CF && k==0) {a=0;i=0;stope=0;} // knopka 1 if (results.value == 0xFF30CF && k==1) {a=10;i=0; stope=0;} if (results.value == 0xFF18E7 && k!=1) {a=1;i=0; stope=0;} // knopka 2 if (results.value == 0xFF18E7 && k==1) {a=11;i=0; stope=0;} if (results.value == 0xFF7A85 && k!=1) {a=2;i=0;stope=0;} // knopka 3 if (results.value == 0xFF7A85 && k==1) {a=12;i=0;stope=0;} if (results.value == 0xFF10EF && k!=1) {a=3;i=0;stope=0;} // knopka 4 if (results.value == 0xFF10EF && k==1) {a=13;i=0;stope=0;} if (results.value == 0xFF38C7 && k!=1) {a=4;i=0;stope=0;} // knopka 5 if (results.value == 0xFF38C7 && k==1) {a=14;i=0;stope=0;} if (results.value == 0xFF5AA5 && k!=1) {a=5;i=0;stope=0;} // knopka 6 if (results.value == 0xFF5AA5 && k==1) {a=15;i=0;stope=0;} if (results.value == 0xFF42BD) {a=6;i=0;stope=0;} // knopka 7 if (results.value == 0xFF4AB5) {a=7;i=0;stope=0;} // knopka 8 if (results.value == 0xFF52AD) {a=8;i=0;stope=0;} // knopka 9 if (results.value == 0xFF6897 && k==1) {a=9;i=0;stope=0;} // knopka 0 if (results.value == 0xFFE01F) {a=a-1;i=0; stope=0;} // назад if(a<0){a=15;} if (results.value == 0xFF906F) {a=a+1;i=0; stope=0;} // вперед if(a==16){a=0;} if (results.value == 0xFFA857) {stope=1; i=0;} // мигающий irrecv.resume(); }
Тут алгоритмы мигания и тд, а вот окончание цикла void loop
if(i>10){k=0;} //if(i==8 && k==0 && a==10){i=0;a=0;} //начало работы первого светофора. registerWrite(a, HIGH); delay(500); }
Все работает, но с переменным успехом. То есть иногда все срабатывает с первого нажатия, иногда надо по пять раз нажать на кнопку. Почему, не могу понять. То ли пульты глючат, то ли приемники, а может дело в прошивке. И в основном начинает подглючивать когда собираю полностью устройство.
ИК-приемник подключал и через конденсаторы и на прямую.
Может кто работал с данными пультами и приемниками, знает нюансы. Буду очень признателен помощи.
Первое что бросается в глаза, так это у тебя каждый цикл программа тормозит на ПОЛ СЕКУНДЫ!!! избавься от delay(500); либо уменьши до 50-ти.
Ок, попробую.
А с пультами или с приемником такими не работали?
Ок, попробую.
А с пультами или с приемником такими не работали?
Точно с такими, нет.
Я пробовал этот пульт. Пульт галимый. Уверенная расшифровка сигнала не более 1,5м. На том же фотоприемнике и с такой же программой пульт от телевизора работает на 5-6м.
Я пробовал этот пульт. Пульт галимый. Уверенная расшифровка сигнала не более 1,5м. На том же фотоприемнике и с такой же программой пульт от телевизора работает на 5-6м.
да. многие бьются, улучшая код и аппаратное на стороне приёмника, но в упор не задумываются, что пульт может быть полное гавно.
рекомендую пойти на радио-рынок и купить за пару копеек пяток пультов от старых японских телевизоров.
Проблема в том, что это серийное изделие у меня. надо выбрать один тип пульта и на все время... Не знаете адекватной замены за вменяемые деньги?
Нет. Не знаю.
Предлагаю разобрать пульт и посмотреть внутренности, возможно не все детали распаяны.
я по 5 пультов покупал. Работало рамдомно. Доработаю скетч, как советовали, потом отпишусь.
http://arduino.ru/forum/programmirovanie/sketch-dlya-pokupnogo-ik-pulta
тут мой код без библиотеки, использую прерывание. Определяет четко с первого раза кнопку.
Я тоже столкнулся с тем , что библиотека IRemote = не стабильно работает.
Лог таймингов пульта стабилен.