(Linguagem c) Ativar um código imediatamente quando ativar um botão!

ae galera estou com um projeto de um semafaro com sensores(simulados por botões), e não to conseguindo fazer com que assim que for ativado um botão ele execute o codigo que eu mandar e pare o que esta fazendo,com o if ele espera os comandos acabar pra verificar os botões

OBS: Anexei o circuito que to simulando no proteus e o  código gerado no pic c, como também joguei o código logo abaixo.

Agradeço

Inaiê Alves

#include <16f877A.h>
#use delay(clock=4000000, RESTART_WDT)
#fuses xt,nowdt,noprotect,put,brownout,nolvp,nocpd,nowrt


//SEMAFARO 1

int verde1 = (pin_d0);
int amarelo1 = (pin_d1);
int vermelho1 = (pin_d2);

//SEMAFARO 2

int verde2 = (pin_d5);
int amarelo2 = (pin_d6);
int vermelho2 = (pin_d7);


output_low(verde1);
output_low(amarelo1);
output_low(vermelho1);
output_low(verde2);
output_low(amarelo2);
output_low(vermelho2);

void main () {


while(1) {


if ((input(pin_b1))&&(!input(pin_b2)))
{

output_high(amarelo1);
delay_ms(1000);
output_low(amarelo1);
delay_ms(1000);

}


if (((input(pin_b1))&&(input(pin_b2)))||((!input(pin_b1))&&(!input(pin_b2))))
{

output_high(verde1);
output_high(vermelho2);
delay_ms(10000);
output_low(verde1);
output_high(vermelho2);
output_high(amarelo1);
delay_ms(5000);
output_low(amarelo1);
output_high(vermelho1);
delay_ms(3000);
output_low(vermelho2);
output_high(verde2);
delay_ms(10000);
output_low(verde2);
output_high(amarelo2);
delay_ms(5000);
output_low(amarelo2);
output_high(vermelho2);
delay_ms(3000);
output_low(vermelho1);

}
}

}

Exibições: 2532

Anexos

Responder esta

Respostas a este tópico

Olá Inaiê Alves,

Voce vai ter que usar as interrupções externas do PIC para que o programa pare imediatamente e desvie para a função que deve ser executada quando o botão for acionado. Para tanto consulte o help do seu compilador sobre o uso das interupções e os pinos do PIC que podem executar as mesmas.

Abraço

Você teria um exemplo para ter uma ideia...Até agora num sei muito como vou fazer isso.

agradeço

Inaiê,

Você pode encontrar um bom tutorial sobre as interrupções externas do PIC16F877A usando o compilador da CCS aqui: http://www.denteazul.com.br/2011/06/tutorial-interrupcao-externa-pi...

Abraço.

pelo titulo e a apresentação parece ser um bom material...Vou ler aqui e posto noticias do meu progresso!

agradeço

li o artigo e achei bem fácil e didático...porém a ele continua a executar os comandos que ja esta executando quando ativo a interrompição...ou seja realiza o comando porem não deixa de realizar o outro

fiz algo errado?

agradeço

Não entendi bem o que voce quis dizer, mas de qualquer forma, se voce habilita a interrupção externa, quando o pino da interrupção for acionado, o programa vai ser desviado imediatamente para a rotina de interrupção, executando os comandos escritos nela e após o término vai retornar para o ponto de onde ele foi interrompido. É assim que funciona com qualquer tipo de interrupção.

Talvez voce esteja querendo que o programa pare de executar a tarefa anterior quando retornar da interrupção? Para isso, antes de retornar da interrupção, voce teria de carregar a variavel que está controlando o loop for ou while com um valor que forçe a saída do comando.

Abraço

Inaie,

O seu programa me parece confuso. O programa faz o seguinte: Não aperta nada ou aperta os dois entra no semaforo. Aperta só b1 entra no pisca. Porque os 2 botoes? Não dá pra deixar um semaforo direto e caso apertar B1 entra no pisca? Digo isso porque se você usar a Interrupcao externa quando apertar os 2 não vai pro semaforo, mas sim para a interrupção externa

iae guilherme 

vou explicar melhor...

esquece esse primeiro if ae

esses botões estão simulando dois sensores,se os dois sensores tiverem no mesmo nível logico o código não tem alterações.porém quando os sensores tiverem diferentes ele verifica o sensor que ta em nível alto,caso seja: o sensor 1 ele acende o amarelo do semafaro2. O sensor 2 ele acende o amarelo do semafaro1.

e segue seu funcionamento como um semafaro normal.

RESUMINDO: um semafaro que quando vem carro em uma via e não vem na outra via, ela ativa o sinal verde da via que vem carro e ativa  o sinal vermelho da via que não vem carro.

espero que tenha entendido, agradeço a atenção!

abraço

Refiz o programa e coloquei resistores de pulldown para mandar nivel logico 0 quando nada tiver acionado.

O programa ta comentado mas qualquer coisa pode perguntar

Anexos

Ae guilherme agradeço ae a colaboração...

nem vii ainda, mais já valeu paceiro!

vou olhar aqui e tentar ajustar as minhas exigências!

inaiêAlves

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço