Tenho um AR condicionado Elgin, e na biblioteca IRremote só consegue ler o código crú (raw) do controle deste AR, a questão é a seguinte, como esse código crú que precisa ser armazenado  como array é gigantesco eu gostaria de achar uma solução para tal problema.

Eu pensei sozinho em duas coisas:
1- Ao invés de armazenar em uma array, simplesmente enviar esse código diretamente com o comando irsend.sendRaw, porém pelo que andei pesquisando, isto é impossível. Caso não seja, por favor me ajude!

2- Talvez alguem que também tenha tido o mesmo problema que eu saiba de alguma biblioteca mais simplificada... Eu tentei algumas bibliotecas aqui, mas sem sucesso!

E fico aberto a sugestões!

Estou usando uma placa arduino mega at2560, uso 4x IR TSAL-6200.

Código

<code>

#include <IRremote.h>

IRsend irsend;

void setup()
{

}

void loop() {
int khz = 38; // 38kHz carrier frequency for the NEC protocol

unsigned int irSignal[197] = {6050, 7350, 550, 1650, 500, 1650, 550, 1600, 500, 1650, 550, 1600, 550, 1600, 550, 1600, 550, 1650, 500, 600, 550, 550, 550, 500, 550, 550, 550, 550, 550, 550, 500, 600, 550, 500, 550, 1650, 550, 1600, 550, 1650, 500, 1650, 550, 1600, 500, 1650, 550, 1600, 550, 1600, 550, 600, 550, 500, 550, 550, 500, 600, 550, 500, 600, 550, 550, 550, 500, 550, 550, 1650, 550, 550, 500, 1650, 550, 1600, 550, 1600, 550, 1650, 500, 1650, 550, 1600, 500, 600, 550, 1600, 550, 550, 500, 600, 550, 550, 550, 550, 550, 550, 500, 550, 550, 1650, 550, 550, 500, 550, 550, 1600, 550, 1600, 550, 1650, 550, 1600, 500, 1650, 550, 600, 500, 1650, 550, 1600, 550, 550, 550, 550, 550, 550, 550, 550, 500, 550, 550, 1650, 550, 550, 500, 1650, 500, 1650, 500, 1650, 550, 550, 550, 1600, 500, 1600, 550, 600, 550, 1600, 500, 600, 600, 500, 550, 550, 500, 1650, 550, 550, 550, 550, 550, 550, 550, 1600, 550, 550, 550, 1600, 500, 600, 550, 1600, 550, 550, 500, 550, 550, 1650, 550, 550, 500, 1650, 550, 550, 500, 1650, 550, 550, 550, 1600, 550, 1600, 550, 7300, 550}; // UNKNOWN CDA7F485


irsend.sendRaw(irSignal, sizeof(irSignal) / sizeof(irSignal[0]), khz); //Note the approach used to automatically calculate the size of the array.

delay(5000); //In this example, the signal will be repeated every 5 seconds, approximately.
}
</code>

Exibições: 860

Responder esta

Respostas a este tópico

Bom dia HBS.

Abaixo segue o "seu" RAW decodificado.
Veja que são 96 bits identificados.


Este RAW identifica os tempos de LOW e HIGH da cadeia de pulsos do RC.

Inicialmente voce recebe um header de 6050 LOW e 7350 HIGH e em seguida os pulsos dos bits.


Os tempos de LOW podem variar de 450 até 650  e os de HIGH, para bit 0 de 450 até 650 e

de bit 1 de 1500 até 1700.

Voce pode guardar na memoria ao invés do valores do RAW, os valores Hexadecimais.


Neste caso que voce citou, ao inves de guardar aquele RAW enorme, guarde
somente 12 bytes FF 00 FF 00 BF 40 9F 60 BB 44 54 AB

Para que a tela do tópico não fique extenso colei só uma parte do RAW decodificado.

O RAW total está aqui: https://pastebin.com/xib0t85V

unsigned int irSignal[197] = FF 00 FF 00 BF 40 9F 60 BB 44 54 AB = 96 BITS
{
6050, 7350, Header

550, 1650, 1 F
500, 1650, 1
550, 1600, 1
500, 1650, 1

550, 1600, 1 F
550, 1600, 1
550, 1600, 1
550, 1650, 1

500, 600, 0 0
550, 550, 0
550, 500, 0
550, 550, 0

.............................

Rui

Impressionante! Eu tentei identificar os pulsos, mas eu estava considerando "550 = 0" e "1650 = 1", daí quando eu botava 2 códigos para analisar, ficava totalmente sem sentido... E isso que eu não estava considerando o Header kkkk.... Mas então Rui, eu fiquei em dúvida em como eu vou declarar esses bytes "FF 00 FF 00 BF 40 9F 60 BB 44 54 AB", tenho um sério problema no entendimento de arrays...

Como devo declarar esse FF por exemplo?
unsigned int [FF] = {550,1650,500,1650,550,1600,500,1650}; ?

Voce deve declara uma array bidimensional com os valores em Hexa, já que o header e end

é igual pra todos códigos do seu RC.

A primeira dimensão é a tecla do RC que voce numera de 1 até ..... N

A segunda são os valores hexa correspondente ao pressionar cada tecla

Por exemplo:

byte my2dArray[N][12]={ {FF, 00, FF, 00, BF, 40, 9F, 60, BB, 44, 54, AB},  {FC,2C,3F.....},........ };

xpto1 = my2dArray[0][0] ;

xpto1 será = FF .

xpto2 = my2dArray[0][1] ;

xpto2 será = 00

xpto3 = my2dArray[0][2] ;

xpto3 será = FF .

...............

Rui

 

Consegui entender claramente como funciona a questão de buscar os dados na array, porém só não entendi como devo declarar FF e BF e 00... Porque no meu código, eu não consigo mandar em hexadecimal...

"'FF' was not declared in this scope"

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço