Howto use a Infrared reciever on arduino.

in #infrared7 years ago

Everyone has an old remote control or a universal remote somewhere. With the infrared receiver TL1838 VS1838B you can capture the signals of an remote. Connect the reciever as shown in the picture.

For my project I have my Harmony One set to Sony codes. On the serial monitor you can see that it comes in as a 4 digit codes. Then you can program your arduino to do something only when this code comes in. I have created an example for code 1253.

// goto https://williewortel.eu for more howto tutorials.

#define ir_pin 2

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)
int longpulse=1; //If longpulse==0 it means pulseIn() timed out

volatile byte remoteOn = 0; // ==1, means remote has been pressed

void setup() {
pinMode(ir_pin, INPUT);
Serial.begin(9600);
Serial.println(“HUIS VAN DE TOEKOMST “);
}

void loop() {
while (remoteOn==1)
{
int key = getIRKey(); //Fetch the key
Serial.print(“Key Recieved: “);
Serial.println(key);
remoteOn=0; //reset flag
longpulse=1; //reset longpulse
switch (key)
{
case 1253:

Serial.println(“knop 1253 “);
return;

}
}

attachInterrupt (0, remoting, RISING);

}

int getIRKey() {
int data[12];
while((longpulse=pulseIn(ir_pin, LOW)) < 2200)
{
if(longpulse==0) // if timed out
{
break;
}
}

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);

delay(50); // to slow down the loop if needed

if(debug == 1) {
Serial.println(“—–“);
}
for(int a=0;a<11;a++) { //Parse them if (debug == 1) { Serial.println(data[a]); } if(data[a] > bin_1) { //is it a 1?
data[a] = 1;
} else {
if(data[a] > bin_0) { //is it a 0?
data[a] = 0;
} else {
data[a] = 2; //Flag the data as invalid; I don’t know what it is!
}
}
}

for(int a=0;a<11;a++) { //Pre-check data for errors if(data[a] > 1) {
return -1; //Return -1 on invalid data
}
}

int result = 0;
int seed = 1;
for(int a=0;a<11;a++) { //Convert bits to integer
if(data[a] == 1) {
result += seed;
}
seed = seed * 2;
}
return result; //Return key number

}

void remoting() // The ISR
{
remoteOn=1;
}

Sort:  

Hi. I am a volunteer bot for @resteembot that upvoted you.
Your post was chosen at random, as part of the advertisment campaign for @resteembot.
@resteembot is meant to help minnows get noticed by re-steeming their posts


To use the bot, one must follow it for at least 3 hours, and then make a transaction where the memo is the url of the post.
If you want to learn more - read the introduction post of @resteembot.
If you want help spread the word - read the advertisment program post.


Steem ON!

Arduino projects are very interesting and can be used for lot of things. This is a good one, what you are suggesting is to get the signal and then use in the system to do whatever other work right?

Coin Marketplace

STEEM 0.21
TRX 0.26
JST 0.040
BTC 100671.43
ETH 3655.73
USDT 1.00
SBD 3.14