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);
}
}
}
Tags:
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
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
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por