A while ago, I got hold of a car alarm unit and its two remote control fobs. When i hooked it up to 12V I realized that it didn’t work, not responding to any of the commands from the two fobs even though their batteries were OK. Naturally, I opened up the unit to start harvesting parts and noticed the RF module within (the one that sticks out perpendicularly) and I figured it shouldn’t be too hard to use the module with an Arduino.
Basically, my code uses pulse in to see whether incoming pulses are longer than 1000 microseconds and if a pulse is longer than that I consider it a ’1′ and if it’s not, a ’0′. So it constructs a string called ‘codein’ about 75 characters long and then it searches for 25 character pre-defined strings within it (using the substring command) , to see whether a button has been pushed on one of the remotes. If a button push has been recorded then it prints out which one over the serial connection. Oh, and I was lucky and discovered that each remote delivers different codes, meaning that I am able to remotely control 8 channels.
To figure out which codes you need to pre-define for your buttons you can un-comment the lines which display the incoming string.So here’s the code:
// RF module receiver code for Arduino.
// The module is connected to the Arduino havin 3 pins: +5, GND and data. The data pin is connected to
//digital pin 11 on the arduino.
int inpin = 11;
int onoff = 0;
int i=0;
String codein=“00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000”;
//there are about 100 zeros in the initial codein
unsigned long duration;
void setup()
{
Serial.begin(9600);
Serial.println(“setup”);
}
void loop()
{
for (i = 0; i < 100; i++) {
duration = pulseIn(inpin, HIGH);
if (duration > 1000)
{
codein.setCharAt(i,‘1’);
}
else {
codein.setCharAt(i,‘0’);
}
}
Serial.println(codein); //uncomment these two lines to figure out your remote codes
delay(1000); // this is the second line
for (i=0; i<75; i++){
if (codein.substring(i,i+25)==“0010100111000110001010000”) // substitute remote codes here
{ Serial.println(“lock!!!”); if (onoff == 1){onoff = 0;} else {onoff = 1;} // LED toggle on/off
break;
}
if (codein.substring(i,i+25)==“0010100111000110001001000”) // and here
{ Serial.println(“unlock!!!”);
break;
}
if (codein.substring(i,i+25)==“0010100111000110001000100”) //and here
{ Serial.println(“mute!!!”);
break;
}
if (codein.substring(i,i+25)==“0010100111000110001000010”) // you get the idea
{ Serial.println(“ring!!!”);
break;
}
if (codein.substring(i,i+25)==“0010010110111101111001000”)
{ Serial.println(“lock2!!!”);
break;
}
if (codein.substring(i,i+25)==“0010010110111111111000100”)
{ Serial.println(“unlock2!!!”);
break;
}
if (codein.substring(i,i+25)==“0010001001011011111111100”)
{ Serial.println(“mute2!!!”);
break;
}
if (codein.substring(i,i+25)==“0010010010110111111111000”)
{ Serial.println(“ring2!!!”);
break;
}
}
// this toggles the 13 pin led on or off
if (onoff == 1) {
digitalWrite(13,HIGH);
delay(1000);
}
else { digitalWrite(13,LOW);
delay(1000);}
}