Boa noite bom estou com um código de automação com controle de 7 relés e 4 Ar-Condicionado porem o código ficou com quase 40.000 bytes e meu Arduino Mega 2560 não compila por causa do tamanho inclusive eu precisava escrever mais algumas coisas no código mas não sei o que fazer para diminuir o tamanho dele já fiz o esquema de usar #define e até usei o client.print(F()); para reduzir mas não foi o suficiente alguém pode me ajudar com isso?

OBS: Separei alguns códigos em abas tambem.

Segue o Código:

Codigo_Automacao_Residencial_Completo.rar

Erro:

Exibições: 3303

Responder esta

Respostas a este tópico

Olá.

  O arquivo .rar chegou com 8kb e o 7zip não abriu ele. É só isso mesmo ?

  Mande em .zip, sempre, muito melhor por ser nativo no windows e no mac. Não precisando instalar "abridores" suspeitos.

  Adianto que seu problema é RAM. Tente usar variáveis menores.

  bit onde pode ser bit

  byte onde pode ser byte (ou char)

  Word onde pode ser word (ou int)

  

Bom eu fiz alguns teste comentando algumas coisas e descobri que o que come muita memória é os códigos RAW do IR mas da uma olhada ai para ver se da pra fazer alguma coisa, segue o código em ZIP.

Codigo_Automacao_Residencial_Completo.zip

Opa, agora abriu !

Mas não achei uma solução...

Vc colocou o F("") só em algumas strings, eu complementei colocando em todas e nada...

Coloquei:

const unsigned int PROGMEM irSignal[]

E nada. Isso teria que fazer toda a diferença.

Parece ser como um bug do compilador que gasta RAM pra fazer inicialização de constante.

Só o fato de cada constante estar dentro de um {} já deveria fazer o espaço ser alocado e desalocado mesmo em ram. Uma possibilidade seria não criar uma nova variável e sim usar uma global unica mas aih a sintaxe de inicialização {,,,} não funciona.

Em:

https://www.arduino.cc/reference/en/language/variables/utilities/pr...

Tem umas dicas inclusive de adicionar:

#include <avr/pgmspace.h>

Mas nada.

Pode ser que o uso de: strcpy_P() seja obrigatorio para baixar esses dados para uma area comum. Não tentei

Então mas o que eu analisei bem é que realmente o código em RAW consome muita memória RAM então eu eliminei os 3 Ar-Condicionado AR2,AR3 e AR4 para ver se liberava espaço no entanto liberou e muito porem quando vou adicionar o código RAW em " unsigned int irSignal[] = {580, 18008,...689};"  ele consome quase 500 bytes de RAM cada código e não tem como eu usar Códigos Hexadecimais por que não funciona os Hexas no AR.

Boa tarde VG,

ao invés de usar o RAW,  identifique o valor em HEX equivalente do comando

e use este valor HEX,  

Fazendo assim vc reduz drasticamente o espaço necessário.

RV

Boa Tarde Mineirin RV então eu tentei de todas as formas captar no controle o HEX mas não obtive sucesso quando alguns códigos captava eles não funcionavam então o RAW foi a única opção até agora que funcionou porém ele come muita memória o que é ruim.

Converta o uso da memória RAM em memória Flash.

O Arduino Mega tem 256 KB de memória Flash.

O sketch usa 35692 bytes (14%) de espaço de armazenamento para programas. O máximo são 253952 bytes.
Variáveis globais usam 9758 bytes (119%) de memória dinâmica, deixando -1566 bytes para variáveis locais. O máximo são 8192 bytes.
Memória insuficiente. Veja http://www.arduino.cc/en/Guide/Troubleshooting#sizepara dicas de como reduzir o tamanho do seu código.
Erro compilando para a placa Arduino/Genuino Mega or Mega 2560

Mas como faço para converter o tutorial do site não tem nada como exemplo.

VG, qual sketch vc est'a usando para capturar os códigos do IR?

RV

VG, eu uso este sketch para obter o HEX code dos CRs.

Ele usa a biblioteca " IRremote.h " , e a versão da minha biblioteca é a

1.0 mas neste site  tem a versão 2.2.3, e nesta versão nunca tesei este sketch.

http://github.com/shirriff/Arduino-IRremote,

RV

Anexos

RV Maravilha seu Leitor Funcionou perfeitamente com a TV depois vou testar no ar porem só na segunda que estou na loja mas a TV funcionou e o código que envia o HEX da propria IR remote não funcionou ai usei um outro código para enviar e deu certo.

Vou deixa o código para enviar o HEX para quem necessitar está aqui.

Código:

Receptor e Emissor IR VGRV

RV no caso do meu código eu quero trocar o  "unsigned int irSignal[] = {580, 18008,...689};"  pelo "(hash == 4105841032)" como eu posso estar fazendo eu tentei adicionar dentro mas da muito erro ai eu tiro uma coisa e da erro em outra se puder me dar essa ultima ajuda já fico muito mais agradecido e finalizo o projeto por aqui.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço