Arduino e transmissores ou receptores codelearning

Colegas,

elaborei o código abaixo para trabalhar como transmissor, no lugar do controle remotor, para receptores code learning. Fica interessante conhecer como gerar um código code learning:

/*
Transmissor que emula controle para receptor Code Learning padrão HT6P20B.
O código funciona com a maioria dos receptores code learning existentes no mercado.
O comprimento de onda foi configurado como 476 microsegundos.
De acordo com o datasheet do HT6P20, deve-se enviar um pilot code de tamanho igual a 24 comprimentos de onde sendo os 23 primeiros em nivel LOW e
1 em nivel HIGH.
Depois disso se enviam os 22 bits de dados e 4 bits que configuram o end code.
Um bit 1 é feito com o sinal em LOW por duraçao de 2 comprimentos de onda e um sinal HIGH com duração de 1 comprimento de onda.
Um bit 0 é feito com sinal em LOW por duração de 1 comprimento de onda e um sinal HIGH com duração de 2 comprimentos de onda.

CRIADO POR: Renzo Patrick de Lima Ribeiro
DATA: 10/05/2012
ARDUINO: Duemilanove (com ATMega 328)
CONTATO: 67 8401-8006
E-MAIL: renzo@oi.net.br
Permitido o uso público, mas deve-se manter o nome do autor.
*/

int larpulso = 476; //define tempo de 1 comprimento de onda em microsegundos
unsigned long _data=0; // SET de 28 bits que identificará o controle. Pode ser alterado como queira, desde que os 4 últimos não mudem

void setup()

{
Serial.begin(9600);
pinMode(2, INPUT); // foi colocado um botão ligado ao terra nesse pino
pinMode(3,OUTPUT); // essa porta vai no pino de dados do transmissor RF 433MHz
digitalWrite(2,HIGH); //RESISTOR PULL-UP
digitalWrite(3,HIGH); //coloca a saída do transmissor alta
}

void loop()

{
if (digitalRead(2)==LOW) {
//botão do meu controle da garagem (fiz a leitura com o código para recepção do colega JACQUES DANIEL MORESCO): 1001000011011011011110010101
for (int k=0;k<2;k++){ // esse laço simplesmente repete o envio do código para certificar que será entregue
char codigo[29] = "1001000011011011011110010101";
// envia o pilot code
Serial.println("transmitindo...");
digitalWrite(3,LOW);
delayMicroseconds(larpulso*23);
digitalWrite(3,HIGH);
delayMicroseconds(larpulso); //fim do pilot code

for (int i=0;i<28;i++){
Serial.print(bitRead(_data,i),BIN);
if (codigo == '1') {

  • bitWrite(_data, i, 1);*
  • digitalWrite(3,LOW);*
    _ delayMicroseconds(larpulso*2);_
  • digitalWrite(3,HIGH);*
  • delayMicroseconds(larpulso);*
  • } else {*
  • bitWrite(_data, i, 0);*
  • digitalWrite(3,LOW);*
  • delayMicroseconds(larpulso);*
  • digitalWrite(3,HIGH);*
    _ delayMicroseconds(larpulso*2);_
  • }*
  • }*
  • }*
  • Serial.println ();*
  • Serial.println("dados transmitidos.");*
  • }*
    }