А я же отписался в той теме что все работает, только я пользуюсь не аллинван а иркей и тоже работает, про яркость не замечал, попробуй тож иркей прогу.
Вид для печати
Для -=zds=-
Просьба написать как ты пользуешь иркей, не знал что можно все значения выдаваемые ардуино другой прогой прочитать.
Все получилось, Спасибо!
не могу залить скетч, выдает ошибку
"IRrecv does not name a type"
ЗЫ: разобрался не туда библиотеку залил
Вот протокол пультов сони может поможетработает со всеми пультами фирмы сониPHP код:
int ir_pin = 2; //Sensor pin 1 wired through a 220 ohm resistor
int led_pin = 13; //"Ready to Recieve" flag, not needed but nice
int debug = 0; //Serial connection must be started to debug
int start_bit = 2000; //Start bit threshold (Microseconds)
int bin_1 = 1000; //Binary 1 threshold (Microseconds)
int bin_0 = 400; //Binary 0 threshold (Microseconds)
void setup() {
pinMode(led_pin, OUTPUT); //This shows when we're ready to recieve
pinMode(ir_pin, INPUT);
digitalWrite(led_pin, LOW); //not ready yet
Serial.begin(9600);
}
void loop() {
int key = getIRKey(); //Fetch the key
Serial.print("Key Recieved: ");
Serial.println(key);
}
int getIRKey() {
int data[12];
digitalWrite(led_pin, HIGH); //Ok, i'm ready to recieve
while(pulseIn(ir_pin, LOW) < 2200) { //Wait for a start bit
}
data[0] = pulseIn(ir_pin, LOW); //Start measuring bits, I only want low pulses
data[1] = pulseIn(ir_pin, LOW);
data[2] = pulseIn(ir_pin, LOW);
data[3] = pulseIn(ir_pin, LOW);
data[4] = pulseIn(ir_pin, LOW);
data[5] = pulseIn(ir_pin, LOW);
data[6] = pulseIn(ir_pin, LOW);
data[7] = pulseIn(ir_pin, LOW);
data[8] = pulseIn(ir_pin, LOW);
data[9] = pulseIn(ir_pin, LOW);
data[10] = pulseIn(ir_pin, LOW);
data[11] = pulseIn(ir_pin, LOW);
digitalWrite(led_pin, LOW);
if(debug == 1) {
Serial.println("-----");
}
for(int i=0;i<11;i++) { //Parse them
if (debug == 1) {
Serial.println(data[i]);
}
if(data[i] > bin_1) { //is it a 1?
data[i] = 1;
} else {
if(data[i] > bin_0) { //is it a 0?
data[i] = 0;
} else {
data[i] = 2; //Flag the data as invalid; I don't know what it is!
}
}
}
for(int i=0;i<11;i++) { //Pre-check data for errors
if(data[i] > 1) {
return -1; //Return -1 on invalid data
}
}
int result = 0;
int seed = 1;
for(int i=0;i<11;i++) { //Convert bits to integer
if(data[i] == 1) {
result += seed;
}
seed = seed * 2;
}
return result; //Return key number
}
2xeonlink
Спасибо, полезная информация
А можно как то эмулировоть прокрутку, как колесом мышки?
Попробуй добавить в конфиг
VK_MBUTTON 04 04 Средняя кнопка мыши
Вот все коды для мышки
Цитата:
VK_LBUTTON 01 01 Левая кнопка мыши.
VK_RBUTTON 02 02 Правая кнопка мыши.
VK_CANCEL 03 03 Обработка комбинации клавиш Control-Break.
VK_MBUTTON 04 04 Средняя кнопка мыши (трехкнопочная мышь).
VK_XBUTTON1 05 05 Windows 2000/XP: кнопка X1 мыши.
VK_XBUTTON2 06 06 Windows 2000/XP: кнопка X2 мыши.
К сожалению данный пульт имеет неизвестный протокол , в этой ветке обсуждали
У меня в windows 7 тоже вылазит ошибка при нажатии на пульте.
FT_Read - General IO Error...
Длина кабеля 50 см.
Причем одна кнопка на пульте работает без ошибок, на все остальные вылазит вот такое, либо просто не срабатывает
Что за пульт используешь?
Подскажите как использовать программу IRkey, когда в системе куча устройств на FTDI и все они работают. Драйвер ставится не на тот порт.
Читай здесь
а в драйвере уже есть какие-то механизмы чтобы он перешитую ардуину находил? Или надо какой-то другой качать?
Кстати ничего что одно из других устройств тоже ардуино?
программа всегда ищет сначала ардуину с прошитым ID compcar
А нет ли какой-нибудь другой проги с похожим функционалом? А то у меня прога ваще живет своей жизнью и после хибернейта вылетает, потому как не может найти ком-порт. А компорт в системе есть и никуда не пропадает.
A c JVC у кого-нибудь работает? Какой там протокол? Попробовал добавить в библиотеку протокол JVC http://www.arcfn.com/2009/08/multi-p...e-library.html но пока не работает.
Разобрался с библиотекой, все просто. В принципе можно написать любой протокол. Пока мне нужно только посылка команды. Только вот есть один баг в самой IRemote.
Функция void IRsend::mark(int time) включает светодиод на время time в мс. Но по факту если значение больше 7200, то сигнал прерывается, и получается вот такая картина.
Вложение 10688
Вот сами функции, думаю где-то тут собака зарыта. Сам пока с ардуино да и вообще с мк, 3ий день, поэтому в регистрах не шарю.
Код:void IRsend::mark(int time) {
// Sends an IR mark for the specified number of microseconds.
// The mark output is modulated at the PWM frequency.
TCCR2A |= _BV(COM2B1); // Enable pin 3 PWM output
delayMicroseconds(time); }
void IRsend::enableIROut(int khz) {
// Enables IR output. The khz value controls the modulation frequency in kilohertz.
// The IR output will be on pin 3 (OC2B).
// This routine is designed for 36-40KHz; if you use it for other values, it's up to you
// to make sure it gives reasonable results. (Watch out for overflow / underflow / rounding.)
// TIMER2 is used in phase-correct PWM mode, with OCR2A controlling the frequency and OCR2B
// controlling the duty cycle.
// There is no prescaling, so the output frequency is 16MHz / (2 * OCR2A)
// To turn the output on and off, we leave the PWM running, but connect and disconnect the output pin.
// A few hours staring at the ATmega documentation and this will all make sense.
// See my Secrets of Arduino PWM at http://arcfn.com/2009/07/secrets-of-arduino-pwm.html for details.
// Disable the Timer2 Interrupt (which is used for receiving IR)
TIMSK2 &= ~_BV(TOIE2); //Timer2 Overflow Interrupt
pinMode(3, OUTPUT);
digitalWrite(3, LOW); // When not sending PWM, we want it low
// COM2A = 00: disconnect OC2A
// COM2B = 00: disconnect OC2B; to send signal set to 10: OC2B non-inverted
// WGM2 = 101: phase-correct PWM with OCRA as top
// CS2 = 000: no prescaling
TCCR2A = _BV(WGM20);
TCCR2B = _BV(WGM22) | _BV(CS20);
// The top value for the timer. The modulation frequency will be SYSCLOCK / 2 / OCR2A.
OCR2A = SYSCLOCK / 2 / khz / 1000;
OCR2B = OCR2A / 3; // 33% duty cycle
}
А любой другой пульт не пробовал?
Может кому пригодится инфа: у магнитол JVC предусмотрен вход для подключения управления - HANDLEREMOTE или STEERING WHEEL REMOTE. В частности на моей KD-DV4207 он не распаян но при подключении к процу заработал. Протокол такой же как и по ИК, только без несущей в 38кГц, подключал ардуино - работает.
Ковыряю передачу ИК сигнала.
Никак не могу получить код нужного пульта в таком формате
irsend.sendNEC(0x20df10ef, 32) - подчеркнуто.
Получаю или в десятичном - DEC
Или в шестнадцатеричном - HEX
Что делать?
Или мне так и использовать 0х(мое значение в HEX формате)?
0x20df10ef или 551489775 это будет одно и тоже, можеш виндовым калькулятором переводить в любой числовой формат
На каком порту должен висеть ардуино чтоб программа работала. Ато у мну FT_Open ошибку выдает
На любом, скорость порта 115200
попробуй вот это http://www.compcar.ru/forum/showthread.php?t=5669
Спасибэ, придет еще один модуль попробую его перешить, а то страшновато.
Прошу помощи.
Есть пульт с джойстиком который без проблем работает с Arduino. Хочу настроить джойстик на управление курсором мыши. Управление курсором без мыши настраивается на num pud клавиатуры, но при включении на управления с num pud не возможно присвоить код цифровых клавиш для сопряжения работы с программой IRKey.exe.
В ручную добывить в фаил config.txt
<16756815>Key1=40 />
Цитата:
left window key 91
right window key 92
select key 93
numpad 0 96
numpad 1 97
numpad 2 98
numpad 3 99
numpad 4 100
numpad 5 101
numpad 6 102
numpad 7 103
numpad 8 104
numpad 9 105
multiply 106
add 107
subtract 109
decimal point 110
divide 111
Присвоение в соответствии с кодом сделал. Но при нажатии на джойстике курсор мыши не смещается нажатие только сопровождается коротким звуковым сигналом.
А NulLock включен?
Да включен. Если не включен тогда курсор с клавиатуры не работает.
Может быть вот это поможет?
Цитата:
Windows (в частности - Vista) поддерживает управление курсором мыши с клавиатуры через нумпад (блок клавиш справа) и быстро включается комбинацией клавиш left ALT + left SHIFT + NUM Lock. При первом использовании выскочит окошко уведомления, а в дальнейшем в таскбаре показываться будет иконка мыши.
Все так и Винде 7. Включается все аналогично и иконка появляется, но курсор управляется только с numpad. Возможно кодировка цифровых клавиш после включения меняется?
Возможно в Винде есть ограничения относящиеся к виртуальным клавишам NumPad
Пробую отправлять ИК команду.
Модифицировал скрипт. При получении любой ИК команды отправляется команда "irsend.sendNEC(0x10EF28D7, 32);" после этого ардуинка виснет. Потыкайте носом, плиз.
PHP код:
#include <IRremote.h>
IRsend irsend;
byte bytes[4];
int RECV_PIN = 11; //вход ИК приемника
IRrecv irrecv(RECV_PIN);
decode_results results;
unsigned long ir_dt, old_ir;
void setup()
{
Serial.begin(115200);
irrecv.enableIRIn(); // включить приемник
}
void loop() {
if (irrecv.decode(&results))
{
if (results.value > 0 && results.value < 0xFFFFFFFF)
{
ir_dt = results.value;
bytes[0] = ir_dt & 0xFF; // преобразовать в 4-байта
bytes[1] = (ir_dt & 0xFF00) >> 8;
bytes[2] = (ir_dt & 0xFF0000) >> 16;
bytes[3] = (ir_dt & 0xFF000000) >> 24;
//Serial.write( bytes,4); // отправить прочитаное значение компьютеру
irsend.sendNEC(0x10EF28D7, 32);
Serial.println("Send Mute to TV");
if (old_ir == ir_dt){delay(250);} //Пауза между короткими нажатиями
else {delay(500);}// Пауза после первого нажатия и удержания(перед повторами)
old_ir = ir_dt;
}
if (results.value == 0xFFFFFFFF )
{
delay(120); //пауза между повторами
//Serial.write( bytes,4);
irsend.sendNEC(0x10EF28D7, 32);
Serial.println("Send Mute to TV");
}
irrecv.resume();
}
}
P.S. Передетчик что-то отправляет - цеплял обычный светодиод. Вспышка есть.
Я ошибок не заметил.
Попробуй в цикле отправлять , для проверки
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(10000);
}
Пасибо, попробую...