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.");*
- }*
}