Amigos, boa tarde!!

Estou enfrentando dificuldades com o meu código. Alguém poderia me ajudar?

Quando eu declaro o objeto "lcd" (<LiquidCrystal_I2C lcd(0x3F,16,2)>) está bloqueando todo o resto do código.

Meu código é a monitorização via web de sensores de temperatura, umidade e luminosidade.

Quando eu declaro e coloco a inicialização e print do lcd, ele não faz o que tem que ser feito nos sensores e trava, literalmente.

Incrível é que apenas declarando o lcd, ele já bloqueia tudo.

Segue meu código:

18.05.2021.ino

Exibições: 135

Responder esta

Respostas a este tópico

Boa tarde IT, (se não gosta que te chame pelas iniciais, avise),

qual solução está usando, UNO, mini, ESPxxx, etc?

Vc tem certeza que seu LCD I2C tem este endereço?

Qual biblioteca I2C está usando?

RV mineirin

Fique a vontade!!

UNO

boa noite Igor.

      Aparentemente, olhando seu código, parece ser um problema de falta de RAM, especificamente no tempo de execução do código, ou seja, no momento de alocar variáveis quando o código está executando.

      Isto ocorre porque vc está usando recursos que consomem RAM em quantidade considerável para um Arduino UNO. Veja o resultado quando seu código original é compilado:

(clique na figura para "zoom")

      Mesmo assim existe uma chance de que alguma otimização possa resolver seu problema, pelo menos no atual estágio do seu código.  Quando esta otimização é feita, veja o resultado do uso de RAM:

(clique na figura para "zoom")

      A otimização em questão se refere a não usar RAM para a alocação de "C strings". Isto pode ser feita em alguns pontos do seu código. Veja alguns exemplos para seu código:

      onde está:  Serial.println("Inicializando cartao MicroSD...");

      substitua por:  Serial.println( F("Inicializando cartao MicroSD...") );

--------------------------------------------

      onde está:   client.println("HTTP/1.1 200 OK");

      substitua por:   client.println( F("HTTP/1.1 200 OK") );

--------------------------------------------

      onde está:  if (!SD.exists("index.htm") )

  

      substitua por:  if (!SD.exists( F("index.htm") ) )

--------------------------------------------

      onde está:  novoCliente.println("%");

      substitua por:  novoCliente.println('%');

--------------------------------------------

      Mas veja que nem em todo ponto isto pode ser feito. Por exemplo:

      onde está:   if (StrContains(HTTP_req, "ajax_LerDados"))

      não é possível aplicar a otimização, por a função "StrContains" é uma função "primitiva" que não tem um overload  que permita o uso da Macro "F()". Mas isto é possível de ser feito de outra forma (criando uma função intermediária), e é bem simples, caso seja necessário.

      Importante:  seu Sistema está bem próximo ao limite de Memória para um Arduino UNO.  Então se vc pretende em algum momento posterior aumentar a funcionalidade do seu código, aconselho que vc mude a placa base. Caso o custo não seja uma limitante para vc, o caminho mais simples seria usar o Arduino Mega, onde vc não terá estes limitantes de Memória.  Mas se na sua aplicação vc tiver WiFi  disponível,  o melhor seria migrar para um ESP32 ou ESP8266,  pois o custo seria bem mais baixo que o Mega, e teria Memória suficiente para sua aplicação.

      O seu código original, com as otimizações, está aqui:   "ajuda_I2C_LCD_01.zip"

      Espero ter ajudado.

      Abrçs,

      Elcids

Elcids, boa noite!

Eu não tenho nem palavras para agradecê-lo!

Realmente, o problema estava sendo memória... E eu desconhecia esta Macro "F()".

Obrigado pelo tempo dedicado nesta otimização!!

Você é FERA!

Muito obrigado

Igor, bom dia!

Realmente o Elcids é o cara!


Além da macro F(), separei outras dicas para economizar memória no UNO que podem te ajudar:
https://josecintra.com/blog/arduino-e-otimizacao-da-memoria/

Mas considere usar o ESP32. Não tem comparação...

Boa tarde,

Considere usar o Raspberry Pico. Não tem comparação....

Brincadeira, amigos.

Abraços

Gustavo

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço