Boa noite a todos,
Estou desenvolvendo um projeto e esse utiliza vários delay. Por conta disso, quando executo o programa fica demorando muito para realizar as ações programadas.
Para reduzir esse tempo, pensei em usar interrupções para evitar que fique muito delay no void loop().
Alguem saberia me dizer se é possivel reduzir esse tempo de outra maneira ?
Tags:
Olá Liliane. Tudo bem? ^^
Você já deduziu um dos caminhos certos: utilização das interrupções.
Realmente o uso de "delay" durante o código é um forte candidato à tornar o seu código "lento", uma vez que ele fica aguardando o tempo deste delay para que execute a próxima função.
A sacada principal é "estruturar" o seu código para que ele se torne rápido, e execute as funções dentro de um tempo programado, mas sem recorrer ao uso de delays. E para isto um forte candidato é usar as interrupções de TIMER.
No caso você iria programar o timer para um tempo fixo, e após "n" interrupções executar algo. Por exemplo: Uma interrupção de timer acontecendo à cada segundo, depois que você contar 60 interrupções você tem 1 minuto. E assim por diante.
Dicas: Dentro de uma interrupção fique o menor tempo possível.
Se precisar executar uma função com muitas instruções, faça o seu timer "sinalizar" através de uma variável, que ele precisa executar algo. E no programa dentro do "loop()" você deve colocar alguém que verifica este pedido e comece à executá-lo fora da interrupção.
Por isso a estrutura ou arquitetura do seu software é muito importante.
Para te auxiliar, aprenda os seguintes tópicos:
1) Interrupções;
2) Timers;
3) Função: millis();
4) Threads (no Arduino ele não é bem desenvolvido, mas te abrirá muitas idéias novas sobre otimização e aumento de performance no processamento);
Qualquer dúvida, explique o que pretende fazer no seu software para que eu ou outros garagistas possam te auxiliar no desenvolvimento de uma boa arquitetura.
Espero ter ajudado. ^^
T++.
Lembrei de um tópico antigo, onde não usei interrupções, mas sim "segmentei" o delay para poder fazer o programa não ficar "travado".
http://labdegaragem.com/forum/topics/como-fazer-o-arduino-parar-uma...
T++;
Ola Daniel, muito obrigado pela ajuda de novo
Estou estudando a interrupção de timer, mas queria saber outras opções
Esta me ajudando muito
Muito obrigado
Até +
O fodastico Ivan, fez essa lib que ajuda 100% em tudo
Ola Rogério, muito obrigado por me passar esse link
Me ajudou a ter novas idéias para implementar no projeto
Obrigada pela ajuda
Olá,
Vi as respostas de Daniel e do Rogério que forma fabulosas e creio que o uso combinado de threads e interrupções certamente fará o que deseja.
Ajudaria muito saber exatamente o que seria o seu problema para poder entender e dar a melhor opinião.
Muito obrigado,
'Eiju
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por