TÍTULO: DECODIFICADOR PARA O ENCODER HT6P20B COM ARDUINO
CRIADO POR: AFONSO CELSO TURCATO
E-MAIL: acturcato (at) gmail.com
LICENÇA: GPL
REVISÕES:
00 – 20/12/2013 – Versão inicial baseada no código do Jacques Moresco (veja nas Referências)
01 – 27/12/2013 – Correção do problema de travamento do código quando um ANTI-CODE inválido é recebido (agradecimento ao Gilson Oguime @oguime)
02 – 10/01/2014 – Otimização do código. Criação de uma função que retorna o ENDEREÇO e o BOTÃO pressionado, além da diminuição do uso de variáveis globais.
03 – 11-JAN-2014 – Nova otimização do código. Foi criada uma “struct” para os controles e removidas as variáveis globais
04 – 18-JUN-2014 – Nova otimização do código. Variável lambda foi declarada como Global para ficar “compatível” com o Arduino Nano (segundo orientação dada pelo Henrique Brancher Gravina)
O HT6P20B gera um código de 28 bits, sendo 22 bits de ENDEREÇO, 2 bits de DADOS e 4 bits de “ANTI-CODE” (código de verificação).
O ENDEREÇO é fixo para um mesmo CI, ou seja, sempre a mesma sequência de bits “0” e “1” (cada CI HT6P20 tem um ENDEREÇO diferente).
O DADO muda de acordo com o botão pressionado.
O ANTI-CODE é sempre o mesmo: “0101”
Para o modelo HT6P20D são 20 bits de ENDEREÇO e 4 bits de DADOS.
Para o modelo HT6P20F são 19 bits de ENDEREÇO e 5 bits de DADOS
(Veja tabela no Datasheet para maiores detalhes)
Os bits do ENDEREÇO e dos DADOS são transmitidos utilizando-se 3 ciclos de clock.
Ligando-se um resistor de 2M2 nos pinos 4 e 5 do HT6P20B, tem-se um clock interno de 2 KHz e portanto um ciclo de clock de 500 us. Assim cada bit será transmitido em 1500 us.
Ligando-se um resistor de 1M4 nos pinos 4 e 5 do HT6P20B, tem-se um clock interno de 3 KHz e portanto um ciclo de clock de 333 us. Assim cada bit será transmidito em 1000 us.
Alguns modelos mais novos de HT6P20 já possuem oscilador interno (não necessitam de resistor externo)
O código completo compreende 4 partes principais: Piloto, Endereço, Dado e Anti-Código.
– O Piloto é formado por 23 ciclos de “0” e um ciclo de “1”.
– O Endereço é formado por 22 bits (66 ciclos);
– O Dado é formado por 2 bits (6 ciclos).
– O Anti-Código é formado por 4 bits (12 ciclos) sendo sempre “0101”.
Veja a figura na página 4 do datasheet!
Para saber se o bit transmitido é “0” ou “1”, deve-se analisar o segundo ciclo de cada bit (lembrando q cada bit transmitido usa 3 ciclos):
– O “primeiro ciclo” de cada bit será sempre “0”;
– O “segundo ciclo” será “1” se o bit transmitido for “0” (ZERO) ou será “0” se o bit transmitido for “1” (UM).
– O “terceiro ciclo” será sempre “1”.
Assim, para saber qual o bit transmitido, basta “medir” a duração do pulso em “1” para cada três ciclos. Sendo:
– Se a duração do pulso em “1” for igual a de um ciclo, significa q o “segundo ciclo” foi “0”, então o bit transmitido é “1” (UM);
– Se a duração do pulso em “1” for igual a duas vezes a de um ciclo, significa q o “segundo ciclo” foi “1”, então o bit transmitido é “0” (ZERO).
Veja a figura na página 5 do datasheet!
A função da rotina então é identificar o período PILOTO e depois ler cada bit de ENDEREÇO e de DADO.
Para identificar o período PILOTO, monitora-se a saída do módulo receptor e verifica-se qnto tempo ela permanece em “0”.
Para considerar as variações que o código pode sofrer (devido a variações do resistor e/ou tensão da bateria), considera-se aqui um ciclo de clock interno entre 400 us e 600 us.
Assim, o intervalo de 23 ciclos em nível 0 deve ficar entre 9.2 ms (23 x 400us) a 13.8 ms (23 x 600us).
Valores fora dessa faixa são desprezados!
Após estes 23 ciclos em nível “0”, tem-se um ciclo em nível “1”, q no caso será um intervalo compreendido entre 400 us a 600 us.
Detectando-se esse tempo em “0” e logo após um ciclo em “1”, considera-se q este seja um período PILOTO. E assim, deve-se analisar os bits posteriores que serão o ADDRESS, DADO e ANTI-CODE.
Nesta parte, calcula-se o lambda (tempo de um pulso) como sendo o tempo q ficou em “0” dividido por 23.
Se nos 3 próximos ciclos, o tempo em “1” estiver compreendido entre 0.5 e 1.5 lambda(s), o bit transmitido será “1”;
Caso o tempo em “1” estiver compreendido entre 1.5 e 2.5 lambdas, o bit transmitido será “0”…
E assim por diante até o contador de bits alcançar o valor de 28 bits recebidos (22 de ADDRESS + 2 DADOS + 4 ANTI-CODE).
Qndo os 28 bits foram recebidos, a rotina verifica se o ANTI-CODE está OK, ou seja, verifica se é igual a “0101”.
Em caso afirmativo, os dados estão OK e podem ser utilizados…
Ligação dos componentes: Arduino MEGA 2560 R3 + Módulo Receptor RF 433MHz
Referências:
http://forum.clubedohardware.com.br/archive/rr3-433mhz-pic/383645
http://forum.clubedohardware.com.br/archive/resolvido-rx-controle/1143411
http://forum.arduino.cc/index.php/topic,175557.0.html
Datasheets:
http://www.holtek.com.cn/PDF/consumer/HT6P20x2v110.pdf
http://www.holtek.com.cn/pdf/consumer/6P20x2T3v100.pdf
http://www.holtek.com/pdf/consumer/6p20v170.pdf
Download através do GitHub:
ACT_HT6P20B_RX-04.ino (Rev. 04)
ACT_HT6P20B_RX-01.ino (Rev. 01)
Gilson Oguime (@oguime) said:
Ótimo post! O código funcionou bem com um controle remoto ECP, mas identificou cada acionamento de botão duas vezes com um Intelibrás XAC4000. Se remover o delay ele aponta cada botão 3 vezes.
acturcato said:
Isso mesmo Gilson, o sketch fica continuadamente recebendo o código enviado pelo controle.
Isso depende do tempo em q o botão fica pressionado. Repare no fluxograma do Datasheet q o HT6P20 fica enviando os dados repetidamente enquanto algum dos botões fica pressionado.
Isso pode ser filtrado tranquilamente no código, caso seja necesssário…
Gilson said:
Afonso, como você faria? Um time loop verificando se há repetição do comando, ou há maneira melhor? Pretende criar uma library?
acturcato said:
Gilson,
acho q a forma mais simples seria colocar variáveis globais q guardam o último ADDRESS e Botão recebido. Assim, a cada código recebido, é checado se os valores são os mesmos, em caso AFIRMATIVO, sai da rotina sem fazer nada!
Agora, com relação a Library, seria necessário utilizar INTERRUPÇÕES para isso. Vou providenciar um novo próximo POST tratando do assunto…
Gilson Oguime (@oguime) said:
Afonso, qual seria a melhor alternativa? Um time loop? Pretende transformar em library?
acturcato said:
Veja resposta no comentário anterior…
Gilson Oguime (@oguime) said:
Testei o código acionando botões repetidamente e em algumas ocasiões o anti-code não foi recebido, deixando o programa preso. Redefini a variável startbit como false nesse caso para reiniciar o loop. Você encontrou essa situação?
acturcato said:
Gilson, não encontrei essa condição nos meus testes.
Porém, entendi como ela pode acontecer e de fato, o programa fica “preso”.
Vou revisar o código (para Rev.1) com essa alteração.
Obrigado.
Gustavo Murta said:
Muito bom! Tomei a liberdade de inserir o seu post no Laboratório de garagem:
http://labdegaragem.com/forum/topics/desvendando-controle-remoto-rf
Parabéns !
Gustavo Murta (BH)
acturcato said:
Muito obrigado Gustavo Murta.
Parabéns tb pelo seu artigo “Desvendando controle remoto RF”.
Muito bem explicado e ilustrado!
O uso do “Analisador lógico com Arduino” para verificar como os controles RF funcionam é essencial.
Ficou muito bom mesmo!
acturcato said:
Pessoal,
alterei o repositório para o GitHub para ficar melhor para todos.
O código sofreu uma pequena revisão (melhorias). Vejam no Índice de Revisões o que foi alterado.
Caso tenham problemas, me avisem!
Pingback: “CLONAGEM” DE CONTROLE REMOTO RF “Learning Code” (HT6P20B) com ARDUINO | Blog do ACT - Programação levada a sério
rodepedroso said:
Turcato,
Muito legal seu post, consegui capturar o sinal do controle com o chip HT6P20B para todos os botões, porém ainda não testei efetivamente seu envio no receptor do portão (É um controle antigo).
Na verdade, meu objetivo é conseguir capturar e enviar o sinal de outro chip (PIC 12F629 I/P E3 EVH 1328), não sei se conhece, mas até agora não tive muito sucesso em lugar nenhum.
Esse controle é de meu ventilador de teto, estou tentando clonar o sinal para ligar ele no arduino.
Achei seu link no site do Lab. de Garagem:
http://labdegaragem.com/forum/topics/desvendando-controle-remoto-rf?id=6223006%3ATopic%3A317706&page=2#comments
Será q tem alguma ideia de como posso fazer isso?
acturcato said:
Olá Rodrigo!
Então, esse chip, o PIC12F629 é um microcontrolador e portanto, o sinal/código gerado por ele pode ser qualquer um (uma vez q depende de como esse microcontrolador foi programado!).
Ou seja, o fabricante do ventilador deve ter criado um protocolo “proprietário”. Dificilmente vc encontrará informações sobre ele.
Agora, o q pode ser feito, é o que o Gustavo Murta sugeriu pra vc no Lab.De.Garagem (ir capturando o sinal e tentando decodificá-lo. trabalho árduo!)
Agora uma pergunta: qual o seu propósito em passar isso pro Arduino?
Se for simplesmente para poder acionar/desacionar o ventilador pelo Arduino, sugiro uma forma bem mais simples: ligue as conexões dos botões do controle remoto do ventilador em algumas saídas do Arduino e assim, vc vai poder acionar o ventilador pelo próprio arduino sem ter q entrar no mérito de como é o protocolo utilizado… bastando apenas ligar/desligar a saída correspondente ao botão! 🙂
O q acha?
rodepedroso said:
Olá Turcato
Valeu pela resposta rápida. 🙂
Bom, a ideia principal é isso mesmo, ligar e desligar o ventilador.
Mas o problema de ligar as conexões dos botões como sugere é que eu quero ligar e desligar pelo Arduíno e também pelo controle remoto. Não quero perder a praticidade de levar o controle em qualquer lugar do apto, se é que me entende?
Como não sei o tamanho do problema, vou tentar capturar o sinais e decodificar.. rs… Só ainda não sei como fazer isso… mas… rs
Preciso do caminho das pedras… rs
Robson said:
PIC12F629 ou PIC12F675 tudo pronto aqui: http://larios.tecnologia.ws/iBlog/archives/1120 (Agradecimentos a Claudio Larios – 27 de junho de 2012)
acturcato said:
Entendo!
Com ctz ficar sem o controle remoto seria uma tragédia! 🙂
Mas, vc não consegue comprar um outro controle? É muito caro? Pq assim vc poderia utilizar as duas formas.
Claro q é mt mais legal “hackear” o controle e fazer td do zero!
GOOD LUCK!!!
rodepedroso said:
Tragédia mesmo… ainda mais agora que descobri o valor dele do controle… rs.. R$ 130,00… dá pra acreditar?
Muto caro…. e tb acho que não vai dar pra pegar outro na garantia… rs kkkk…
Acho que não vai ter jeito….vou ter q escovar os bits dele…. 🙂
Com certeza o prazer de clonar seria muito maior… 🙂
Cleiton said:
Olá, vim deixar aqui um muito obrigado por compartilhar seu código
Excelente explicação sobre o endoder HT6P20.
Eu e mais dois amigos readaptamos seu código em arduino para um PIC16F877A. Como seu código está em licença GPL, postei essa noite no github a nossa contribuição para a comunidade.
Segue o link: https://github.com/cleitonpp/PIC16F877A-DECODER-FOR-REMOTE-CONTROLLER-WITH-HT6P20-ENCODER
Muito obrigado e continue o bom trabalho!
acturcato said:
Olá Cleiton!
A ideia de compartilhar o código é exatamente esta: servir para a comunidade usar e/ou melhorá-lo!
Parabéns a vcs tb por terem adaptado para o uso com o PIC!
T+
Arank said:
Olá acturcato,
Eu tenho um controle com esse encoder HT6P20B, mas não consigo utilizar seu skecth para capturar o código.
Usei uma placa de som e consegui capturar e “decodificar o código”, porém ele difere um pouco do que você informa, veja o que eu consegui:
0 = 18 samples / 48.000 = 0,000375
1 = 36 samples / 48.000 = 0,000750
código = 0101100011011010101110101010
Consegue me ajudar?
Obrigado.
Arank said:
Já consegui solucionar, obrigado.
Pode apagar o comentário.
acturcato said:
Olá!
Desculpe a demora em responder, estive viajando esses dias e acabei me enrolando com o Blog.
Mas, legal q vc já conseguiu resolver o problema.
Tem como vc colocar a “solução” ou então explicar o motivo do problema para q todos os usuários possam ter acesso a “solução”?
Grato.
Arank said:
Favor apagar o comentário anterior com o código do controle.
Na verdade eu havia feito a leitura errada (inverti os “1” e os “0”) e consegui solucionar. Utilizei muitas das informações postadas por você mas não consegui fazer nenhum dos seus sketchs funcionar, acabei eu mesmo fazendo uma adaptação:
noInterrupts();
for (int repeats = 0; repeats < 10; repeats++) {
for (int i = 0; i < alarmSize; i++) {
if (alarm[i] == 0) {
digitalWrite(pinRF, LOW);
delayMicroseconds(pulse);
digitalWrite(pinRF, HIGH);
delayMicroseconds(2 * pulse);
}
else if (alarm[i] == 1) {
digitalWrite(pinRF, LOW);
delayMicroseconds(2* pulse);
digitalWrite(pinRF, HIGH);
delayMicroseconds(pulse);
}
else {
digitalWrite(pinRF, HIGH);
delayMicroseconds(pulse);
digitalWrite(pinRF, LOW);
delayMicroseconds(alarm[i] * pulse);
}
}
interrupts();
Roque said:
Fiz uma pequena modificação para ficar mais robusto (elimina Spikes na recepção).
Ficou bem melhor a recepção.
Verifique se faz sentido.
/*
TITLE: DECODER FOR HT6P20B ENCODER
CREATED BY: AFONSO CELSO TURCATO
DATE: 18/JUN/2014
E-MAIL: acturcato (at) gmail.com
LICENSE: GPL
REV.: 04
DESCRIPTION:
DESCRIÇÃO:
*/
const byte pinRF = 8; // Pin where RF Module is connected. If necessary, change this for your project
int lambda; // on pulse clock width (if fosc = 2KHz than lambda = 500 us)
struct rfControl //Struct for RF Remote Controls
{
unsigned long addr; //ADDRESS CODE
boolean btn1; //BUTTON 1
boolean btn2; //BUTTON 2
};
boolean ACT_HT6P20B_RX(struct rfControl &_rfControl){
static boolean startbit; //checks if start bit was identified
static int counter; //received bits counter: 22 of Address + 2 of Data + 4 of EndCode (Anti-Code)
static unsigned long buffer; //buffer for received data storage
int dur0, dur1; // pulses durations (auxiliary)
if (!startbit)
{// Check the PILOT CODE until START BIT;
dur0 = pulseIn(pinRF, LOW); //Check how long DOUT was “0” (ZERO) (refers to PILOT CODE)
//If time at “0” is between 9200 us (23 cycles of 400us) and 13800 us (23 cycles of 600 us).
if((dur0 > 9200) && (dur0 < 13800) && !startbit)
{
//calculate wave length – lambda
lambda = dur0 / 23;
//Reset variables
dur0 = 0;
buffer = 0;
counter = 0;
startbit = true;
}
}
//If Start Bit is OK, then starts measure os how long the signal is level "1" and check is value is into acceptable range.
if (startbit && counter < 28)
{
++counter;
dur1 = pulseIn(pinRF, HIGH);
// Modificacao para ficar mais robusto (Ignora Spikes positivos)
while (dur1 0.5 * lambda) && (dur1 < (1.5 * lambda))) //If pulse width at "1" is between "0.5 and 1.5 lambda", means that pulse is only one lambda, so the data é "1".
{
buffer = (buffer <= 1.5 * lambda) && (dur1 < (2.5 * lambda))) //If pulse width at "1" is between "1.5 and 2.5 lambda", means that pulse is two lambdas, so the data é "0".
{
buffer = (buffer <> 6;
//Get Buttons from Buffer
_rfControl.btn1 = bitRead(buffer,4);
_rfControl.btn2 = bitRead(buffer,5);
// Serial.print(“Address: “); Serial.println(_rfControl.addr, HEX);
// Serial.print(“Button1: “); Serial.println(_rfControl.btn1, BIN);
// Serial.print(“Button2: “); Serial.println(_rfControl.btn2, BIN);
// Serial.println();
//If a valid data is received, return OK
return true;
}
else
{
//Reset the loop
startbit = false;
}
}
//If none valid data is received, return NULL and FALSE values
_rfControl.addr = NULL;
_rfControl.btn1 = NULL;
_rfControl.btn2 = NULL;
return false;
}
void setup(){
pinMode(pinRF, INPUT);
pinMode(13, OUTPUT);
Serial.begin(9600);
}
void loop(){
digitalWrite(13, digitalRead(pinRF)); //blink de onboard LED when receive something
struct rfControl rfControl_1; //Set variable rfControl_1 as rfControl type
if(ACT_HT6P20B_RX(rfControl_1))
{
//If a valid data is received, print ADDRESS CODE and Buttons values
Serial.print(“Address: “);
Serial.println(rfControl_1.addr, HEX);
Serial.print(“Button1: “);
Serial.println(rfControl_1.btn1, BIN);
Serial.print(“Button2: “);
Serial.println(rfControl_1.btn2, BIN);
Serial.println();
}
}
Roque said:
Desculpe o copy & paste nao saiu direito.
Caso tenha interesse te envio por e-mail
acturcato said:
Olá Roque,
obrigado por “debugar” o código e testá-lo.
De fato, o “copy & paste” ficou corrompido.
Se puder, me envie o código completo por e-mail q eu posto no blog e comento sobre a sua alteração…
Abraço!
Alexandre Yoshikawa said:
Roque,
Será que vc poderia disponibilizar seu código alterado?
karlo said:
ola tenho quebrado a cabeça com RF desde semana passada, e pesquisando acabei chegando aqui graças ao LDG, mas o meu problema é o seguinte, eu consigo ler o controle normalmente, mas eu precisava criar com o codigo de cada botao em variaveis separadas (4 no total) de cada codigo de cada botao, para que eu repasse essas variaveis via modbus (regs) para que o supervisório consiga ler cada botao de cada controle e fazer um cadastro e futuramente identificar qual controle esta acessando… o resultado final é para um pequeno condominio onde temos 5 moradores cada 1 com 2 controles de 3 botoes… preciso saber quando e quem esta armando e desarmando alarme e abrindo portao… não parece uma tarefa dificil pois eu poderia cadastrar direto no sketch cada controle, mas o que eu quero é fazer via supervisório e modbus (tenho o sistema funcionando com outras funções)… pode me ajudar a criar essas variaveis?
acturcato said:
Olá Karlo,
entendi bem a sua necessidade em interligar o Arduino com o sistema supervisório.
Porém, fiquei com uma dúvida: a central desse condomínio utiliza a codificação “Learning Code”? Não é muito perigoso utilizá-la?
Recomendo antes de mais nada, vc trocá-la por uma “Hopping Code”.
Como são as coisas aí?
karlo said:
rapaz depois de quebrar a cabeça e muito consegui antes mesmo da sua resposta, mas me oriente como fazer essas mudanças, achei interessante sua colocação
miragempro said:
Olá, tudo bem?
Peço a sua orientação, estou tentando fazer um controle remotor RF REMOTO HT12D E HT12E com módulos RF XY-MK-5V – 315MHZ
Depois de montar o circuito, eu preciso capturar na serial da IDE do ARDUINO os códigos das reclas, as 4 de dados, para fazer o código, que usarei para controlar um servo motor, e um Dimmer. como conseguir esses codigos?
ALEM DISSO, esses decoder e encoder, só posso controlar 4 dispositivos? pois ele só tem quatro saidas de dados?
Mas não entendi muito bem, esse tutorial é para que? clonar os codigos do controle remoto, usando o (encoder HT6P20B), ? só esse? daria para usa-lo com o meu decoder encoder? e voce disse: decodificá-lo, armazenar os dados decodificados na memória e retransmiti-los quando o botão for pressionado. MAS eu preciso dos codigos, no meu caso de 4 botões para usa-los num programa do ARDUINO.
Preciso muito da sua ajuda! obrigado
acturcato said:
Olá,
eu ainda não tive a oportunidade de trabalhar com os chips HT12D/E.
Mas vc pode, tranquilamente, utilizar o HT620B+Arduino+Módulos RF para criar o transmissor/receptor que está precisando ou utilizar apenas o Arduino+Modulos RF para criar tanto o receptor, quanto o transmissor.
Com uma grande vantagem: vc poderá utilizar a qtde. q quiser de dados (teclas).
Para isso, basta alterar o código q eu disponibilizei.
Fique a vontade em alterar e comentar o q achar necessário.
Abraço!
miragempro said:
Obrigado, mas onde eu faria essa auteração no codigo?
miragempro said:
Obrigado
AlanPinho said:
Olá miragempro, tive este problema, caso alguém ainda precise, faça o seguinte:
Altere o tempo de recebimento para if((dur0 > 5000) && (dur0 < 6000) && !startbit)
****Este tempo pode variar de acordo com o resistor ligado entre o 4 e 5 do chip.(clock)
Também aumente a quantidade de variável para recebimento, Ex.:
boolean btn4; //BUTTON 4
boolean btn5; //BUTTON 5
boolean btn6; //BUTTON 6
boolean btn7; //BUTTON 7
boolean btn8; //BUTTON 8
Proceda da mesma forma para o restante do código!
Abraços!
miragempro said:
Obrigado e um abraço
Rafael Vieira Escocard said:
Olá acturcato.
Depois que eu conseguir captar o sinal, como eu faço para transmitir um sinal igual ?
Wellington said:
Olá acturcato, esse código serve para controle com chip HT6P20D?
Grato.
Luiz Fernando said:
Olá, muito bom o Post que fez, estou tentando utilizar o decoder em conjunto com outros modulos como W5100, sensores DC, Módulo GSM,etc
O source em si, funciona bem, mas quando agrego conteudo junto, deixa de funcionar, comecei a debugar e cheguei na conclusão, que o delay do conteudo agregado interfere na leitura do intruder.
Um simples Serial.println(“LOOP”), dentro do loop interfere na leitura do mesmo, será que você ou alguém já passou por isso, ou poderia me ajudar nessa situação?
Danilo Melotti said:
Como eu faço para “salvar” um controle no Arduíno e usar esse controle para acionar cargas?
Robson said:
O código versão 4, não pode operar com ATiny85 (8 pinos), porque usa módulo serial interno (UART). Mas graças ao serial por software podemos adaptar o código: https://www.hackster.io/porrey/easy-serial-on-the-attiny-2676e6 resultando em “O sketch usa 3616 bytes (44%) de espaço de armazenamento para programas. O máximo são 8192 bytes.”
Tassio said:
Estou meio perdido, estou aprendendo ainda sobre arduino e programação… Eu copiei o codigo e apareceu um adress e os botões, mas eu não sei o que fazer com essas informações ;'( . Eu já tentei clonar o controle por esse link : https://acturcato.wordpress.com/2014/01/14/clonagem-de-controle-remoto-rf-learning-code-ht6p20b-com-arduino/
Mas esse não funcionou, apenas o que esta postado nessa pagina deu sinal kkk.
Em resumo, Estou querendo clonar o meu controle com o arduino para deixar de usar esse controle e usar apenas o arduino enviando o codigo para o meu portão…
Se puderem me dar uma luz de como posso usar o meu arduino para enviar a mesma frequencia que o controle ficarei grato!!
Marcio Silveira said:
Olá. Fiz um sistema com banco de dados com cadastro de usuário que exibe no display o nome de quem está usando o controle, com placa do carro e numero do apartamento.Fica gravado no banco SQL todos os acionamentos com hora registrada.Estou tendo uma dificuldade. Preciso ficar com o controle apertado mais tempo que um usuario normal aperta.Senão não exibe os bins capturados.Tem como encurtar este tempo de captura? Não pretendo transmitir o código.
acturcato said:
Olá Márcio!
Depois que publiquei esse código lá em 2014, depois de um tempo, o pessoal incorporou-o na biblioteca RC-SWITCH (https://github.com/sui77/rc-switch).
Tente utilizá-la!
Acredito que resolverá esse problema com o “tempo” que vc tá tendo.
Afonso.
Jacques said:
Este código original foi criado por Jacques Moresco!! Deve ser comentado o nome do autor!!!!
acturcato said:
Olá Jacques!
Isso mesmo, o código é baseado no seu e em outros conforme está (e sempre esteve) citado nas Referências.
No entanto, pra destacar ainda mais essa contribuição, eu coloquei em destaque no início do Post.
Valeu!
#keepcoding
Pingback: Arduino + Sensor Magnético 433Mhz – Personal Blog of work and studies about technology