Prezados.

Mais uma vez, estou aqui para pedir socorro. Adquiri um anemômetro e um pluviômetro de uma empresa que curiosamente me enviou dois programas separados. Em um dos programas esta o o anemômetro que tem a função de medir velocidade e direção do vento. Depois de alguns ajustes consegui resultados satisfatórios. Parti então para o pluviômetro que mede o acumulado de chuva através de uma báscula. Novamente, após ajustes tudo funcionou corretamente em um segundo programa. Seguindo o raciocínio, basta agora juntar os dois sketchs e pronto, tudo estaria resolvido. Só que não isso que aconteceu... As variáveis do anemômetro continuaram funcionando, mas as do pluviômetro não funcionam. Obviamente que não colei um abaixo de outro, fui pegando do início, concatenando as declarações, depois o setup e por fim o loop, mas não adiantou nada.... Acredito que o problema seja as interrupções, removi os "delay" tentei ajustar com "millis" mas não sei onde estou errando.

Vou anexar os dois código que funcionam separadamente aqui e se alguém quiser e tiver uma ideia de como juntar eu já agradeço antecipadamente.

Sketch Pluviometro:  Pluviometro_0.ino

Sketch Anemometro: Anem_WS_0.ino

A coisa não vai parar por aqui, pois tenho que juntar tudo isso a um outro sketch que já tenho funcionando com mais cinco sensores que estão funcionando, ai meu Deus.....

Obrigado a todos,
César.

Exibições: 496

Responder esta

Respostas a este tópico

Olá Cesar,

Para juntar tudo em um único loop(), é importante organizar todas as tarefas executadas nos vários loop() em uma "time line", ou seja, o que acontece após o que e com quais intervalos / eventos assíncronos. Isso é trabalhoso pois se transforma em um quebra-cabeças (e uma dor de cabeça).

Para resolver de forma rápida e simples a junção de tudo (incluindo seus outros 5 sketches) a solução é usar o Free RTOS com múltiplas tarefas gerenciadas cada uma no seu tempo. Assim não precisará mais se preocupar com os vários delay().

Leia estes dois artigos que lhe ajudarão a entender e a aplicar o Free RTOS no UNO:

https://www.embarcados.com.br/elementos-de-rtos-no-arduino/

https://www.filipeflop.com/blog/freertos-para-arduino/

Boa Sorte.

Oi Rodrigo.

Vou tentar entender e aplicar essa solução.
Obrigado por responder.

César.

1- Blibliotécas               ( #include )

2- Definições                ( #define  -- normalmente ligado a pinos)

3- criação de variáveis   (bool, byte, int, long, etc.. etc.. )

4- eventuais funções     (ex: void testando()  ou "N funcao()" )

5- setup                       ( void setup() )

6- eventuais funções     (ex: void testando_2() )

7- loop                        ( void loop() )

8- funções bases           (ex: void testando() )

vamos fazer um ctrl c/v.

código:

item 1 do código 1

item 1 do código 2

item 2 do código 1 (verifique se não existe conflito)

item 2 do código 2 (verifique se não existe conflito)

item 3 do código 1

item 3 do código 2

void setup(){

Serial.begin(9600);

setup_codigo1();   // remova o serial.begin

setup_codigo2();   // remova o serial.begin

}

void loop(){

loop_codigo1(); 

loop_codigo2(); 

}

"ctrl V" das demais funções.

"Obviamente que não colei um abaixo de outro"

Em estruturas simples, costuma resolver.

obs- a sugestão do Rodrigo Corbera é mais inteligente que a minha.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço