Using RFGarage Gate Door Remote and a receiver for Arduino

Hi guys,

I want to use 20 cheap RF (U$5 max) to control a Arduino. BUT, I need that this cheap RF control send ID (0-19) and button pressed 1,2,3

Like, 043: id = 04/button = 3 181: id = 18/button = 1

I need a control, doesn't work for me buy a chip and start from the bottom. And I need a receiver for arduino

I found a remote control for U$4 that uses HT6P20B (Code Learning), now I need a receiver for Arduino.

Working code!
Receiving ID from Code Learning control!
Dene from here did it!

/* 
 ARDUINO DECODIFICADOR HT6P20B COM RESISTOR DE 2M2 NO OSC.
 ESTE CÓDIGO NÃO USA TIMER, INTERRUPÇÃO EXTERNA E NEM PINO DEFINIDO DE ENTRADA.
 ELE MEDE O TEMPO DO PILOT PERIOD E COMPARA SE ESTÁ DENTRO DA FAIXA DEFINIDA,
 SE TIVER ELE PASSA PARA CODE PERIOD E FAZ AS MEDIDÇÕES DE TEMPO EM NIVEL ALTO
 SE TIVER DENTRO DA FAIXA ACRECENTA BIT 1 OU 0 NA VARIAVEL _DATA CASO NÃO ZERA AS VARIÁVEIS E RE-INICIA
 APOS RECEBER TODOS OS BITS ELE PEGA OS 4 BITS DO ANTE CODE E TESTA PARA SABER SE O CÓDIGO FOI RECEBIDO 
 CORRETAMENTE, CASO RECEBIDO CERTO ELE COLOCA A VARIAVEL ANTCODE EM 1.
 
 CRIADO POR: JACQUES DANIEL MORESCO
 DATA: 28/02/2012 USANDO ARDUINO 0022.
 FONES:54 3324 2251 54 9206 7168
 E-MAIL: ibisul@ibisul.com.br
 Permitido o uso público, mas deve-se manter o nome do autor.
 */

int x,startbit,ctr,dataok,t1,larpulso,larpulso1,larpulso2,larpulso3,larpulso4,bt1,bt2,antcode=0;
unsigned long _data=0;   // DATA é o Código recebio do HT6p20 todos os 28 BITS onde, 22 do coodigo+2 dos botões+4 do anti-codigo;
unsigned long _dur,_dur1;      // Duração do Pulso
byte          _pin;    // Pino que vai receber o sinal RF digital.

void setup(){
  _pin=2;
  Serial.begin(9600);
  pinMode(2, INPUT);
  //pinMode(13, OUTPUT);
  
  pinMode(13,OUTPUT); // D13 - 1 RF +VCC
  pinMode(12,OUTPUT); // D12 - 2 RF GND 
  pinMode(7,OUTPUT); // D7 - 7 RF GND 
  pinMode(5,OUTPUT); // D5 - 10 AF +VCC 
  pinMode(4,OUTPUT); // D4 - 11 AF GND

  digitalWrite(13,1); // D13 - 1 RF +VCC
  digitalWrite(12,0); // D12 - 2 RF GND 
  digitalWrite(7,0); // D7 - 7 RF GND 
  digitalWrite(5,1); // D5 - 10 AF +VCC 
  digitalWrite(4,0); // D4 - 11 AF GND
}

void loop(){

  //digitalWrite(13, digitalRead(2)); //Pisca o LED conforme o valor da entrada digital, testar interferencias.
  if (startbit==0)
  {// Testa o tempo piloto até o Bit de inicio;
    _dur = pulseIn(_pin, LOW);
    if(_dur > 8000 && _dur < 12000 && startbit==0)
    {
      larpulso=_dur/23;
      larpulso1=larpulso-50;
      larpulso2=larpulso+50;
      larpulso3=larpulso+larpulso-50;
      larpulso4=larpulso+larpulso+50;
      startbit=1;
      _dur=0;
      _data=0;
      dataok=0;
      ctr=0;
    }
  }

  // Se o Bit de inicio OK ENTÃO Inicia a medição do tempo em Nivel ALTO dos sinais, e testa se o tempo está na faixa.
  if (startbit==1 && dataok==0 && ctr < 28)
  {
    ++ctr;
    _dur1 = pulseIn(_pin, HIGH);
    if(_dur1 > larpulso1 && _dur1 < larpulso2)     // Se a largura de pulso é entre 1/4000 e 1/3000 segundos
    {
      _data = (_data << 1) + 1;      // anexar um * 1 * para a extremidade mais à direita do buffer
    }
    else if(_dur1 > larpulso3 && _dur1 < larpulso4)   // Se a largura de pulso é entre 2/4000 e 2/3000 segundos
    {
      _data = (_data << 1);       // anexar um * 0 * para a extremidade mais à direita do buffer
    }
    else
    {
      /* força finalização do laço */
      startbit=0;
    }

  }




  if (ctr==28)
  { 
    if (bitRead(_data,0)==1)
    { 
      if (bitRead(_data,1)==0)
      {
        if (bitRead(_data,2)==1)
        {
          if (bitRead(_data,3)==0)
          {
            antcode=1;
          }
        }
      }
    }    

    if (antcode==1)
    {// Se foram recebidos todos os 28 Bits, o valor vai para a variavel _data e pode ser usada como exemplo abaixo.
      dataok=1;
      
      Serial.print("ID: ");
      Serial.println(_data/16,BIN);
      ctr=0;
      startbit=0;
      antcode=0;
      delay(100);
    }
  }
}

Hi Guys!

I developed a sketch based on the nice code above and many others.. For all "remote controls" that use the encoder HT6P20 I tested, it worked!

See the links below: English: http://acturcato.wordpress.com/2014/01/04/decoder-for-ht6p20b-encoder-on-arduino-board-english/

Portuguese: http://acturcato.wordpress.com/2013/12/20/decodificador-para-o-encoder-ht6p20b-em-arduino/