Page 1 of 1

IR remote control issue

Posted: Friday 09 February 2018 15:13
by BartSr
Hi.
I found an interesting article about IR remote control with Samsung protocol.

http://techiesms.blogspot.nl/2016/01/ir ... iting.html

As the frequency of transmission is around 38 kHz I tried with several values (see the "x" in the code down below).
I hardcoded for this purpose the adress and data for switching TV ON/OFF.
Commands are sent continuously with timedelay in between.

This works; but sometimes yes, sometimes no.

Any suggestions how to get this more reliable?
I use the Arduino supplied from USB as well as 12V DC adapter

TIA
-Bart

code:

//#include <EEPROM.h>
int eaddr = 0;
#define ir_led 8
int address;
int data;
boolean bin[8], Data[32];
int k = 0;

int x = 0;

void setup()
{
Serial.begin(9600);
pinMode(ir_led, OUTPUT);
// address = EEPROM.read(0); // address is stored at address 0 of EEPROM
address = 7;
dec_to_bin(address); //convert the address into binary
for (int i = 0; i < 8; i++)
{
Data = bin;
Data[i + 8] = bin;
}
}

void loop()
{
for (int r = 1; r < 4; r++) // sending data from address 1 of EEPROM ; This loop will transmit 3 buttons data through IR
{
// data = EEPROM.read(eaddr + r);
data = 2;
dec_to_bin(data); //convert data into binary
for (int i = 0; i < 8; i++)
{
Data[i + 16] = bin;
Data[i + 24] = !bin;
}

for (int i = 0; i < 32; i++)
{
Serial.print(Data);
}
Serial.println();
x=115;
transmit(); //transmit
x=116;
transmit(); //transmit

x=117;
transmit(); //transmi
x=118;
transmit(); //transmit
x=119;
transmit(); //transmit

x=120;
transmit(); //transmit


delayMicroseconds(3100);
// delay(1000); // sending next data after 1 s
delay(8000); // sending next data after 1 s
}
}

void dec_to_bin(int dec) // converting decimal to binary
{
for (int i = 0; i < 8; i++)
{
bin = dec % 2;
dec = dec / 2;
}
}

void transmit()
{
Serial.print(x);

Serial.println();

burst(x); // start bit = 4500/26=173 --> 4500/38=118

digitalWrite(ir_led, LOW);
delayMicroseconds(4500); //start bit
for (int i = 0; i < 32; i++)
{
if (Data == 1)
{

burst(15);


digitalWrite(ir_led, LOW);
delayMicroseconds(1690); //high bit
}
else
{
burst(15);
digitalWrite(ir_led, LOW);
delayMicroseconds(560); //low bit
}
}
burst(15);
digitalWrite(ir_led, LOW); //stop bit
delayMicroseconds(560);

}



void burst(int pulses)
{
for (int i = 0; i < pulses; i++)
{
// 9 17
digitalWrite(ir_led, 1);
delayMicroseconds(9);
digitalWrite(ir_led, 0);
delayMicroseconds(17);
}



}