Boa tarde,

sou novo no fórum e nessa aventura com Arduino. A pouco comprei um kit que veio com a versão digital do livro Arduino básico de Michael McRoberts. No projeto n° 6 na pagina 74, o livro trabalha um projeto de Efeito sequencial de leds com controle da velocidade de alteração por um potenciômetro:

Entretanto, como bom "fuçador" que sou, resolvi substituir o potenciômetro por 2 botões ligados a 2 portas digitais que fariam a atualização da variável que controla a velocidade de mudança dos leds. O código está no arquivo em anexo. A montagem ficou assim:

  O problema é que o botão que diminui a velocidade do efeito (aumenta o valor da variável "intervalo") para de funcionar se aumentamos muito a velocidade do efeito. Minha dúvida é pq o botão para de funcionar. Tentei fazer um vídeo mas ficou muito grande para upload aqui.

Desde já agradeço a atenção de todos.

Exibições: 130

Anexos

Responder esta

Respostas a este tópico

Boa tarde FM,

primeiro quero parabeniza-lo por não postar o code na área de texto do seu tópico e pelas

informações claras sobre seu projeto.

Só aqui que ficou um pouco confuso, mas consegui entender.

""

 O problema é que o botão que diminui a velocidade do efeito (aumenta o valor da variável "intervalo") para de funcionar se aumentamos muito a velocidade do efeito. Minha dúvida é pq o botão para de funcionar. Tentei fazer um vídeo mas ficou muito grande para upload aqui.

""

Acho que o que ocorre com seu projeto é uma questão conceitual de programação x matemática.

Você está usando números inteiros em operação com números com casas decimais

nesta linha ,  intervalo = intervalo * 1.1;    

e nesta intervalo = intervalo * 0.9;

Na primeira o Arduíno vai resolver 1.1 como 1 somente,

e na segunda vai reconhecer como 0.9 com sendo 0.

Para operação com decimais, as variáveis precisam ser do tipo "float".

Vou corrigir seu sketch, depois você testa e conta o resultado pra gente.

Se ficar resolvido o problema faça assim:

escreva "[Resolvido]" no inicio do titulo
do tópico.    Ficando assim: [Resolvido] + Titulo.

RV

Anexos

Perfeito mineirin RV,

Obrigado pela atenção dispensada. Sempre fui meio cético com essa questão de fórum por achar que era só pra questões "mais avançadas". O problema foi resolvido... Bora estudar mais!!!!!!!!!!!!!!!

att...

Frederico Marques.

bom dia Frederico.

      O Rui acertou no alvo com precisão sobre seu problema. Também analisei seu código, e também cheguei à mesma conclusão.

      Ocorre que você está multiplicando seus intervalos por 1.1 e por 0.9, que são valores do tipo "float", ou seja, fracionários. Mas vc declarou sua variável "intervalo" como sendo do tipo inteira (inclusive sinalizada, o que não é adequado para seu controle). Enquanto o valor do "Intervalo" se mantém maior ou igual a 10, a alteração da mesma dentro do seu loop, funciona. Mas se ela diminui abaixo de 10, o fator de aumento de 10% que vc está aplicando a ela, não mais tem efeito. Por exemplo se ela chegou a 9, ao multiplicar por 1.1 (portanto aumentando em 10%), resultaria em 9.9, porém como o resultado é do tipo inteiro, o código compilado trucará este valor em 9 (pois nessa "truncagem" ele descarta a parte fracionária). Conclusão: fica em 9 e não sai mais disso quando se tenta aumentar o intervalo. E claro que a parte que diminui o intervalo não vai ajudar, já que ela só diminui o valor, que inclusive poderia chegar a zero, e neste caso também não sai mais do zero, pois qualquer número multiplicado por zero vai resultar no próprio zero.

      Em suma: fazendo o que o Rui sugeriu, vai resolver seu problema. Mas conceitualmente, ainda há um "bug" no seu código. Por que?  simplesmente porquê vc precisa colocar limites no valor que a variável "intervalo" assume.

     Alterei o código conforme o Rui sugeriu, e coloquei os limitadores de valor para o "intervalo" (a imposição destes limites, chama-se isto de "clipagem" - ou "clipping").

     Também fiz a simulação no Proteus, e está no anexo (junto com a biblioteca para o Arduino). Veja o circuito:

     Espero que tenha ajudado.

    Abrçs

    Elcids

Anexos

OBRIGADO Elcids;

Com certeza é um conceito que vou observar para os próximos projetos.

Att...

RSS

Destaques

Registre-se no
Lab de Garagem
Clicando aqui

Convide um
amigo para fazer
parte

curso gratis de arduino

© 2018   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço