Ir ao conteúdo
  • Cadastre-se

Programação de PIC - Dúvida


cjsj

Posts recomendados

Oi pessoal sou novo aqui e preciso da ajuda de vocês para resolver um problema. Bem estou trabalhando em um projeto da facu que envolve programação de PIC mais especificamente o 16f628a. Não tenho conhecimento na área mas consegui fazer esse codigo. Explicando: Esse programa serve para acender ou apagar as luzes d 1 sala se não houver pessoas nela.quando uma pessoa passa pela porta ela interrompe o sinal de dois leds ir e dependendo da orndem em que eles foram interrompidos podemos identifica se alguem entrou ou saiu.

#include<16f628a.h>
#include<stdio.h>
#use delay(clock=4000000)
#fuses INTRC_IO,NOWDT,PUT,BROWNOUT,NOMCLR,NOLVP

//ENTRADA
#define LEDIN PIN_B1
#define LEDOUT PIN_B2

// SAIDA
#define LED1 PIN_A0
#define LED2 PIN_A1
#define RELE PIN_A2


main(){

int pessoas=0;
int ledUm;
int ledDois;

while(true){
output_high(LED1);
output_high(LED2);
ledDois=input(LEDOUT);
ledUm=input(LEDIN);

if(ledUm==1){
while(ledDois==0){
ledDois=input(LEDOUT);
}
if(ledUm==true && ledDois==1){
pessoas++;
}
ledUm=0;
ledDois=0;
}else if(ledDois==1 && pessoas>0){
while(ledUm!=1){
ledUm=input(LEDIN);
}
if(ledUm==1 && ledDois==1){
pessoas--;
}
ledUm=0;
ledDois=0;
}else if(ledDois==1 && pessoas==0){
while(ledUm!=1){
ledUm=input(LEDIN);
}
ledUm=0;
ledDois=0;
}
if(pessoas>0){
output_high(RELE);
}
else if(pessoas==0){
output_low(RELE);
}
delay_ms(100);

}

}

Por favor não sei o q pode estar errado nisso:wacko::confused:

Link para o comentário
Compartilhar em outros sites

Imaginando que os sensores estão muito próximos e o segundo será interrompido enquanto o primeiro ainda estiver interrompido.

Acredito que estejas utilizando algum tipo de sensor óptico. Então utilizei a lógica que imaginei que você estava utilizando (1-ativo(alguem se encontra no caminho) ).

Acredito que esta lógica funcionaria para o que quer, desde que o clock esteja de acordo.

Imaginando também que ao iniciar o programa, não haverá ninguem na sala.

Podes colocar um sensor de presença que enquanto estiver ativo não desligará a luz.

Não utilizo o CCS, então não garanto os comandos. Os define's são mais para dar uma noção. O programa como está não rodará.

#define sensor_1 input(PIN_xx)

#define sensor_2 input(PIN_x2)

#define rele_luz PIN_A2

int pessoas=0;

main()

{

while()

{

if(pessoas>0)

{

output_high(rele_luz);

}

if(pessoas==0)

{

output_low(rele_luz);

}

if (sensor_1==1 & sensor_2==0)

{

for(; ;)

{

if (sensor_2==1)

{

pessoas++;

break;

}

if (sensor_1==0)

{

break;

}

}

}

if (sensor_1==0 & sensor_2==1)

{

for(; ;)

{

if (sensor_1==1)

{

pessoas--;

break;

}

if (sensor_2==0)

{

break;

}

}

}

}

}

A parte em azul apenas liga ou desliga as luzes dependendo da variavel pessoas.

Caso o sensor 1 seja ativado e o 2 não, o laço for espera por uma mudança nos sensores: sensor 2 =1, a pessoa entrou, sensor 1 = 0, a pessoa voltou atrás(apenas uma proteção caso ative o primeiro e não chegue a ativar o segundo)

No segundo if "principal", funciona o mesmo, mas o inverso...ao sair.

Espero ajudar

Abraço

Link para o comentário
Compartilhar em outros sites

Imaginando que os sensores estão muito próximos e o segundo será interrompido enquanto o primeiro ainda estiver interrompido.

Acredito que estejas utilizando algum tipo de sensor óptico. Então utilizei a lógica que imaginei que você estava utilizando (1-ativo(alguem se encontra no caminho) ).

Acredito que esta lógica funcionaria para o que quer, desde que o clock esteja de acordo.

Imaginando também que ao iniciar o programa, não haverá ninguem na sala.

Podes colocar um sensor de presença que enquanto estiver ativo não desligará a luz.

Não utilizo o CCS, então não garanto os comandos. Os define's são mais para dar uma noção. O programa como está não rodará.

#define sensor_1 input(PIN_xx)

#define sensor_2 input(PIN_x2)

#define rele_luz PIN_A2

int pessoas=0;

main()

{

while()

{

if(pessoas>0)

{

output_high(rele_luz);

}

if(pessoas==0)

{

output_low(rele_luz);

}

if (sensor_1==1 & sensor_2==0)

{

for(; ;)

{

if (sensor_2==1)

{

pessoas++;

break;

}

if (sensor_1==0)

{

break;

}

}

}

if (sensor_1==0 & sensor_2==1)

{

for(; ;)

{

if (sensor_1==1)

{

pessoas--;

break;

}

if (sensor_2==0)

{

break;

}

}

}

}

}

A parte em azul apenas liga ou desliga as luzes dependendo da variavel pessoas.

Caso o sensor 1 seja ativado e o 2 não, o laço for espera por uma mudança nos sensores: sensor 2 =1, a pessoa entrou, sensor 1 = 0, a pessoa voltou atrás(apenas uma proteção caso ative o primeiro e não chegue a ativar o segundo)

No segundo if "principal", funciona o mesmo, mas o inverso...ao sair.

Espero ajudar

Abraço

valeu cara! fiz algumas adaptações e ta funcionando legal! Muito obrigado pela ajuda!:D

Abraços

Link para o comentário
Compartilhar em outros sites

Acredito que seria interessante colocares um sensor de presença, e o seguinte no código:

if (sensor_3==1)

{}

else{output_low(rele_luz);}

e também, sem relação ao sensor de presença, as seguintes linhas:

if(pessoas<0)

{

pessoas=0;

}

Pois imagine, se existem pesoas na sala ao ativar o circuito, pelo código antigo quando sairem todas, a luz apagaria, mas apenas ligaria quando entrar o numero de pessoas que saiu +1. Assim, quando sairem todas, na primeira que entrar ja liga. (Não corrige todos erros que ocorrem ao ligar o circuito com pessoas na sala, mas no momento que a sala esvaziar, o circuito passa a funcionar como deveria).

Abraço

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...