Ir para conteúdo
  • Cadastre-se

Acender cinco Ledes com um botão usando PIC

Avalie este tópico:


Posts em destaque

@dindobel, Poderia criar uma variável e a cada vez que o botão fosse pressionado, ela seria incrementada.

Por exemplo:

int a=0

if(input_state(BOTAO))
{
a=a+1
}

 

Para controlar os leds com essa variável, ficaria assim:

If (a==1)
{
output high (led1);
}

If (a==2)
{
output low (led1)
output high (led2)
}

 

Antes destes comandos, deverá zerar a variável e todas as saídas.

 

Essa é uma forma de controlar passo a passo a sequência dos leds.

Claro que as sintaxes precisam ser adaptadas para o programa que está usando.

 

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

Tenta isso

obs: leds no portB

 

#include <16F628A.h>

 

//Configuracao FUSES

#FUSES NOWDT

#FUSES INTRC_IO

#FUSES NOPUT

#FUSES NOPROTECT

#FUSES NOBROWNOUT

#FUSES NOMCLR

#FUSES NOLVP

#FUSES NOCPD

 

//Definicoes portas

#define BOTAO PIN_A3

//Leds portB e botão portA

#define PINO_LED1 PIN_B0

#define PINO_LED2 PIN_B1

#define PINO_LED3 PIN_B2

#define PINO_LED4 PIN_B3

#define PINO_LED5 PIN_B4

 

//Define clock

#use delay(clock=4000000)

 

void main()

{

int status=1;

output_b(0b00000001);  // acende led1 e desliga os outros

while(1)

    {

    //Verifica se o botao foi pressionado

    if(input_state(BOTAO) == 0)

        {

            if (status == 32) // reicinia o processo

              {

                status = 1;

              }

            output_b(status);                               

            status = status*2;

        }

    }

}

Link para o comentário
Compartilhar em outros sites

@dindobel, Não sei em qual exemplo tirou a base para fazer o seu, mas se foi no exemplo que mostrei, tente inserir um pequeno tempo entre o acionamento do botão (debounce).

No exemplo abaixo, esse tempo é de 1 segundo (1000 mili-segundos).

 

int a=0

if(input_state(BOTAO))
{
delay_ms(1000);
  {
     if(input_state(BOTAO))
     a=a+1
     delay_ms(1000);
  }
}

 

Use resistores ligados entre a saída do PIC e o terra (resistores pull-down).

Link para o comentário
Compartilhar em outros sites

testado e funcionando dindobel

 

#include <16F628A.h>

 

//Configuracao FUSES

#FUSES NOWDT

#FUSES INTRC_IO

#FUSES NOPUT

#FUSES NOPROTECT

#FUSES NOBROWNOUT

#FUSES NOMCLR

#FUSES NOLVP

#FUSES NOCPD

 

//Definicoes portas

#define BOTAO PIN_A3

//Leds portB e botão portA

#define PINO_LED1 PIN_B0

#define PINO_LED2 PIN_B1

#define PINO_LED3 PIN_B2

#define PINO_LED4 PIN_B3

#define PINO_LED5 PIN_B4

 

//Define clock

#use delay(clock=4000000)

 

void main()

{

int status=1;

output_b(0b00000001);  // acende led1 e desliga os outros

while(1)

    {

    //Verifica se o botao foi pressionado

    if(input_state(BOTAO) == 1)

        {

            if (status == 32) // reicinia o processo

              {

                status = 1;

              }

            output_b(status);                               

            status = status*2;

            delay_ms(500);

        }

    }

}

5957aa85da9d6_Sem_ttulo.jpg.36073bd5de524acb5d8d88049410de5c.jpg

Link para o comentário
Compartilhar em outros sites

Participe agora da conversa!

Você pode postar agora e se cadastrar mais tarde. Se você tiver uma conta, faça login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Restaurar formatação

  Apenas 75 emoticons máximos são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir apenas como um link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Você não pode colar imagens diretamente. Envie ou insira imagens do URL.

SOBRE O ELETRÔNICABR

EletrônicaBR é o melhor fórum técnico online, temos o maior e mais atualizado acervo de Esquemas, Bios e Firmwares da internet. Através de nosso sistema de créditos, usuários participativos têm acesso totalmente gratuito. Os melhores técnicos do mundo estão aqui!
Técnico sem o EletrônicaBR não é um técnico completo! Leia Mais...
×
×
  • Criar Novo...