Uma biblioteca que permite o envio e recebimento de sinais infravermelhos.
Disponível como biblioteca Arduino "IRremote".
? Google Tradutor
Protocolos IR suportados
Características
Novos recursos com a versão 4.x
Novos recursos com a versão 3.x
Convertendo seu programa 2.x para a versão 4.x
Como converter os primeiros códigos de dados IR de 32 bits do MSB antigo para os novos códigos de dados IR de 32 bits do LSB
Erros ao usar as versões 3.x para tutoriais antigos
Permanecendo em 2.x
Por que *.hpp em vez de *.cpp
Usando os novos arquivos *.hpp
Tutoriais
3 maneiras de especificar um código IR
Pinagens do receptor IR
Recebendo códigos IR
Isenção de responsabilidade
Outras bibliotecas, que podem abranger esses protocolos
Protocolo=PULSE_DISTANCE
Protocolo=DESCONHECIDO
Como lidar com protocolos não suportados pelo IRremote
estrutura de dados IR decodificada
Protocolos ambíguos
Uso de RAM de diferentes protocolos
Lidando com protocolos desconhecidos
Envio de códigos IR
Lista de bancos de dados públicos de códigos IR
Envio de códigos IRDB IR
Enviar alfinete
Pequeno receptor e remetente NEC
O protocolo RÁPIDO
Perguntas frequentes e dicas
A recepção é interrompida após analogWrite() ou tone() ou após o funcionamento de um motor
Sinalizador de estouro de conjuntos de recebimento
Problemas com Neopixels, FastLed etc.
Não funciona/compila com outra biblioteca
Múltiplas instâncias de receptor e remetente de IR
Aumentar a força do sinal de saída enviado
Frequência mínima do clock da CPU
Protocolo Bang & Olufsen
Exemplos para esta biblioteca
Exemplos on-line de WOKWI
Controle IR de um carro robô
Questões e discussões
Compilar opções/macros para esta biblioteca
Alterando arquivos include (*.h) com Arduino IDE
Modificando opções de compilação com Sloeber IDE
Placas suportadas
Uso de temporizador e pin
Incompatibilidades com outras bibliotecas e comandos do Arduino como tone() e analogWrite()
Geração de sinal PWM de hardware para envio
Por que usamos um ciclo de trabalho de 30% para envio
Como decodificamos sinais
Diagramas de codificação NEC
Comparação rápida de 5 bibliotecas de recepção Arduino IR
História
Links úteis
Colaboradores
Licença
Direitos autorais
NEC / Onkyo / Apple
Denon / Sharp
Panasonic / Kaseikyo
JVC
LG
RC5
RC6
Samsung
Sony
Universal Pulse Distance
Universal Pulse Width
Universal Pulse Distance Width
Hash
Pronto
BoseWave
Bang & Olufsen
Lego
FAST
Whynter
MagiQuest
Os protocolos podem ser ativados e desativados definindo macros antes da linha #include <IRremote.hpp>
como aqui:
#define DECODE_NEC//#define DECODE_DENON#include <IRremote.hpp>
Muitos tutoriais e exemplos.
Mantido ativamente.
Permite receber e enviar dados brutos de tempo .
Como 4.3 IrSender.begin(DISABLE_LED_FEEDBACK)
não funcionará mais , use IrSender.begin(DISABLE_LED_FEEDBACK, 0)
em vez disso.
Novo decodificador universal de distância de pulso / largura de pulso / largura de pulso adicionado, que cobre muitos protocolos desconhecidos anteriores.
Impressão do código de como enviar o comando recebido por IrReceiver.printIRSendUsage(&Serial)
.
O tipo RawData agora é de 64 bits para plataformas de 32 bits e, portanto, decodedIRData.decodedRawData
pode conter informações completas do quadro para mais protocolos do que com 32 bits como antes.
Retorno de chamada após receber um comando - Chama seu código assim que uma mensagem é recebida.
Tratamento aprimorado de protocolos PULSE_DISTANCE
+ PULSE_WIDTH
.
Novo protocolo FAST.
Impressão automática da função de envio correspondente com printIRSendUsage()
.
Você deve substituir #define DECODE_DISTANCE
por #define DECODE_DISTANCE_WIDTH
(somente se você habilitou explicitamente este decodificador).
O parâmetro bool hasStopBit
não é mais necessário e foi removido, por exemplo, para a função sendPulseDistanceWidth()
.
Qualquer pin pode ser usado para recebimento e se SEND_PWM_BY_TIMER
não estiver definido também para envio.
O LED de feedback pode ser ativado para envio/recebimento.
Um valor de comando ** de 8/16 bits, bem como um endereço de 16 bits e um número de protocolo são fornecidos para decodificação (em vez do antigo valor de 32 bits).
Os valores do protocolo estão em conformidade com os padrões do protocolo .
NEC, Panasonic, Sony, Samsung e JVC decodificam e enviam LSB primeiro.
Suporta protocolo de distância universal , que cobre muitos protocolos desconhecidos anteriores.
Compatível com a biblioteca tone() . Veja o exemplo ReceiveDemo.
Envio e recebimento simultâneos. Veja o exemplo SendAndReceive.
Suporta mais plataformas .
Permite a geração de sinal não PWM apenas para simular um sinal de receptor baixo ativo para conexão direta a dispositivos receptores existentes sem usar IR.
Fácil configuração do protocolo, diretamente no seu código-fonte .
Reduz o consumo de memória e diminui o tempo de decodificação.
Contém um decodificador apenas NEC muito pequeno, que não requer nenhum recurso de temporizador .
-> Comparação de recursos de 5 bibliotecas Arduino IR.
A partir da versão 3.1, a geração do PWM para envio é feita por software , economizando assim o temporizador do hardware e habilitando pinos de saída arbitrários para envio .
Se você usar um núcleo Arduino (antigo) que não usa o sinalizador -flto
para compilação, você pode ativar a linha #define SUPPRESS_ERROR_MESSAGE_FOR_BEGIN
em IRRemote.h, se receber mensagens de erro falsas relacionadas a Begin() durante a compilação.
Os objetos IRreceiver e IRsender foram adicionados e podem ser usados sem defini-los, como o conhecido objeto Arduino Serial .
Basta remover a linha IRrecv IrReceiver(IR_RECEIVE_PIN);
e/ou IRsend IrSender;
em seu programa e substitua todas as ocorrências de IRrecv.
ou irrecv.
com IrReceiver
e substitua todos IRsend
ou irsend
por IrSender
.
Como os valores decodificados agora estão em IrReceiver.decodedIRData
e não mais nos results
, remova a linha decode_results results
ou similar.
Como para o objeto Serial, chame IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK)
ou IrReceiver.begin(IR_RECEIVE_PIN, DISABLE_LED_FEEDBACK)
em vez de IrReceiver.enableIRIn()
ou irrecv.enableIRIn()
em setup().
Para enviar, chame IrSender.begin();
em configuração().
Se IR_SEND_PIN não estiver definido (antes da linha #include <IRremote.hpp>
) você deverá usar, por exemplo IrSender.begin(3, ENABLE_LED_FEEDBACK, USE_DEFAULT_FEEDBACK_LED_PIN);
A antiga função decode(decode_results *aResults)
foi substituída pela simples decode()
. Portanto, se você tiver uma instrução if(irrecv.decode(&results))
substitua-a por if (IrReceiver.decode())
.
O resultado decodificado agora está em IrReceiver.decodedIRData
e não mais nos results
, portanto, substitua quaisquer ocorrências de results.value
e results.decode_type
(e similares) por IrReceiver.decodedIRData.decodedRawData
e IrReceiver.decodedIRData.protocol
.
Overflow, Repeat e outros sinalizadores estão agora em IrReceiver.receivedIRData.flags
.
Raramente usado: results.rawbuf
e results.rawlen
devem ser substituídos por IrReceiver.decodedIRData.rawDataPtr->rawbuf
e IrReceiver.decodedIRData.rawDataPtr->rawlen
.
Os 5 protocolos NEC, Panasonic, Sony, Samsung e JVC foram convertidos primeiro para LSB. As funções de envio para envio de dados MSB antigos foram renomeadas para sendNECMSB
, sendSamsungMSB()
, sendSonyMSB()
e sendJVCMSB()
. As antigas funções MSB sendSAMSUNG()
e sendSony()
ainda estão disponíveis. A versão antiga do MSB da função sendPanasonic()
foi excluída, pois apresentava bugs que ninguém reconhecia e, portanto, foi assumido que nunca seria usado.
Para converter códigos MSB em LSB, veja abaixo.
#include <IRremote.h>#define RECV_PIN 2IRrecv irrecv(RECV_PIN); resultados decode_results;void setup() { ... Serial.begin(115200); //Estabelece comunicação serial irrecv.enableIRIn(); // Inicia o receptor}void loop() { if (irrecv.decode(&results)) { Serial.println(resultados.valor, HEX); ... irrecv.resume(); //Recebe o próximo valor } ... }
#include <IRremote.hpp>#define IR_RECEIVE_PIN 2void setup() { ... Serial.begin(115200); // // Estabelece comunicação serial IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK); // Inicia o receptor}void loop() { if (IrReceiver.decode()) { Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX); // Imprime dados brutos "antigos" IrReceiver.printIRResultShort(&Serial); // Imprime dados completos recebidos em uma linha IrReceiver.printIRSendUsage(&Serial); // Imprime o extrato necessário para enviar esses dados ... IrReceiver.resume(); //Habilita o recebimento do próximo valor } ... }
Para os novos decodificadores para NEC, Panasonic, Sony, Samsung e JVC , o resultado IrReceiver.decodedIRData.decodedRawData
é agora LSB-first , como sugere a definição desses protocolos!
Para converter um no outro, você deve reverter as posições de byte/nibble e, em seguida, reverter todas as posições de bit de cada byte/nibble ou escrevê-lo como uma string binária e revertê-lo/espelhá-lo.
Exemplo: 0xCB 34 01 02
0x20 10 43 BC
após mordiscar reverso
0x40 80 2C D3
após bit reverso de cada mordidela
0->0 1->8 2->4 3->C 4->2 5->A 6->6 7->E 8->1 9->9 A->5 B->D C->3 D->B E->7 F->F
0xCB340102
é binário 1100 1011 0011 0100 0000 0001 0000 0010
.
0x40802CD3
é binário 0100 0000 1000 0000 0010 1100 1101 0011
.
Se você ler a primeira sequência binária de trás para frente (da direita para a esquerda), obterá a segunda sequência. Você pode usar bitreverseOneByte()
ou bitreverse32Bit()
para isso.
O envio de códigos MSB antigos sem conversão pode ser feito usando sendNECMSB()
, sendSonyMSB()
, sendSamsungMSB()
, sendJVCMSB()
.
Se você sofrer erros com o código do tutorial antigo, incluindo IRremote.h
em vez de IRremote.hpp
, tente reverter para a versão 2.4.0.
Muito provavelmente seu código será executado e você não perderá os novos recursos.
Considere usar a versão 2.4 original 2017 ou a última versão 2.8 compatível com versões anteriores para seu projeto.
Pode ser suficiente e lidar perfeitamente com códigos IR de 32 bits.
Se isso não se adequar ao seu caso, tenha certeza de que o 4.x está pelo menos tentando ser compatível com versões anteriores, portanto, seus exemplos antigos ainda devem funcionar bem.
Apenas os seguintes decodificadores estão disponíveis:
NEC
Denon
Panasonic
JVC
LG
RC5
RC6
Samsung
Sony
A chamada de irrecv.decode(&results)
usa os primeiros decodificadores MSB antigos como em 2.x e define os códigos de 32 bits em results.value
.
Nenhuma decodificação para um endereço de 8/16 bits mais significativo (constante) e um comando de 8 bits.
Cada arquivo *.cpp é compilado separadamente por uma chamada do compilador exclusivamente para este arquivo cpp. Essas chamadas são gerenciadas pelo sistema IDE/make. No Arduino IDE as chamadas são executadas quando você clica em Verify ou Upload .
E agora nosso problema com o Arduino é:
Como definir opções de compilação para todos os arquivos *.cpp, especialmente para bibliotecas utilizadas?
IDEs como Sloeber ou PlatformIO suportam isso, permitindo especificar um conjunto de opções por projeto. Eles adicionam essas opções em cada chamada do compilador, por exemplo -DTRACE
.
Mas o Arduino não possui esse recurso. Portanto, a solução alternativa não é compilar todas as fontes separadamente, mas concatená-las em um arquivo fonte enorme, incluindo-as em sua fonte.
Isso é feito, por exemplo, #include "IRremote.hpp"
.
Mas por que não #include "IRremote.cpp"
?
Experimente e você verá muitos erros, porque cada função do arquivo *.cpp agora é compilada duas vezes, primeiro compilando o arquivo enorme e depois compilando o arquivo *.cpp separadamente, como descrito acima.
Portanto, usar a extensão cpp não é mais possível, e uma solução é usar hpp como extensão, para mostrar que se trata de um arquivo *.cpp incluído.
Qualquer outra extensão, por exemplo, cinclude, serviria, mas hpp parece ser de bom senso.
Para oferecer suporte às opções de compilação mais facilmente, você deve usar a instrução #include <IRremote.hpp>
em vez de #include <IRremote.h>
em seu programa principal (também conhecido como arquivo *.ino com setup() e loop()).
Em todos os outros arquivos, você deve usar o seguinte, para evitar erros de vinculador multiple definitions
:
#define USE_IRREMOTE_HPP_AS_PLAIN_INCLUDE#include <IRremote.hpp>
Certifique-se de que todas as macros em seu programa principal estejam definidas antes de qualquer #include <IRremote.hpp>
.
Caso contrário, as macros a seguir serão definitivamente substituídas pelos valores padrão:
RAW_BUFFER_LENGTH
IR_SEND_PIN
SEND_PWM_BY_TIMER
Uma introdução muito elaborada aos controles remotos IR e à biblioteca IRremote do DroneBot Workshop.
Existem 3 maneiras diferentes de especificar um código IR específico.
O tempo de cada marca/pulso e espaço/distância_entre_pulsos é especificado em uma lista ou array. Isto permite especificar todos os códigos IR , mas requer muita memória e não é legível . Uma definição formal de tal matriz de temporização, incluindo especificação de frequência e repetições, é o formato Pronto .
A memória pode ser salva usando uma resolução de tempo menor. Para IRremote você pode usar uma resolução de 50 µs que reduz pela metade o requisito de memória usando valores de bytes em vez de valores int16. Para fins de recebimento, você pode usar o hash do tempo fornecido pelo decodificador decodeHash()
.
Existem 3 esquemas de codificação principais que codificam um valor binário / hexadecimal:
PULSE_DISTANCE
. A distância entre os pulsos determina o valor do bit. Isso requer sempre uma parada! Exemplos são os protocolos NEC e KASEIKYO. A largura do pulso é constante para a maioria dos protocolos.
PULSE_WIDTH
. A largura de um pulso determina o valor do bit, a distância do pulso é constante. Isso não requer nenhum bit de parada! O único exemplo conhecido é o protocolo SONY.
Codificação de fase/Manchester. O tempo da transição pulso/pausa (fase) em relação ao relógio determina o valor do bit. Exemplos são os protocolos RC5 e RC6.
A codificação de fase tem comprimento de bit constante , PULSE_DISTANCE
com largura de pulso constante e PULSE_WIDTH
não tem comprimento de bit constante !
Um exemplo bem conhecido de PULSE_DISTANCE
com codificação de largura de pulso não constante é a codificação serial RS232 . Aqui a largura de pulso não constante é usada para permitir um comprimento de bit constante .
A maioria dos sinais IR possui um cabeçalho especial para ajudar na configuração do ganho automático do circuito receptor. Este cabeçalho não faz parte da codificação, mas é frequentemente significativo para um protocolo especial e, portanto, deve ser reproduzível.
Esteja ciente de que existem códigos que usam uma codificação PULSE_DISTANCE
onde mais de um binário 0/1 é colocado em uma combinação de pulso/pausa. Isso requer mais de 2 combinações diferentes de pulso ou duração de pausa. O protocolo HobToHood usa essa codificação.
O uso de esquemas de codificação reduz a especificação de um código IR para um valor bitstream/hex, que é LSB por padrão e tempos de pulso/pausa de cabeçalho, 0 e 1. O valor hexadecimal é bastante legível . Esses esquemas não podem colocar nenhuma semântica como endereço, comando ou soma de verificação neste fluxo de bits.
Existem alguns protocolos comuns que são implementados diretamente no IRremote. Eles especificam a frequência, os tempos do cabeçalho, 0 e 1, bem como outros valores como soma de verificação, distância de repetição, codificação repetida, alternância de bits, etc. A semântica do valor hexadecimal também é especificada, permitindo o uso de apenas 2 parâmetros de endereço e comando para especificar um código IR. Isso economiza memória e é altamente legível . Muitas vezes o endereço também é constante, o que reduz ainda mais os requisitos de memória.
Tutorial do sensor IR Adafruit
No seu programa, você verifica um quadro IR completamente recebido com:
if (IrReceiver.decode()) {}
Isso também decodifica os dados recebidos.
Após a decodificação bem-sucedida, os dados IR estão contidos na estrutura IRData, disponível como IrReceiver.decodedIRData
.
estrutura IRData {protocolo decode_type_t; // DESCONHECIDO, NEC, SONY, RC5, PULSE_DISTANCE, ... endereço uint16_t; // Endereço decodificado comando uint16_t; // Comando decodificado uint16_t extra; // Usado para ID de fornecedor desconhecido Kaseikyo. Carrapatos usados para decodificar o protocolo de distância. uint16_t número de bits; // Número de bits recebidos para dados (endereço + comando + paridade) - para determinar o comprimento do protocolo se comprimentos diferentes forem possíveis. sinalizadores uint8_t; // IRDATA_FLAGS_IS_REPEAT, IRDATA_FLAGS_WAS_OVERFLOW etc. Veja as definições de IRDATA_FLAGS_* IRRawDataType decodificadoRawData; // Dados brutos decodificados de até 32 (64 bits para arquiteturas de CPU de 32 bits), usados para funções sendRaw. uint32_t decodificadoRawDataArray[RAW_DATA_ARRAY_SIZE]; // Dados brutos decodificados de 32 bits, para serem usados na função de envio. irparams_struct *rawDataPtr; // Ponteiro dos dados brutos de tempo a serem decodificados. Principalmente o buffer de dados preenchido ao receber ISR.};
Esta é a lista de sinalizadores contidos no campo sinalizadores.
Verifique com, por exemplo if(IrReceiver.decodedIRData.flags & IRDATA_FLAGS_IS_REPEAT)
.
Nome da bandeira | Descrição |
---|---|
IRDATA_FLAGS_IS_REPEAT | A lacuna entre o quadro anterior é menor que a lacuna máxima esperada para uma repetição. !!!Não verificamos alterações de comando ou endereço, pois quase não é possível pressionar 2 botões diferentes no controle remoto em cerca de 100 ms!!! |
IRDATA_FLAGS_IS_AUTO_REPEAT | O quadro de repetição atual é uma repetição, que é sempre enviada após um quadro normal e não pode ser evitada. Especificado apenas para protocolos DENON e LEGO. |
IRDATA_FLAGS_PARITY_FAILED | O quadro atual (repetição automática) violou a verificação de paridade. |
IRDATA_FLAGS_TOGGLE_BIT | É definido se o bit de alternância RC5 ou RC6 estiver definido. |
IRDATA_FLAGS_EXTRA_INFO | Há informações extras não contidas no endereço e nos dados (por exemplo, ID de fornecedor desconhecido de Kaseikyo ou em decodedRawDataArray). |
IRDATA_FLAGS_WAS_OVERFLOW | Muitas marcas e espaços para o RAW_BUFFER_LENGTH especificado. Para evitar sinalização interminável de estouro, irparams.rawlen é definido como 0 neste caso. |
IRDATA_FLAGS_IS_MSB_FIRST | Este valor é determinado principalmente pelo protocolo (conhecido). |
auto myRawdata= IrReceiver.decodedIRData.decodedRawData;
As definições para IrReceiver.decodedIRData.flags
são descritas aqui.
IrReceiver.printIRResultShort(&Serial);
IrReceiver.printIRResultRawFormatted(&Serial, true);`
Os dados brutos dependem do estado interno do temporizador Arduino em relação ao sinal recebido e podem, portanto, ser ligeiramente diferentes a cada vez. (problema de resolução). Os valores decodificados são os interpretados que são tolerantes a essas pequenas diferenças!
IrReceiver.printIRSendUsage(&Serial);
O protocolo NEC é definido como endereço de 8 bits e comando de 8 bits. Mas o endereço físico e os campos de dados têm, cada um, 16 bits de largura. Os 8 bits adicionais são usados para enviar o endereço invertido ou comando para verificação de paridade.
O protocolo NEC estendido usa 8 bits de paridade adicionais de endereço para um endereço de 16 bits, desativando assim a verificação de paridade para endereço.
O protocolo ONKYO, por sua vez, usa o bit adicional de 8 paridade de endereço e comando para um endereço e comando de 16 bits.
O decodificador reduz os valores de 16 bits para 8 bits se a paridade estiver correta. Se a paridade não estiver correta, ele não assume nenhum erro de paridade, mas assume os valores como valores de 16 bits sem paridade, assumindo NEC estendido ou protocolo de protocolo NEC estendido.
Mas agora temos um problema quando queremos receber, por exemplo, o endereço de 16 bits 0x00FF ou 0x32CD! O decodificador interpreta isso como um endereço NEC de 8 bits 0x00/0x32 com paridade correta de 0xFF/0xCD e o reduz para 0x00/0x32.
Uma maneira de lidar com isso é forçar a biblioteca a sempre usar a interpretação do protocolo ONKYO usando #define DECODE_ONKYO
. Outra forma é verificar se IrReceiver.decodedIRData.protocol
é NEC e não ONKYO e reverter a redução de paridade manualmente.
Com um toque longo, o protocolo NEC não repete seu quadro, ele envia um quadro especial de repetição curta. Isso permite uma distinção fácil entre pressionamentos longos e repetidos e economiza um pouco de energia da bateria. Este comportamento é único para NEC e seus protocolos derivados, como LG e Samsung.
Mas é claro que também existem sistemas de controle remoto, que usam o protocolo NEC, mas apenas repetem o primeiro quadro quando é feito um toque longo, em vez de enviar o quadro especial de repetição curta. Chamamos isso de protocolo NEC2 e ele é enviado com sendNEC2()
.
Mas tenha cuidado, o protocolo NEC2 só pode ser detectado pelo decodificador da biblioteca NEC após o primeiro quadro e se você pressionar longamente!
Com um toque longo, o protocolo SamsungLG não repete seu quadro, ele envia um quadro especial de repetição curta.
O RAW_BUFFER_LENGTH
determina o comprimento do buffer de bytes onde os dados de temporização IR recebidos são armazenados antes da decodificação.
100 é suficiente para protocolos padrão de até 48 bits , sendo 1 bit composto por uma marca e um espaço. Sempre exigimos 4 bytes adicionais, 1 byte para o intervalo inicial, 2 bytes para o cabeçalho e 1 byte para o bit de parada.
Os protocolos de 48 bits são PANASONIC, KASEIKYO, SAMSUNG48, RC6.
Protocolos de 32 bits como NEC, SAMSUNG, WHYNTER, SONY(20), LG(28) requerem um comprimento de buffer de 68 .
Protocolos de 16 bits como BOSEWAVE, DENON, FAST, JVC, LEGO_PF, RC5, SONY(12 ou 15) requerem um comprimento de buffer de 36 .
MAGIQUEST requer um tamanho de buffer de 112 .
Os aparelhos de ar condicionado geralmente enviam um fluxo de dados de protocolo mais longo, de até 750 bits .
Se a lacuna de registro determinada por RECORD_GAP_MICROS
for alterada do padrão de 8 ms para mais de 20 ms, o buffer não será mais um byte, mas um buffer uint16_t, exigindo o dobro de RAM.
Esta biblioteca foi projetada para caber dentro de MCUs com níveis relativamente baixos de recursos e foi projetada para funcionar como uma biblioteca junto com outras aplicações que também requerem alguns recursos do MCU para funcionar.
Use o exemplo ReceiveDemo para imprimir todas as informações sobre o seu protocolo IR.
O exemplo ReceiveDump fornece mais informações, mas apresenta detecção de repetição incorreta devido ao tempo necessário para imprimir as informações.
Se o seu protocolo parece não ser suportado por esta biblioteca, você pode tentar a biblioteca IRMP, que suporta muito melhor os protocolos Manchester.
Para aparelhos de ar condicionado , você pode experimentar a biblioteca IRremoteESP8266, que suporta um conjunto impressionante de protocolos e muitos aparelhos de ar condicionado e funciona também no ESP32.
Raw-IR-decoder-for-Arduino não é uma biblioteca, mas um esboço de exemplo do Arduino, que fornece muitos métodos de decodificação, especialmente protocolos de ar condicionado . O envio desses protocolos pode ser feito pela biblioteca HeatpumpIR do Arduino.
Se você obtiver algo assim:
PULSE_DISTANCE: HeaderMarkMicros=8900 HeaderSpaceMicros=4450 MarkMicros=550 OneSpaceMicros=1700 ZeroSpaceMicros=600 NumberOfBits=56 0x43D8613C 0x3BC3BC
então você tem um código de 56 bits , que provavelmente vem de um controle remoto de ar condicionado.
Você pode enviá-lo com sendPulseDistanceWidth()
.
uint32_t tRawData[] = { 0xB02002, 0xA010 }; IrSender.sendPulseDistance(38, 3450, 1700, 450, 1250, 450, 400, &tRawData[0], 48, falso, 0, 0);
Você pode enviá-lo chamando sendPulseDistanceWidthData()
duas vezes, uma vez para os primeiros 32 bits e a próxima para os 24 bits restantes.
O decodificador PULSE_DISTANCE
/ PULSE_WIDTH
apenas decodifica um fluxo de tempo para um fluxo de bits armazenado como valores hexadecimais. Esses decodificadores não podem colocar nenhuma semântica como endereço, comando ou soma de verificação neste fluxo de bits. Mas o fluxo de bits é muito mais legível do que um fluxo de temporização. Este fluxo de bits é lido primeiro como LSB por padrão . Se o LSB não for adequado para pesquisas futuras, você poderá alterá-lo aqui.
Se a RAM não for superior a 2k, o decodificador só aceita durações de marca ou espaço de até 2.500 microssegundos para economizar espaço de RAM, caso contrário, aceita durações de até 10 ms.
Se você vir algo como Protocol=UNKNOWN Hash=0x13BD886C 35 bits received
como saída, por exemplo, do exemplo ReceiveDemo, você tem um problema com a decodificação de um protocolo ou um protocolo não suportado.
Se você receber um número ímpar de bits , seu circuito receptor provavelmente está com problemas. Talvez porque o sinal IR seja muito fraco.
Se você vir tempos como + 600,- 600 + 550,- 150 + 200,- 100 + 750,- 550
então um espaço de 450 µs foi dividido em dois espaços de 150 e 100 µs com um sinal de pico/erro de 200 µs entre eles. Talvez devido a um receptor com defeito ou a um sinal fraco em conjunto com outra fonte emissora de luz próxima.
Se você vir tempos como + 500,- 550 + 450,- 550 + 450,- 500 + 500,-1550
, então as marcas são geralmente mais curtas que os espaços e, portanto, MARK_EXCESS_MICROS
(especificado em seu arquivo ino) deve ser negativo para compensar isso na decodificação.
Se você vir Protocol=UNKNOWN Hash=0x0 1 bits received
pode ser que o espaço após a marca inicial seja maior que RECORD_GAP_MICROS
. Isto foi observado para alguns protocolos de ar condicionado LG. Tente novamente com uma linha, por exemplo, #define RECORD_GAP_MICROS 12000
antes da linha #include <IRremote.hpp>
no seu arquivo .ino.
Para ver mais informações que ajudam você a encontrar o motivo do seu protocolo UNKNOWN, você deve habilitar a linha //#define DEBUG
em IRremoteInt.h.
Se você não sabe qual protocolo seu transmissor IR usa, você tem várias opções.
Basta usar o valor hash para decidir qual comando foi recebido. Veja o exemplo SimpleReceiverForHashCodes.
Use o exemplo IRreceiveDemo ou o exemplo IRreceiveDump para despejar o tempo de IR. Você pode então reproduzir/enviar esse tempo com o exemplo SendRawDemo.
O exemplo IRMP AllProtocol imprime o protocolo e os dados de um dos 40 protocolos suportados . A mesma biblioteca pode ser usada para enviar esses códigos.
Se você tiver uma placa Arduino maior em mãos (> 100 kByte de memória de programa), você pode tentar o exemplo IRremoteDecode da biblioteca Arduino DecodeIR.
Use o IrScrutinizer. Ele pode gerar automaticamente um esboço de envio para o seu protocolo exportando como "Arduino Raw". Suporta IRremote, o antigo IRLib e Infrared4Arduino.
Se você tiver em mãos um dispositivo que possa gerar os códigos IR com os quais deseja trabalhar (também conhecido como IR Remote), é recomendável receber os códigos com o exemplo ReceiveDemo, que informará na saída serial como enviá-los.
Protocol=LG Address=0x2 Command=0x3434 Raw-Data=0x23434E 28 bits MSB first Send with: IrSender.sendLG(0x2, 0x3434, <numberOfRepeats>);
Você descobrirá que o endereço é uma constante e os comandos às vezes são agrupados de maneira sensata.
Se você não tiver certeza sobre o número de repetições a serem usadas no envio, 3 é um bom ponto de partida. Se isso funcionar, você poderá verificar valores mais baixos posteriormente.
Se você ativou DECODE_DISTANCE_WIDTH
, o código impresso por printIRSendUsage()
difere entre plataformas de 8 e 32 bits , portanto é melhor executar o programa de recebimento na mesma plataforma do programa de envio.
Todas as funções de envio suportam o envio de repetições, se for sensato. Os quadros repetidos são enviados em um período fixo determinado pelo protocolo. por exemplo, 110 ms de início a início para NEC.
Lembre-se de que não há atraso após a última marca enviada . Se você mesmo cuida do envio de quadros repetidos, deverá inserir atrasos sensíveis antes dos quadros repetidos para permitir a decodificação correta.
O envio de códigos MSB antigos sem conversão pode ser feito usando sendNECMSB()
, sendSonyMSB()
, sendSamsungMSB()
, sendJVCMSB()
.
Os códigos encontrados no banco de dados Flipper-IRDB são bastante simples de converter, pois também utilizam o esquema de endereço/comando.
A correspondência de protocolo é NECext -> NECext (ou Onkyo), Samsung32 -> Samsung, SIRC20 -> Sony com 20 bits etc.
Os códigos encontrados no banco de dados irdb especificam um dispositivo , um subdispositivo e uma função . Na maioria das vezes, o dispositivo e o subdispositivo podem ser considerados como byte superior e inferior do parâmetro de endereço e a função é o parâmetro de comando para as novas funções estruturadas com parâmetros de endereço, comando e contagem de repetição como, por exemplo, IrSender.sendNEC((device << 8) | subdevice, 0x19, 2)
.
Um mapeamento exato pode ser encontrado nos arquivos de definição de IRP para protocolos IR. "D" e "S" denotam dispositivo e subdispositivo e "F" denota a função.
Qualquer pino pode ser escolhido como pino de envio, pois o sinal PWM é gerado por padrão com bit banging de software, já que SEND_PWM_BY_TIMER
não está ativo.
No ESP32 ledc o canal 0 é usado para gerar o IR PWM.
Se IR_SEND_PIN
for especificado (como macro c), reduz o tamanho do programa e melhora o tempo de envio para AVR. Se você quiser usar uma variável para especificar o pino de envio, por exemplo, com setSendPin(uint8_t aSendPinNumber)
, você deve desabilitar esta macro IR_SEND_PIN
. Então você pode alterar o pino de envio a qualquer momento antes de enviar um quadro IR. Consulte também Opções de compilação/macros para esta biblioteca.
http://www.harctoolbox.org/IR-resources.html
Banco de dados Flipper IRDB
Decodificação de flipper | Decodificação remota IR |
---|---|
Samsung32 | Samsung |
NEC | NEC |
NECext | ONKYO |
<start bit><VendorID:16><VendorID parity:4><Genre1:4><Genre2:4><Command:10><ID:2><Parity:8><stop bit> e ID é MSB do endereço. endereço: 8A 02 20 00 comando: 56 03 00 00 -> IRremoto: Endereço 0x6A8, sendPanasonic (para 02 20) e Comando 0x35 | <start bit><VendorID:16><VendorID parity:4><Address:12><Command:8><Parity of VendorID parity, Address and Command:8><stop bit> |
Para aplicações que requerem apenas NEC, variantes NEC ou protocolo FAST - veja abaixo -, há um receptor/remetente especial incluído, que possui um tamanho de código muito pequeno de 500 bytes e NÃO requer nenhum temporizador .
Em vez de amostrar a entrada a cada 50 µs como o IRremote faz, o receptor TinyReceiver usa uma interrupção de mudança de pino para decodificação instantânea, o que limita a escolha de protocolos.
Em cada mudança de nível, o nível e o tempo desde a última mudança são usados para decodificar incrementalmente o protocolo.
Com este princípio de funcionamento, não podemos esperar um tempo limite e então decodificar o protocolo como o IRremote faz.
Em vez disso, precisamos saber qual é o último bit (mudança de nível) de um protocolo para fazer a decodificação final e a chamada da função de retorno de chamada opcional fornecida pelo usuário handleTinyReceivedIRData()
.
Isso significa que precisamos saber o número de bits de um protocolo e portanto o protocolo (família).
Confira os exemplos TinyReceiver e IRDispatcherDemo.
Tome cuidado para incluir TinyIRReceiver.hpp
ou TinyIRSender.hpp
em vez de IRremote.hpp
.
//#define USE_ONKYO_PROTOCOL // Como NEC, mas considere o endereço de 16 bits e comando cada um como um valor de 16 bits e não como valor normal de 8 bits e valor invertido de 8 bits.//#define USE_FAST_PROTOCOL // Use o protocolo FAST em vez de NEC / ONKYO#include "TinyIRReceiver.hpp"void setup() { initPCIInterruptForTinyReceiver(); // Habilita a geração de interrupção na mudança do sinal de entrada IR}void loop() { if (TinyReceiverDecode()) { printTinyReceiverResultMinimal(&Serial); } // Não é necessário currículo() :-)}
#include "TinyIRSender.hpp"void setup() { sendNEC(3, 0, 11, 2); // Envia o endereço 0 e o comando 11 no pino 3 com 2 repetições.}void loop() {}
Outro pequeno receptor e remetente que suporta mais protocolos pode ser encontrado aqui.
O protocolo FAST é um protocolo JVC modificado proprietário sem endereço, com paridade e com cabeçalho mais curto . Destina-se a ter uma resposta rápida ao evento que enviou o quadro do protocolo para outra placa. O FAST leva 21 ms para ser enviado e é enviado em um período de 50 ms . Possui paridade total de 8 bits para detecção de erros.
O tempo de bits é como JVC
O cabeçalho é mais curto, 3.156 µs vs. 12.500 µs
Sem endereço e dados de 16 bits, interpretados como comando de 8 bits e comando invertido de 8 bits, levando a um comprimento de protocolo fixo de (6 + (16 * 3) + 1) * 526 = 55 * 526 = 28.930 microssegundos ou 29 ms.
As repetições são enviadas como quadros completos, mas em um período de 50 ms/com distância de 21 ms.
#define IR_SEND_PIN 3#include <IRremote.hpp>void setup() { sendFAST(11, 2); // Envia o comando 11 no pino 3 com 2 repetições.}void loop() {}
#define USE_FAST_PROTOCOL // Usa o protocolo FAST. Sem endereço e dados de 16 bits, interpretados como comando de 8 bits e comando invertido de 8 bits#include "TinyIRSender.hpp"void setup() { sendFAST(3, 11, 2); // Envia o comando 11 no pino 3 com 2 repetições.}void loop() {}
O protocolo FAST pode ser recebido por IRremote e TinyIRReceiver.
O intervalo de amostragem do receptor de 50 µs é gerado por um temporizador. Em muitas placas, esse deve ser um cronômetro de hardware. Em algumas placas em que um cronômetro de software está disponível, o cronômetro de software é usado.
Esteja ciente de que o cronômetro de hardware usado para receber não deve ser usado para analogWrite()
.
Especialmente o controle do motor geralmente usa a função analogWrite()
e, portanto, interrompe o recebimento se usado nos pinos indicado aqui.
Na UNO e em outras placas AVR, o temporizador do receptor é o mesmo que o timer de tom. Assim, o recebimento parará após um comando tone()
. Veja o Exemplo de Recebido como lidar com isso, ou seja, como usar IrReceiver.restartTimer()
.
O sinalizador IRDATA_FLAGS_WAS_OVERFLOW
é definido, se RAW_BUFFER_LENGTH
for muito pequeno para todas as marcas e espaços do protocolo. Isso pode acontecer em quadros de protocolo longo, como os do ar condicionado. Isso também pode acontecer, se RECORD_GAP_MICROS
for menor que a lacuna real entre um quadro e o quadro de repetição, interpretando assim como um quadro consecutivo. O melhor é despejar o tempo então, para ver qual motivo se mantém.
O Irmote não funcionará corretamente quando você usar neopixels (também conhecidos como WS2811/WS2812/WS2812B) ou outras bibliotecas que bloqueiam interrupções por mais tempo (> 50 µs).
Se você usa o Adafruit Neopixel Lib ou as interrupções, as interrupções são desativadas em muitas CPUs de extremidade inferior, como os Arduinos básicos por mais de 50 µs. Por sua vez, isso impede que o manipulador de interrupção do IR funcione quando precisar. Veja também este vídeo.
Uma solução alternativa é esperar que o receptor de IR fique ocioso antes de enviar os dados neopixels com if (IrReceiver.isIdle()) { strip.show();}
.
Isso impede que pelo menos quebre uma transmissão de IR em execução e dependendo da taxa de atualização do neopixel - pode funcionar muito bem.
Existem outras soluções para isso em processadores mais poderosos, consulte esta página de Marc Merlin
Outra biblioteca está trabalhando/compilando apenas se você desativar a linha IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);
.
Isso geralmente se deve aos conflitos de recursos do timer com a outra biblioteca. Por favor, veja abaixo.
Esta biblioteca suporta apenas um receptor de infravermelho e um objeto de remetente de IR (IRRECV e IRSEND) por CPU.
No entanto, como o envio é uma tarefa em série, você pode usar setSendPin()
para alternar o pino para enviar, imitando assim o remetente múltiplo.
O receptor usa uma função acionada pelo timer especial, que lê o valor do sinal de IR digital de um pino a cada 50 µs.
Portanto, vários receptores de IR só podem ser usados conectando os pinos de saída de vários receptores de IR. Os módulos do receptor de IR usam internamente um transistor NPN como dispositivo de saída com apenas um resistor de 30k ao VCC. Este é basicamente um "colecionador aberto" e permite que vários pinos de saída sejam conectados a um pino de entrada do Arduino.
No entanto, lembre -se de que qualquer sinal fraco / perturbado de um dos receptores também interferirá em um bom sinal de outro receptor.
A melhor maneira de aumentar o poder de infravermelho por livre é usar 2 ou 3 diodos IR em série. Um diodo requer 1,2 volt a 20 mA ou 1,5 volts a 100 mA para que você possa fornecer até 3 diodos com uma saída de 5 volts.
Para alimentar 2 diodos com 1,2 V e 20 mA e uma fonte de 5 V, defina o resistor como: (5 V - 2,4 V) -> 2,6 V / 20 mA = 130 Ω .
Para 3 diodos, requer 1,4 V / 20 mA = 70 Ω .
A corrente real pode ser menor devido à perda no pino AVR . Por exemplo, 0,3 V a 20 Ma.
Se você não precisar mais de 20 Ma, não há necessidade de usar um transistor externo (pelo menos para chips AVR).
No meu Arduino Nanos, eu sempre uso um resistor da série de 100 Ω e um LED IR?
Para receber, a frequência mínima de relógio da CPU é de 4 MHz , uma vez que o ISR do timer de 50 µs (rotina de serviço de interrupção) leva cerca de 12 µs em um atmga de 16 MHz.
O TinyReceiver, que não requer votação, funciona com 1 MHz.
Para envio, o software padrão gerado pelo PWM tem problemas no AVR em execução com 8 MHz . A frequência PWM é de cerca de 30 em vez de 38 kHz e RC6 não é confiável. Você pode alternar para a geração PWM do timer por #define SEND_PWM_BY_TIMER
.
O decodificador do protocolo Bang & Olufsen não é ativado por padrão, ou seja, se nenhum protocolo for ativado explicitamente por #Define DECODE_<XYZ>
. Ele deve sempre ser ativado explicitamente por #define DECODE_BEO
. Isso ocorre porque possui uma frequência de transmissão de IR de 455 kHz e, portanto, requer um hardware receptor diferente (TSOP7000).
E porque a geração de um sinal PWM de 455 kHz é atualmente implementado apenas para SEND_PWM_BY_TIMER
, o envio só funciona se SEND_PWM_BY_TIMER
ou USE_NO_SEND_PWM
for definido.
Para mais informações, consulte ir_bangolufsen.hpp.
Os exemplos estão disponíveis em Arquivo> Exemplos> Exemplos de bibliotecas personalizadas / Irremote.
Para se ajustar aos exemplos ao flash de 8k de Attiny85 e Attiny88, a biblioteca Arduino Attinyserialout é necessária para as CPUs.
Veja também o DroneBot Workshop Simplereceiver e SimpleSender.
Os exemplos simples e simples e simplesender são um bom ponto de partida. Um exemplo simples pode ser testado online com o Wokwi.
O SimpleReCeiverForHashCodes usa apenas o decodificador de hash. Ele converte todos os quadros de IR com mais de 6 em um código de hash de 32 bits, permitindo o recebimento de protocolos desconhecidos.
Veja: http://www.righto.com/2010/01/using-arbitrary-roemotes-with-ardeuino.html
Se o tamanho do código ou o uso do timer for importante, observe esses exemplos.
O exemplo do TinyReceiver usa a biblioteca TinyirCeaiver , que só pode receber protocolos NEC, NEC, Onkyo e FAST, mas não requer nenhum cronômetro . Eles usam a interrupção da mudança de pinos na decodificação da mosca, que é o motivo da escolha do protocolo restrito.
O TinyReceiver pode ser testado online com o Wokwi.
O exemplo de Tinysender usa a Biblioteca Tinyirsender , que só pode enviar protocolos NEC, Onkyo e Fast .
Ele envia códigos de protocolo NEC em formato padrão com endereço de 8 bits e comando de 8 bits, como no exemplo simpleSender. Ele tem opções para enviar usando protocolos NEC, Onkyo e Fast estendidos. Salva a memória do programa 780 bytes e 26 bytes RAM em comparação com o SimpleSender, o que faz o mesmo, mas usa a biblioteca Irmote (e, portanto, é muito mais flexível).
Se o protocolo não for necessário e o tamanho do código é importante, veja este exemplo.
O recebido recebe todos os protocolos e gera um bipe com a função Arduino Tone () em cada pacote recebido.
Pressione há muito tempo um botão IR (recebimento de várias repetições para um comando) é detectado.
AllProtocolsonlcd exibe adicionalmente o resultado curto em um LCD 1602 . O LCD pode ser conectado paralelo ou serial (I2C).
Ao conectar o pino de depuração ao solo, você pode forçar a impressão dos valores brutos para cada quadro. O número de pinos do pino de depuração é impresso durante a configuração, porque depende do tipo de conexão LCD.
Este exemplo também serve como um exemplo de como usar o Irremote e o Tone () juntos .
Recebe todos os protocolos e despeja o sinal recebido em diferentes sabores, incluindo o formato Pronto. Como a impressão leva muito tempo, os sinais de repetição podem ser ignorados ou interpretados como desconhecidos.
Envia todos os protocolos disponíveis pelo menos uma vez.
Demonstra receber o envio .
Gravar e reproduzir o sinal de IR recebeu pela última vez no botão Pressione. Os quadros de IR de protocolos conhecidos são enviados pelo codificador de protocolo apropriado. Os quadros de protocolo UNKNOWN
são armazenados como dados brutos e enviados com sendRaw()
.
Tente decodificar cada quadro de IR com o decodificador universal de largura de distância, armazene os dados e envie -os no botão Pressione com sendPulseDistanceWidthFromArray()
.
Se a RAM não for superior a 2k, o decodificador aceita apenas durações de marca ou espaço até 2500 microssegundos para economizar espaço na RAM, caso contrário, aceita durações em até 10 ms.
O armazenamento de dados para o protocolo de largura de distância requer 17 bytes. O exemplo do RECEVEANDANDSN requer 16 bytes para dados conhecidos de protocolo e 37 bytes para dados brutos do protocolo EGNEC.
Serve como um expansor de macro remoto IR. Recebe o protocolo Samsung32 e, ao receber um quadro de entrada especificado, ele envia vários quadros Samsung32 com atrasos apropriados no meio. Isso serve como uma emulação de chave Netflix para minha antiga TV Samsung H5273.
Estrutura para chamar diferentes funções do seu programa para diferentes códigos de IR.
Controle um relé (conectado a um pino de saída) com o seu controle remoto.
Exemplo para uma classe definida pelo usuário, que usa a classe IRRECV da Irremote.
Exemplo para enviar códigos IR de ar condicionado LG controlados por entrada serial.
Ao apenas usar a função bool Aircondition_LG::sendCommandAndParameter(char aCommand, int aParameter)
você pode controlar o ar condicionado por qualquer outra fonte de comando.
O arquivo ACLG.H contém a documentação de comando do protocolo IR do ar condicionado LG. Com base na engenharia reversa do controle remoto LG AKB73315611.
O IRECEIVERTIMINGANALISTILE pode ser testado on -line com o WOKWI Clique no receptor enquanto a simulação estiver em execução para especificar códigos IR individuais.
Exemplo para receber e enviar o protocolo AEG / Elektrolux HOB2Hood.
Este exemplo analisa o sinal fornecido pelo seu módulo de receptor de IR. Os valores podem ser usados para determinar a estabilidade do sinal recebido, bem como uma dica para determinar o protocolo.
Ele também calcula o valor de MARK_EXCESS_MICROS
, que é a extensão da duração da marca (pulso) introduzida pelo módulo do receptor de IR.
Pode ser testado online com Wokwi. Clique no receptor enquanto a simulação estiver em execução para especificar códigos individuais da NEC IR.
Recebeemo + sendDemo em um programa. Demonstra receber o envio . Aqui você vê o atraso da saída do receptor (azul) da entrada do diodo IR (amarelo).
Receptor simples
Alternância simples por chave IR 5
TinyReceiver
RECEVERTIMINGANALIAL
Receptor com saída de saída e interruptor LCD
Este exemplo da Biblioteca Arduino PWMMOTORCONTROL controla as funções básicas de um carro de robô usando a Biblioteca Irmote.
Ele controla 2 canais de motor PWM, 2 motores em cada canal.
Aqui você pode encontrar o Instructable para montagem e código do carro.
IR_ROBOTCAR COM TL1838 IR RECEITOR conectado à placa de expansão.
Não abra um problema sem primeiro testar alguns dos exemplos!
Se você tiver um problema, publique o MCVE (Exemplo Verificável Minimalista) mostrando esse problema. Minha experiência é que, na maioria das vezes, você encontrará o problema ao criar esse MCVE?
Use blocos de código; Isso nos ajuda a ajudá -lo quando podemos ler seu código!
Para personalizar a biblioteca para requisitos diferentes, existem algumas opções / macros de compilação disponíveis.
Essas macros devem ser definidas em seu programa antes da linha #include <IRremote.hpp>
para entrar em vigor.
Modifique -os ativando / desativando -os ou altere os valores se aplicável.
Nome | Valor padrão | Descrição |
---|---|---|
RAW_BUFFER_LENGTH | 200 | Tamanho do buffer da entrada bruta UINT16_T Buffer. Deve ser uniforme! Se for muito pequeno, o sinalizador de transbordamento será definido. 100 é suficiente para protocolos regulares de até 48 bits, mas para a maioria dos protocolos de ar condicionado é necessário um valor de até 750. Use o exemplo do Recebida para encontrar o menor valor para seus requisitos. Um valor de 200 requer 200 bytes RAM. |
EXCLUDE_UNIVERSAL_PROTOCOLS | desabilitado | Exclui o decodificador universal para protocolos de largura de distância do pulso e decodificador (decodificador especial para todos os protocolos) de decode() . Economiza até 1000 bytes da memória do programa. |
DECODE_<Protocol name> | todos | Seleção de protocolo individual a ser decodificado. Você pode especificar vários protocolos. Veja aqui |
DECODE_STRICT_CHECKS | desabilitado | Verifique as características adicionais necessárias do tempo de protocolo, como o comprimento da marca para obter um protocolo de marca constante, onde o comprimento do espaço determina o valor do bit. Requer até 194 bytes adicionais de memória do programa. |
IR_REMOTE_DISABLE_RECEIVE_COMPLETE_CALLBACK | desabilitado | Economiza até 60 bytes de memória do programa e 2 bytes RAM. |
MARK_EXCESS_MICROS | 20 | Mark_excess_micros é subtraído de todas as marcas e adicionado a todos os espaços antes da decodificação, para compensar a formação de sinal de diferentes módulos de receptor de IR. |
RECORD_GAP_MICROS | 5.000 | Gap mínimo entre transmissões de IR, para detectar o final de um protocolo. Deve ser maior do que qualquer espaço de um protocolo, por exemplo, o espaço do cabeçalho da NEC de 4500 µs. Deve ser menor do que qualquer lacuna entre um comando e uma repetição; Por exemplo, a diferença de retransmissão para a Sony é de cerca de 24 ms. Lembre -se de que este é o atraso entre o final do comando recebido e o início da decodificação. |
DISTANCE_WIDTH_DECODER_DURATION_ARRAY_SIZE | 50 se ram <= 2k, else 200 | Um valor de 200 permite decodificar durações de marca ou espaço até 10 ms. |
IR_INPUT_IS_ACTIVE_HIGH | desabilitado | Habilite -o se você usar um receptor de RF, que possui um sinal de alta saída ativo. |
IR_SEND_PIN | desabilitado | Se especificado, reduz o tamanho do programa e melhora o tempo de envio para AVR. Se você deseja usar uma variável para especificar o pino de envio, por exemplo, com setSendPin(uint8_t aSendPinNumber) , você não deve usar / desativar essa macro em sua fonte. |
SEND_PWM_BY_TIMER | desabilitado | Desative a geração do PWM do transportador em software e use o hardware PWM (por timer). Tem a vantagem de uma geração PWM mais exata, especialmente o cyc de serviço
Expandir
Informações adicionais
Aplicativos Relacionados
Recomendado para você
Informações Relacionadas
Todos
|