Postado 11 de Setembro de 2015 10 anos Olá ! Muito obrigado mesmo. Agora funcionou certinho. Um grande abraço para todos !
Postado 12 de Setembro de 2015 10 anos @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.
Postado 12 de Setembro de 2015 10 anos Autor Muito obrigado pelas dicas. Tentarei adaptar ao código e postarei o resultado. Abraço a todos.
Postado 21 de Setembro de 2015 10 anos 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; } } }
Postado 24 de Setembro de 2015 10 anos Autor Olá Amigo!! Muito obrigado pela dica, mas ta dando problema. O primeiro led inicia aceso, e quando aperto o botão todos os leds ficam piscando. Tentei ajustar o código, mas meus conhecimentos são bastante limitados na programação.
Postado 25 de Setembro de 2015 10 anos @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).
Postado 28 de Setembro de 2015 10 anos 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); } } }
Postado 29 de Setembro de 2015 10 anos Autor Olá ! Muito obrigado mesmo. Agora funcionou certinho. Um grande abraço para todos !
Postado 29 de Setembro de 2015 10 anos @dindobel, Para finalizar o tópico, é só editar a primeira mensagem do tópico e mudar o prefixo para RESOLVIDO E não esqueça de clicar no joinha de quem ajudou.
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.