-
Re: Управление компьютером, любым ИК пультом.
У меня все работает
Повесил светодиод на D3 , залил ниже выложенный скетчь
и визуально вижу отправляемые пакеты с паузой 1 сек
PHP код:
#include <IRremote.h>
IRsend irsend;
void setup()
{
}
void loop()
{
irsend.sendNEC(0x10EF28D7, 32);
delay(100);
irsend.sendNEC(0x10EF28D7, 32);
delay(100);
irsend.sendNEC(0x10EF28D7, 32);
delay(1000);
}
-
Re: Управление компьютером, любым ИК пультом.
Может у меня что-нить с библиотекой не так? Качал и отсюда и с сайта разработчика... Одна отправка и висит...
-
Re: Управление компьютером, любым ИК пультом.
А светодиод через ограничивающий ток резистор подключил?
-
Re: Управление компьютером, любым ИК пультом.
Да 100. Как на схеме. И с диодом виснет и без него... В смысле, даже если на пустой Пин 3 послать сигнал. Оч. странно.
-
Re: Управление компьютером, любым ИК пультом.
Действительно странно ???
-
Re: Управление компьютером, любым ИК пультом.
ребят помогите дайте исходник программы для работы с ик приёмником желательно на дельфи очень надо ноподобе IRKey.
-
Re: Управление компьютером, любым ИК пультом.
Купил пульт на руль JVC RM-RK39 с Arduino неработает, пульт нравится у него в отличии от пионера крепление хорошее не болтается. что делать как заставить его работать?
-
Re: Управление компьютером, любым ИК пультом.
Цитата:
Сообщение от
joni_ku
Купил пульт на руль JVC RM-RK39 с Arduino неработает, пульт нравится у него в отличии от пионера крепление хорошее не болтается. что делать как заставить его работать?
Таже фигня. Надо разбираться, но пока некогда :-(
-
Re: Управление компьютером, любым ИК пультом.
Нужно добавить в библиотеку обработку JVC протокола. Здесь про это есть.
-
Re: Управление компьютером, любым ИК пультом.
Взял с вышеуказанного сайта
JVC protocol:
PHP код:
#define JVC_HDR_MARK 8000
#define JVC_HDR_SPACE 4000
#define JVC_BIT_MARK 600
#define JVC_ONE_SPACE 1600
#define JVC_ZERO_SPACE 550
#define JVC_RPT_LENGTH 60000
//Sending function:
void IRsend::sendJVC(unsigned long data, int nbits, int repeat)
{
enableIROut(38);
data = data << (32 - nbits);
if (!repeat){
mark(JVC_HDR_MARK);
space(JVC_HDR_SPACE);
}
for (int i = 0; i < nbits; i++) {
if (data & TOPBIT) {
mark(JVC_BIT_MARK);
space(JVC_ONE_SPACE);
}
else {
mark(JVC_BIT_MARK);
space(JVC_ZERO_SPACE);
}
data <<= 1;
}
mark(JVC_BIT_MARK);
space(0);
}
//Receiving funtion:
long IRrecv::decodeJVC(decode_results *results) {
long data = 0;
int offset = 1; // Skip first space
// Check for repeat
if (irparams.rawlen - 1 == 33 &&
MATCH_MARK(results->rawbuf[offset], JVC_BIT_MARK) &&
MATCH_MARK(results->rawbuf[irparams.rawlen-1], JVC_BIT_MARK)) {
results->bits = 0;
results->value = REPEAT;
results->decode_type = JVC;
return DECODED;
}
// Initial mark
if (!MATCH_MARK(results->rawbuf[offset], JVC_HDR_MARK)) {
return ERR;
}
offset++;
if (irparams.rawlen < 2 * JVC_BITS + 1 ) {
return ERR;
}
// Initial space
if (!MATCH_SPACE(results->rawbuf[offset], JVC_HDR_SPACE)) {
return ERR;
}
offset++;
for (int i = 0; i < JVC_BITS; i++) {
if (!MATCH_MARK(results->rawbuf[offset], JVC_BIT_MARK)) {
return ERR;
}
offset++;
if (MATCH_SPACE(results->rawbuf[offset], JVC_ONE_SPACE)) {
data = (data << 1) | 1;
}
else if (MATCH_SPACE(results->rawbuf[offset], JVC_ZERO_SPACE)) {
data <<= 1;
}
else {
return ERR;
}
offset++;
}
//Stop bit
if (!MATCH_MARK(results->rawbuf[offset], JVC_BIT_MARK)){
return ERR;
}
// Success
results->bits = JVC_BITS;
results->value = data;
results->decode_type = JVC;
return DECODED;
}
Цитата:
*Note instead of sending the REPEAT constant if you want the JVC repeat signal sent, send the original code value and change the repeat argument from 0 to 1. JVC protocol repeats by skipping the header NOT by sending a separate code value like NEC does.
-
Re: Управление компьютером, любым ИК пультом.
Я так понял, что этот кусок надо добавить к библиотеке?
-
Re: Управление компьютером, любым ИК пультом.
ребят в програмировании 3- подскажите что делать надо чтоб заработало
-
Re: Управление компьютером, любым ИК пультом.
У кого есть пульт JVC - попробуйте эту библиотеку.
Тут еще добавлена поддержка 3D ТВ самсунг - это проверено.
-
Re: Управление компьютером, любым ИК пультом.
выдаёт один и тотже код 3041575485 независомо какая клавиша нажата
-
Re: Управление компьютером, любым ИК пультом.
запусти SerialMonitor, выбири скорость 115200, нажми кнопку на пульте, скопируй то, что он выдаст и напиши здесь.
-
Re: Управление компьютером, любым ИК пультом.
SerialMonitor из arduino-0018 выдаёт ероглифы какието а вот monitor.exe ваша прога выдает в DEC 47 208 74 181 47 208 74 181
47 208 74 181 47 208 74 181 47 208 74 181 47 208 74 181
47 208 74 181 47 208 74 181 перебрал все кнопки
-
Re: Управление компьютером, любым ИК пультом.
-
Re: Управление компьютером, любым ИК пультом.
Ура работает причём оба пульта и pioner и jvc !!! спасибо CarMonitor.ru
-
Re: Управление компьютером, любым ИК пультом.
Могу добавить протокол для пультов SHARP и PANASONIC. Вот только проверить не начем, если кого заинтересует пишите , добавлю
PHP код:
#define PANASONIC_HDR_MARK 3502
#define PANASONIC_HDR_SPACE 1750
#define PANASONIC_BIT_MARK 502
#define PANASONIC_ONE_SPACE 1244
#define PANASONIC_ZERO_SPACE 370
//Sending function:
void IRsend::sendPanasonic(unsigned long address, unsigned long data) {
enableIROut(38);
mark(PANASONIC_HDR_MARK);
space(PANASONIC_HDR_SPACE);
for (int i=0; i < 32; i++) {
mark(PANASONIC_BIT_MARK);
if (address & 0x80000000) {
space(PANASONIC_ONE_SPACE);
} else {
space(PANASONIC_ZERO_SPACE);
}
address <<= 1;
}
for (int i=0; i < 16; i++) {
mark(PANASONIC_BIT_MARK);
if (data & 0x8000) {
space(PANASONIC_ONE_SPACE);
} else {
space(PANASONIC_ZERO_SPACE);
}
data <<= 1;
}
mark(PANASONIC_BIT_MARK);
space(30000);
space(30000);
space(14000);
}
//Receiving funtion:
long IRrecv::decodePanasonic(decode_results *results) {
unsigned long data = 0;
int offset = 1;
if (!MATCH_MARK(results->rawbuf[offset], PANASONIC_HDR_MARK)) {
return ERR;
}
offset++;
if (!MATCH_MARK(results->rawbuf[offset], PANASONIC_HDR_SPACE)) {
return ERR;
}
offset++;
// decode address
for (int i = 0; i < 32; i++) {
if (!MATCH_MARK(results->rawbuf[offset++], PANASONIC_BIT_MARK)) {
return ERR;
}
if (MATCH_SPACE(results->rawbuf[offset],PANASONIC_ONE_SPACE)) {
data = (data << 1) | 1;
} else if (MATCH_SPACE(results->rawbuf[offset],PANASONIC_ZERO_SPACE)) {
data <<= 1;
} else {
return ERR;
}
offset++;
}
results->address = data;
data = 0;
for (int i = 0; i < 16; i++) {
if (!MATCH_MARK(results->rawbuf[offset++], PANASONIC_BIT_MARK)) {
return ERR;
}
if (MATCH_SPACE(results->rawbuf[offset],PANASONIC_ONE_SPACE)) {
data = (data << 1) | 1;
} else if (MATCH_SPACE(results->rawbuf[offset],PANASONIC_ZERO_SPACE)) {
data <<= 1;
} else {
return ERR;
}
offset++;
}
results->value = data;
results->decode_type = PANASONIC;
results->bits = 48;
return DECODED;
}
Протокол для пультов SHARP
PHP код:
//IRremote.h
#define DISH 5
#define SHARP 6
void sendDISH(unsigned long data, int nbits);
void sendSharp(unsigned long data, int nbits);
//IRremoteInt.h
#define SHARP_BIT_MARK 245
#define SHARP_ONE_SPACE 1805
#define SHARP_ZERO_SPACE 795
#define SHARP_GAP 600000
#define SHARP_TOGGLE_MASK 0x3FF
#define SHARP_RPT_SPACE 3000
#define DISH_HDR_MARK 400
#define DISH_HDR_SPACE 6100
#define DISH_BIT_MARK 400
#define DISH_ONE_SPACE 1700
#define DISH_ZERO_SPACE 2800
#define DISH_RPT_SPACE 6200
#define DISH_TOP_BIT 0x8000
#define SHARP_BITS 15
#define DISH_BITS 16
//IRremote.cpp
void IRsend::sendSharp(unsigned long data, int nbits) {
unsigned long invertdata = data ^ SHARP_TOGGLE_MASK;
enableIROut(38);
for (int i = 0; i < nbits; i++) {
if (data & 0x4000) {
mark(SHARP_BIT_MARK);
space(SHARP_ONE_SPACE);
}
else {
mark(SHARP_BIT_MARK);
space(SHARP_ZERO_SPACE);
}
data <<= 1;
}
mark(SHARP_BIT_MARK);
space(SHARP_ZERO_SPACE);
delay(46);
for (int i = 0; i < nbits; i++) {
if (invertdata & 0x4000) {
mark(SHARP_BIT_MARK);
space(SHARP_ONE_SPACE);
}
else {
mark(SHARP_BIT_MARK);
space(SHARP_ZERO_SPACE);
}
invertdata <<= 1;
}
mark(SHARP_BIT_MARK);
space(SHARP_ZERO_SPACE);
delay(46);
}
void IRsend::sendDISH(unsigned long data, int nbits)
{
enableIROut(56);
mark(DISH_HDR_MARK);
space(DISH_HDR_SPACE);
for (int i = 0; i < nbits; i++) {
if (data & DISH_TOP_BIT) {
mark(DISH_BIT_MARK);
space(DISH_ONE_SPACE);
}
else {
mark(DISH_BIT_MARK);
space(DISH_ZERO_SPACE);
}
data <<= 1;
}
}
-
Re: Управление компьютером, любым ИК пультом.
Цитата:
Сообщение от
CarMonitor.ru
Не скачивается... :-(
-
Re: Управление компьютером, любым ИК пультом.
-
Re: Управление компьютером, любым ИК пультом.
-
Re: Управление компьютером, любым ИК пультом.
Цитата:
Сообщение от
Chip
Нужно сначала запустить как есть и в программе конфиг посмотреть коды на нужные тебе кнопки, потом эти коды квключить в этот скетчь
if (ххххххх=n){DigitalWrite(светодиод, HIGH)}
Подскажите пожалуйста люди добрые) перед чем или после чего этот код должен идти?
и ещё как должен выглядеть код "ххххххх" и что за "n"
программа определяет код кнопки как "2558040184"
перевожу, получается "98789878"
и ещё после ", HIGH)" нужно ";" )))
Спасибо за ответы.
-
Re: Управление компьютером, любым ИК пультом.
В общем поковырялся ещё немного, взял другой пульт, добавил в готовый код выложенный ранее, немного своего
int onPin = 13;
void setup()
{
pinMode (onPin, OUTPUT);
}
void loop()
{
if (results.value == 0xFFA25D)
{
digitalWrite(onPin, HIGH);
delay (1000);
digitalWrite(onPin, LOW);
}
теперь при нажатии кнопки с данным кодом, подаётся питание на 13 порт на 1 секунду, а так как там ещё установлен и светодиод, то ещё и индикация есть)
-
Re: Управление компьютером, любым ИК пультом.
Подскажите пожалуйста..
Как в скетче прописать, чтобы при удержании кнопки пульта на предположим 5 секунд, срабатывала команда на включение, иначе нет.?!
-
Re: Управление компьютером, любым ИК пультом.
Нужно в цикле проверять 5 секунд код нажатой кнопки , если условие == то .....
-
Re: Управление компьютером, любым ИК пультом.
Уже всё перепробовал, но никак не получается связать две команды, либо одна работает, вторая нет, либо наоборот(
Подскажите пожалуйста, как сделать чтобы при кратковременном нажатии сработала "delay(100);" а при длительном "delay(5000);".
Как-то вот так, но только чтобы работало)
{
if (results.value == 0xFFA25D){delay(100);}
{
digitalWrite(onPin, HIGH);
delay (100);
digitalWrite(onPin, LOW);
}
else {delay(5000);}
{
digitalWrite(onPin, HIGH);
delay (5000);
digitalWrite(onPin, LOW);
}
PS: нужно для выключения по питанию, как при удержании на кнопку выключения на компьютере, при полном зависании.
Спасибо!
-
Re: Управление компьютером, любым ИК пультом.
Я же выше написал как сделать. У тебя в коде даже цикла нет
-
Re: Управление компьютером, любым ИК пультом.
А можно ли как-то реализовать это на ардуино на меге 8 ??
ато скетч с первой страницы компилится не хочет именно с этой платой
-
Re: Управление компьютером, любым ИК пультом.
Нужно урезать лишнии протоколы, что бы уместить в памяти твоего контроллера
-
Re: Управление компьютером, любым ИК пультом.
спасибо, но помоему дело не в размере,на сколько я смог понять с прерываниями
C:\Robo\arduino-0022\arduino-0022\libraries\IRremote\IRremote.cpp: In member function 'void IRsend::mark(int)':
C:\Robo\arduino-0022\arduino-0022\libraries\IRremote\IRremote.cpp:258: error: 'TCCR2A' was not declared in this scope
C:\Robo\arduino-0022\arduino-0022\libraries\IRremote\IRremote.cpp:258: error: 'COM2B1' was not declared in this scope
C:\Robo\arduino-0022\arduino-0022\libraries\IRremote\IRremote.cpp: In member function 'void IRsend::space(int)':
C:\Robo\arduino-0022\arduino-0022\libraries\IRremote\IRremote.cpp:267: error: 'TCCR2A' was not declared in this scope
C:\Robo\arduino-0022\arduino-0022\libraries\IRremote\IRremote.cpp:267: error: 'COM2B1' was not declared in this scope
C:\Robo\arduino-0022\arduino-0022\libraries\IRremote\IRremote.cpp: In member function 'void IRsend::enableIROut(int)':
C:\Robo\arduino-0022\arduino-0022\libraries\IRremote\IRremote.cpp:286: error: 'TIMSK2' was not declared in this scope
C:\Robo\arduino-0022\arduino-0022\libraries\IRremote\IRremote.cpp:295: error: 'TCCR2A' was not declared in this scope
C:\Robo\arduino-0022\arduino-0022\libraries\IRremote\IRremote.cpp:296: error: 'TCCR2B' was not declared in this scope
C:\Robo\arduino-0022\arduino-0022\libraries\IRremote\IRremote.cpp:296: error: 'WGM22' was not declared in this scope
C:\Robo\arduino-0022\arduino-0022\libraries\IRremote\IRremote.cpp:299: error: 'OCR2A' was not declared in this scope
C:\Robo\arduino-0022\arduino-0022\libraries\IRremote\IRremote.cpp:300: error: 'OCR2B' was not declared in this scope
C:\Robo\arduino-0022\arduino-0022\libraries\IRremote\IRremote.cpp: In member function 'void IRrecv::enableIRIn()':
C:\Robo\arduino-0022\arduino-0022\libraries\IRremote\IRremote.cpp:314: error: 'TCCR2A' was not declared in this scope
C:\Robo\arduino-0022\arduino-0022\libraries\IRremote\IRremote.cpp:319: error: 'TCCR2B' was not declared in this scope
C:\Robo\arduino-0022\arduino-0022\libraries\IRremote\IRremote.cpp:324: error: 'TIMSK2' was not declared in this scope
-
Re: Управление компьютером, любым ИК пультом.
У меня приемник будет находится от Ардуино на расстоянии 2м. Где лучше размещать фильтр питания? Непосредственно возле приемника, или возле ардуино?
-
Re: Управление компьютером, любым ИК пультом.
Непосредственно возле приемника
-
Re: Управление компьютером, любым ИК пультом.
Цитата:
Сообщение от
SilverRain
спасибо, но помоему дело не в размере,на сколько я смог понять с прерываниями
C:\Robo\arduino-0022\arduino-0022\libraries\IRremote\IRremote.cpp: In member function 'void IRsend::mark(int)':
C:\Robo\arduino-0022\arduino-0022\libraries\IRremote\IRremote.cpp:258: error: 'TCCR2A' was not declared in this scope
C:\Robo\arduino-0022\arduino-0022\libraries\IRremote\IRremote.cpp:258: error: 'COM2B1' was not declared in this scope
C:\Robo\arduino-0022\arduino-0022\libraries\IRremote\IRremote.cpp: In member function 'void IRsend::space(int)':
C:\Robo\arduino-0022\arduino-0022\libraries\IRremote\IRremote.cpp:267: error: 'TCCR2A' was not declared in this scope
C:\Robo\arduino-0022\arduino-0022\libraries\IRremote\IRremote.cpp:267: error: 'COM2B1' was not declared in this scope
C:\Robo\arduino-0022\arduino-0022\libraries\IRremote\IRremote.cpp: In member function 'void IRsend::enableIROut(int)':
C:\Robo\arduino-0022\arduino-0022\libraries\IRremote\IRremote.cpp:286: error: 'TIMSK2' was not declared in this scope
C:\Robo\arduino-0022\arduino-0022\libraries\IRremote\IRremote.cpp:295: error: 'TCCR2A' was not declared in this scope
C:\Robo\arduino-0022\arduino-0022\libraries\IRremote\IRremote.cpp:296: error: 'TCCR2B' was not declared in this scope
C:\Robo\arduino-0022\arduino-0022\libraries\IRremote\IRremote.cpp:296: error: 'WGM22' was not declared in this scope
C:\Robo\arduino-0022\arduino-0022\libraries\IRremote\IRremote.cpp:299: error: 'OCR2A' was not declared in this scope
C:\Robo\arduino-0022\arduino-0022\libraries\IRremote\IRremote.cpp:300: error: 'OCR2B' was not declared in this scope
C:\Robo\arduino-0022\arduino-0022\libraries\IRremote\IRremote.cpp: In member function 'void IRrecv::enableIRIn()':
C:\Robo\arduino-0022\arduino-0022\libraries\IRremote\IRremote.cpp:314: error: 'TCCR2A' was not declared in this scope
C:\Robo\arduino-0022\arduino-0022\libraries\IRremote\IRremote.cpp:319: error: 'TCCR2B' was not declared in this scope
C:\Robo\arduino-0022\arduino-0022\libraries\IRremote\IRremote.cpp:324: error: 'TIMSK2' was not declared in this scope
Похоже что несовместимость с таймером Timer2
-
Re: Управление компьютером, любым ИК пультом.
Еще вопрос...
У меня на выводах 3 и 11 подключены светодиоды, которые при определенных собитиях плавно вкл. и откл.. Но после подключения этой библиотеки, ШИМ на этих выводах почему-то отключился... и они резко акл. и откл. Что может быть?
P.S. в коде естественно сделал int RECV_PIN = 12;
-
Re: Управление компьютером, любым ИК пультом.
Подключи светодиоды на 5 ,6 выводы они тоже могут выдавать хардверный ШИМ на другом таймере
Pins 5 and 6: controlled by Timer 0
Pins 9 and 10: controlled by timer 1
Pins 11 and 3: controlled by timer 2
-
Re: Управление компьютером, любым ИК пультом.
Цитата:
Сообщение от
Chip
Подключи светодиоды на 5 ,6 выводы они тоже могут выдавать хардверный ШИМ на другом таймере
Pins 5 and 6: controlled by Timer 0
Pins 9 and 10: controlled by timer 1
Pins 11 and 3: controlled by timer 2
на выводах 5,6,9 и 10 естественно тоже подключены светодиоды... но каких-либо ньюансов в их работе не заметил...
т.э. получается не выйдет использовать шим на выводах 11 и 3 при подключеной этой библиотеки?
-
Re: Управление компьютером, любым ИК пультом.
Выводы 11 и 3 используют таймер2, этот же таймер используется для читалки пульта
-
Re: Управление компьютером, любым ИК пультом.
Переделал скетч, чтобы удержание кнопки на пульте давало другой код. Пока нашел этому 2 применения: кнопка "положить трубку" при удержании закрывает активное окно (в Girder на это событие нужно включить антиповтор, чтобы все окна разом не закрыть)), а кнопки "вперед" / "назад" при удержании включают перемотку в AIMP. Очень удобно!
Пульт от пионера, при нажатии кнопок телефона, всегда сначала шлет код 0xB54AE916, а потом код клавиши. Это было учтено в алгоритме.
Скетч затачивался под Girder33, поэтому для использования в других программах нужно будет изменить код функции printIR.
PHP код:
#include <IRremote.h>
//вход ИК приемника
#define RECV_PIN 11
// Задержка на повтор клавиши
#define REPEAT_DELAY 500
// Время ожидания повторения
#define REPEAT_WAIT 100
//----------------------------
IRrecv irrecv(RECV_PIN);
decode_results result;
unsigned long IR_old; // предыдущий принятый код
unsigned long pressTime; // время, когда впервые нажалась кнопка пульта
unsigned long rcTime;
boolean IR_received;
void setup()
{
Serial.begin(115200);
IR_old = 0;
irrecv.enableIRIn(); // включить приемник
}
void loop() {
IR_received = false;
if (irrecv.decode(&result)) {
if (result.value > 0) {
// Код годится.
if (IR_old == result.value || result.value == 0xB54AE916) {
// Получили тот же код, что в последний раз
if ((millis() - pressTime) > REPEAT_DELAY && result.value != 0xB54AE916) {
// Шлем код удержания
printIR(result.value, true);
}
} else {
if (result.value != 0xB54AE916) {
IR_old = result.value;
}
pressTime = millis();
}
IR_received = true;
rcTime = millis();
}
irrecv.resume();
}
if (!IR_received && IR_old > 0) {
// Если в течении определенного времени никакой код не пришел, отсылаем последний из кеша
if ((millis() - rcTime) > REPEAT_WAIT) {
if ((millis() - pressTime) <= REPEAT_DELAY) {
printIR(IR_old, false);
}
IR_old = 0;
}
}
}
void printIR(unsigned long code, boolean repeat) {
Serial.print("IR:");
Serial.print(repeat ? "R" : "N");
Serial.print(code, HEX);
Serial.print(13, BYTE);
}
-
Вложений: 1
Re: Управление компьютером, любым ИК пультом.
Заново переписанная программа, скетч из шапки, настройки аналогичны Joystick
Возможности программы:
1-Программа при запуске прячется в трей и если устройство не подключено то перечеркивает иконку в трее красными линиями.
2-Программа запустится даже без подключенного устройства, после подключения устройства программа начнет автоматически работать.
3-Программа работает только с устройством Joystik и не конфликтует с другими устройствами программами работающих с драйвером FTDI
Тоесть Вы можете подключить еще Carduino,Pultik и другие устройства параллельно.
4-Программа имеет всего один *.exe фаил, настройки горячих клавиш осуществляются в программе.
5-Программа автоматически переключает раскладку клавиатуры в (EN) при получении команды нажатия горячих клавиш.
6-Программа автоматически прописывается(удаляется) в автозагрузку нажатием 1 кнопки.
7-Программа имеет кнопку отключения звукового сопровождения
8-При потере сигнала от USB к которому подключено устройство, программа прячется в трей и ждет когда устройство появится то есть его подключат к ПК, после появления устройства в системе программа автоматически подхватит его и продолжит работу.
9-Программа при выходе из сна производит переподключение устройства к USB порту. Для гарантированной работы устройства
10-Программа стала универсальной и имеет возможность работать с большим количеством устройств(буду выкладывать прошивки по мере возможности)