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.
Tags:
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
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
OBRIGADO Elcids;
Com certeza é um conceito que vou observar para os próximos projetos.
Att...
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por