Bom dia pessoal, estou usando um arduíno mega para uma aplicação e meu código está bem grande. Passa das 2000 linhas.

Percebi que o tempo de resposta dos botões de pulso do arduino aumentaram bastante sendo uns 2 segundos para começar a incrementar e 2 segundos para parar de incrementar, aproximadamente.

Penso que pode ter a ver com o tamanho do código, já queno clp lê o todo o código e volta ao começo para ler denovo sucessivamente.

Se for assim eu criando livrarias com partes do código reduzindo o código principal deixariam o arduíno rodando mais liso? Ou teria outro motivo?

Estou usando como periféricos um rtc e comunicação com meu PC para o software da tela nextion.

Exibições: 332

Responder esta

Respostas a este tópico

Bom dia, 

Você aperta o botão e depois de 2 segundos muda o estado?

Deve ter algum erro no programa. 

Envie o programa e o diagrama da montagem. 

Olá João Carlos!

Uma dúvida: Qual a função do RTC no seu projeto? Como vc está usando o Nextion, e ele tem o seu próprio processador, então é possível programar no Nextion alguns tipos de timers e outras coisas.
Por exemplo: Mudar um texto na tela do Nextion através de  um botão pressionado na tela, Isso pode ser feito pelo próprio Nextion através de sua linguagem visual, o que iria poupar o Arduino e sua memória. 

Outra coisa:

Esse comportamento errático pode ser problema de memória, embora você esteja usando o MEGA.
Usar bibliotecas não vai aliviar provavelmente, pois na linkedição, as bibliotecas vão ser incluídas.

Para economizar memória no Arduino, existem algumas recomendações.
- Quando puder, não use variáveis globais.
- Verifique os tipos de dados das variáveis e escolha os que ocupam menos bytes. Por exemplo, para representar um pino, use "byte" ao invés de "int". Prefira "const" nesse caso.
- Verifique os comandos em que você envia constantes de caracteres. Em alguns casos, Você pode usar a macro F() que economiza muitos bytes preciosos
- Está usando usando "Serial.print" para debugar? Esses são devoradores de memória. Nesse caso use a macro F() ou comente esses comandos
- Tente alocar variáveis de array na memória Flash, que é maior. Use o modificador PROGMEM para isso

Veja aqui um artigo que explica a organização da memória do Arduino e apresenta várias dicas de otimização.

http://josecintra.com/blog/arduino-e-otimizacao-da-memoria/

Não sei sobre o projeto, mas, este problema pode está sendo causado pela forma como foi desenvolvido o código.


Eu costumo criar rotinas para implementar a leitura de botões e periféricos e chamo quando necessário no código principal.

Tente trabalhar criando rotinas e faça as chamadas dentro do loop apenas quando for necessário.

Tente otimizar o código, em 2k de linhas deve ter algo que possa ser otimizado.

A grande pergunta é o que o processador está fazendo que não responde o botão.

Possivelmente excesso de delay().

Um caminho seria vc colocar umas dicas pela serial do que ele está fazendo. Por ex:

Mande pela serial "S" no inicio de uma rotina de sensores, depois "s" ao final.

Mande "t" quando for ler o teclado, etc.

Assim vc tem uma ideia do que ele tem feito. 

Reveja os dalays().

Mande seu codigo se quiser uma análise mais profunda. Sem ele só é possivel chutar.

Obrigado pessoal, estarei verificando otimização inicialmente caso não consiga o resultado esperado damos sequencia a analise.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço