Bom dia galera!
Tô apanhando igual cachorro sem dono pra escrever um código aqui.
Preciso fazer um pisca pisca sem usar a função delay() que pisque rápido 2 vezes e depois uma pausa maior. Mais ou menos assim:
--------pisca------pisca-------pausa--------pisca------pisca-------pausa--------pisca------pisca-------pausa-----
300ms 300ms 1s 300ms 300ms 1s 300ms 300ms 1s
Eu consegui fazer com somente uma piscada.
Alguém consegue me ajudar?
Obrigado.
Tags:
Bom dia,
Antes que nada leia estas diretrizes do fórum por favor. https://labdegaragem.com/forum/topics/sugest-o-de-como-postar
Abs.
CK
Olá Rodrigo, tudo bem?
Antes de mais nada, recomendo remover seu código da postagem, pois a leitura é muito ruim.
Recomendo que você coloque seu código completo no pastebin (https://pastebin.com/) ou poste o .ino
Eu tenho 99% de certeza de onde está seu problema, mas preciso ver o código inteiro antes para ter certeza.
abraços.
Olá.
É realmente dificil entender seu codigo sem o restante...
É bastante confuso.
Tem alguns detalhes que podem estar te atrapalhando, vai ver a sua lógica está correta, arrumando isso funciona.
1) as variáveis locais funcionam apenas localmente. Se vc define "unsigned long inicio1" ela vai ter o valor preservado até o fechamento do colchete. Não serve para acumular dados entre uma entrada e outra do trecho. Para isso defina uma variável global ou pelo menos que esteja definida no inicio do loop();
2) Esse "!" para inverter o estado, uso de variáveis "=LOW", etc, pode funcionar, mas é "fora da cartilha". O manual não recomenda. Isso pq "LOW e HIGH" são palavras reservadas. Certamente tem um valor, em algum lugar tem um define disso, por isso funciona, mas pode ser uma armadilha. Digo: HIGH pode ser 1 ou pode ser 255 ou pode ser 65535, não sei, aih por ex se for 255 (0xff) e vc guarda em uma variável de 16 bits (meio que default) e dá um "!" o resultado fica 0xff00 e não o esperado 0x0000. Se lá na frente ele comparar o 0xff00 com LOW e LOW for 0 não vai dar certo. Enfim, medo, embora possa funcionar.
Recomendo vc pensar em um relógio, como ele funciona.
Usando apenas uma comparação chegue a um "tick" do relógio. Dependendo do tempo que vc precisa vc faz um, pode ser 1 segundo ou 0,1 segundo, vai depender de sua necessidade.
Aih com esse "tick" vc incrementa um contador.
Conforme incrementou vc liga ou desliga o led. Por ex: Em 0 vc desliga. Em 1 vc liga, em 2 vc liga, em 3 vc desliga em 8 vc liga, em 9 vc desliga e zera a contagem.
Vc pode fazer em uma linha com if() comparando o contador para todos os momentos "tick" em que a saída tem que ficar em HIGH, no "else" disso os LOW.
Outro if() para zerar a contagem.
Para melhor suporte siga a sugestão do colega Carlos kwiek
Obrigado pelas dicas Eduardo.
Qual seria o melhor tipo de variável para eu armazenar esse tipo de informação como estado de um led (aceso ou apagado)?
Obrigado.
Obrigado pelas dicas mestres!
Editei o post e anexei o .ino conforme sugeriram.
Valeu!
Seria algo assim?
Abs.
CK
Então acho que é isso:
Abs.
CK
Isso mesmo! :o)
Boa tarde ROCB, (se não gosta que te chame pelas iniciais, avise),
veja se este código ajuda a atender sua necessidade.
RV mineirin
Bom, os colegas já lhe enviaram os códigos acho que não tem sentido lhe enviar mais.
Boa sorte com seu projetos.
Abs.
CK
Segue anexado o código e o print do simulador Proteus
Creio ser bom para estudar se existe interesse.
Abs.
CK
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por