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.

Exibições: 151

Anexos

Responder esta

Respostas a este tópico

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

Seria algo conforme os pulsos abaixo:

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.

Pisca_sem_delay_V02.ino

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

Anexos

RSS

© 2021   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço