Как обойти IR приемник

Gorky
Offline
Зарегистрирован: 08.01.2018

Друзья, направьте на верный путь. Есть IR передатчик и IR приемник на 2-ух разных девайсах. Передатчик это ардуино с моим кодом. Приемник заводское устройство, надо передать на заводское устройство с ардуино по проводу "эмуляцию команды IR сигнала". По IR все работает но, надо что бы управление заводским девайсом было по проводам. Что почитать, что попробовать ? 

rkit
Offline
Зарегистрирован: 23.11.2016

Прочитать, как работают ir-приемники, и сделать сигнал.

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014
Gorky
Offline
Зарегистрирован: 08.01.2018

Jeka_M, спасибо это почитал. Но я не использую IRremote, у меня другой код для отправки: 

// Frequency calculations
// carrier frequency:	f = 56000 Hz
// wave period:		T = 1/f = 17.86 µs
// half cycle period:	T/2 = 8.93 µs

// assuming carrier_interval_delay + instructions_delay = T/2
#define CARRIER_INTERVAL	4		// adjusted experimentally


// MilesTag definitions
// carrier off space: 600 µs
// header pulse: 2400 µs
// bit0 pulse: 600 µs
// bit1 pulse: 1200 µs

#define MLT_SPACE_INTERVAL	600

// header cycle count: 2400 / 17.86 = 134.3
#define MLT_HEADER_CYCLES	128		// adjusted experimentally

// bit0 cycle count: 600 / 17.86 = 33.6
#define MLT_BIT0_CYCLES		32		// adjusted experimentally

// bit1 cycle count: 1200 / 17.86 = 67.2
#define MLT_BIT1_CYCLES		64		// adjusted experimentally

void setup() {

	pinMode(IR_PIN, OUTPUT);
	Serial.begin(9600);
	Serial.println("Ready...");
}

void fire() {
	Serial.println("Fire!");

	sendHeader();
	sendByte(0x83);
	sendByte(0x05);
	sendByte(0xE8);
}

void sendHeader() {
	sendPulse(MLT_HEADER_CYCLES);
	delayMicroseconds(MLT_SPACE_INTERVAL);
}

void sendByte(byte x) {
	for(int i=0; i<8; i++) {
		if (x & 0x80) {
			sendPulse(MLT_BIT1_CYCLES);
		} else {
			sendPulse(MLT_BIT0_CYCLES);
		}
		x = x << 1;
		delayMicroseconds(MLT_SPACE_INTERVAL);
	}
}

void sendPulse(int cycles) {
	for (int i=0; i<cycles; i++ ) {
		digitalWrite(IR_PIN, HIGH);
		delayMicroseconds(CARRIER_INTERVAL);
		digitalWrite(IR_PIN, LOW);
		delayMicroseconds(CARRIER_INTERVAL);
	}
}

я понимаю что надо убрать несущую, но пока не вышло. Завтра попробую еще на одном варианте отправки кода поиграть. А так по сути мне нужно отправить sendByte(0x83);sendByte(0x05);sendByte(0xE8);

 

Voodoo Doll
Voodoo Doll аватар
Offline
Зарегистрирован: 18.09.2016

Ёмаё, автор, почитайте как работают ик приёмники. там демод с открытым коллектором. берёте RAW код и клацаете ноль единицу, без всякого delaymicroseconds, там оно нахер не надо. тайминги чуть ли не в миллисекундах. и по двум проводам изи.

Оптрон (pc817) рекомендую, чтобы не было выкрутасов из-за земляной петли.