Ir para conteúdo
Fórum Script Brasil
  • 0

Sensor de Presença


Henrique Neto

Pergunta

Bem estou fazendo como projeto da faculdade um sensor de presença , onde tem 2 sensores e quando alguém passar por esses dois sensores um led fica ativo, eu gostaria de adicionar nele o seguinte contar com quantos segundos as pessoas passam pelos dois sensores e mostrar na tela. E estou com duvida de como fazer isso.

Ai esta o meu codigo sobre o sensor de presenca se a contagem de tempo.

#include <stdio.h>
#include <math.h>
#include <windows.h>

#define DEVCpp

#ifdef DEVCpp
         #include <windows.h>
#endif
#ifdef TURBOCpp
         #include <dos.h>
#endif

void espera(long tempo){
    #ifdef DEVCpp
          Sleep(tempo);
    #endif
    #ifdef TURBOCpp
          delay(tempo);
    #endif
}

/* cria??o de um tipo, que ? um ponteiro para fun??o */

     typedef short _stdcall (*inpfuncPtr)(short portaddr);
     typedef void _stdcall (*oupfuncPtr)(short portaddr, short datum);

/* ponteiros para fun??es, mas que podem ser interpretadas como:
   (a) short inp32(short porta);
   (b) void oup32(short porta, short dado);
*/
     HINSTANCE hLib;
     inpfuncPtr inp32;
     oupfuncPtr oup32;

int iniciaBiblioteca(){
     /* Load the library */
     hLib = LoadLibrary("inpout32.dll");

     if (hLib == NULL) {
          printf("A biblioteca inpout32.dll não foi encontrada\n\n");
          return -1;
     }else {
           printf("Biblioteca inpout32.dll aberta com sucesso...\n\n");
           getchar();
           }

     /* get the address of the function */

     inp32 = (inpfuncPtr) GetProcAddress(hLib, "Inp32");

     if (inp32 == NULL) {
          printf("GetProcAddress for Inp32 Failed.\n");
          return -1;
     }

     oup32 = (oupfuncPtr) GetProcAddress(hLib, "Out32");

     if (oup32 == NULL) {
          printf("GetProcAddress for Oup32 Failed.\n");
          return -1;
     }  
     
     return 0;   
}     
int main(void)
{
     if (iniciaBiblioteca()==-1) return -1; // inicia e testa se falhou

     system("cls");
     int pessoas=0, entrando =0, saindo = 0, s1=0, s2=0, x,bit7,bit6,pe=0,ps=0;
     x=inp32(889); 
     bit7 = (x & 128);
     bit6 = (x & 64);
     while(bit7 == 128){
           s1 = s1+1;
           x = inp32(889);
           bit7 = x & 128;
           }
     while(bit6 ==0){
           s2 = s2+1;
           x=inp32(889); 
           bit6 = (x & 64);
           }
     if(s1 > s2) entrando=1;
     if((s2 == s1) and (saindo==1)) {
           printf("Saiu");
           pessoas--;
           ps = +pessoas;
           }
     if((s2 == s1) and (entrando ==1)) printf("Entrou");
     if(pessoas <= 0) oup32(888,0);
     if (s2 > s1) { 
            saindo = 1;
            x= inp32(889);
            bit7 = x & 128;
            bit6 = x & 64;
            pessoas++;
            pe = +pessoas;
            }
     if (pessoas > 0) oup32(888,1);
     printf("Pessoas que entraram =  %d \n",pe);
     printf("Pessoas que sairam   =  %d \n",ps);
    
     FreeLibrary(hLib);
     return 0;
}

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

Opa...

Gostei do seu 'projeto' aí.. Se possível, gostaria de saber mais sobre ele.. estou querendo entrar nessa área...

Referente a contagem, eu tenho a solução usando a API do windows... bem facil... tenho uma biblioteca pronta pra fazer isso ;)

Se quiser posso te passar... me add no MSN

dinhors@hotmail.com

depois você pode postar aqui a conclusão pra quem tiver interesse na tua duvida tb ;)

Link para o comentário
Compartilhar em outros sites

  • 0

Boa noite Henrique Neto,

cara, fiz aki de outra forma. Os Led's acendem quando alguém passa pelo sensor e conta o tempo em que os sensores estiveram ativos, porém mostra o tempo total, fiz tipo um cronômetro, aí quando o sensor é ativo ele começa a contar, o sensor desliga ele para de contar, o sensor liga de novo ele começa a conta mas começa de onde parou da última vez, mostrando assim o tempo total em que os sensores estiveram ativos. É isso mesmo que você queria? Testa o programa aí pelo menos pra você ver como ficou e tirar uma idéia +/-:

#include <dos.h>
#include <iostream.h>
#include <conio.h>
#include <windows.h>

#define DADOS 0x378
#define STATUS 0x379

typedef short _stdcall (*PtrInp)(short EndPorta);
typedef void _stdcall (*PtrOut)(short EndPorta, short valor);

int main(void)
{
HINSTANCE hLib; //Instância para a DLL inpout32.dll.
PtrInp inportb; //Instância para a função Imp32().
PtrOut outportb; //Instância para a função Out32().

//Carrega a DLL na memória.
hLib = LoadLibrary("inpout32.dll");

if(hLib == NULL) //Verifica se houve erro.
{
cout << "LoadLibrary Failed.\n";
getch();
return -1;
}

//Obtém o endereço da função Inp32 contida na DLL.
inportb = (PtrInp) GetProcAddress(hLib, "Inp32");

if(inportb == NULL) //Verifica se houve erro.
{
cout << "Erro. A função Inp32 não foi encontrada.\n";
getch();
return -1;
}

//Obtém o endereço da função Out32 contida na DLL.
outportb = (PtrOut) GetProcAddress(hLib, "Out32");

if(outportb == NULL) //Verifica se houve erro.
{
cout << "GetProcAddress for Oup32 Failed.\n";
getch();
return -1;
}

int SEG1 = 0, MIN1 = 0, SEG2 = 0, MIN2 = 0, TEMPO_TOTAL1, TEMPO_TOTAL2;
unsigned char Status;
while (!kbhit())
{
Status = inportb(STATUS);
if ((Status) == 0x77)
{

outportb(DADOS, 0x01);
SEG1++;
_sleep(1000);
if (SEG1 > 59)
{
SEG1 = 0;
MIN1++;
}
system("CLS");
cout << "Sensor 1 ATIVO! " << MIN1 << " : " << SEG1;
TEMPO_TOTAL1 = SEG1 + (MIN1 * 60);
}
if ((Status) == 0x6F)
{

outportb(DADOS, 0x02);
SEG2++;
_sleep(1000);
if (SEG2 > 59)
{
SEG2 = 0;
MIN2++;
}
system("CLS");
cout << "Sensor 2 ATIVO! " << MIN2 << " : " << SEG2;
TEMPO_TOTAL2 = SEG2 + (MIN2 * 60);
}
if ((Status) == 0x67)
{
outportb(DADOS, 0x01);
outportb(DADOS, 0x02);
SEG1++;
SEG2++;
_sleep(1000);
if (SEG1 > 59)
{
SEG1 = 0;
MIN1++;
}
if (SEG2 > 59)
{
SEG2 = 0;
MIN2++;
}
system("CLS");
cout << "Sensor 1 ATIVO! " << MIN1 << " : " << SEG1 << "\n";
TEMPO_TOTAL1 = SEG1 + (MIN1 * 60);
cout << "Sensor 2 ATIVO! " << MIN2 << " : " << SEG2;
TEMPO_TOTAL2 = SEG2 + (MIN2 * 60);
}
}
system("CLS");
cout << "Tempo total em que o sensor 1 ficou ATIVO: " << TEMPO_TOTAL1 << "s";
cout << "\n\n";
cout << "Tempo total em que o sensor 2 ficou ATIVO: " << TEMPO_TOTAL2 << "s";
system("PAUSE >= nul");
FreeLibrary(hLib); // Libera memória alocada pela DLL.
return(0);
}[/CODEBOX]

Qualquer dúvida, se eu puder ajudar estou às ordens! Abraços . . . :)

Editado por Risadão
Link para o comentário
Compartilhar em outros sites

  • 0

Risadao adicionei uma funcao do time.h

Mais não deu certo ve como ficou o codigo ve se me da uma luz.rsss

#include <stdio.h>
#include <math.h>
#include <windows.h>
#include <time.h>

#define DEVCpp

#ifdef DEVCpp
         #include <windows.h>
#endif
#ifdef TURBOCpp
         #include <dos.h>
#endif

void espera(long tempo){
    #ifdef DEVCpp
          Sleep(tempo);
    #endif
    #ifdef TURBOCpp
          delay(tempo);
    #endif
}

/* cria??o de um tipo, que ? um ponteiro para fun??o */

     typedef short _stdcall (*inpfuncPtr)(short portaddr);
     typedef void _stdcall (*oupfuncPtr)(short portaddr, short datum);

/* ponteiros para fun??es, mas que podem ser interpretadas como:
   (a) short inp32(short porta);
   (b) void oup32(short porta, short dado);
*/
     HINSTANCE hLib;
     inpfuncPtr inp32;
     oupfuncPtr oup32;

int iniciaBiblioteca(){
     /* Load the library */
     hLib = LoadLibrary("inpout32.dll");

     if (hLib == NULL) {
          printf("A biblioteca inpout32.dll não foi encontrada\n\n");
          return -1;
     }else {
           printf("Biblioteca inpout32.dll aberta com sucesso...\n\n");
           getchar();
           }

     /* get the address of the function */

     inp32 = (inpfuncPtr) GetProcAddress(hLib, "Inp32");

     if (inp32 == NULL) {
          printf("GetProcAddress for Inp32 Failed.\n");
          return -1;
     }

     oup32 = (oupfuncPtr) GetProcAddress(hLib, "Out32");

     if (oup32 == NULL) {
          printf("GetProcAddress for Oup32 Failed.\n");
          return -1;
     }  
    
     return 0;  
}    
int main(void)
{ 
    time_t start,end;
    char szInput [256];
    double dif;
     if (iniciaBiblioteca()==-1) return -1; // inicia e testa se falhou

     system("cls");
     int pessoas=0, entrando =0, saindo = 0, s1=0, s2=0, x,bit7,bit6,pe=0,ps=0;
     x=inp32(889);
     bit7 = (x & 128);
     bit6 = (x & 64);
     while(bit7 == 128){
           s1 = s1+1;
           x = inp32(889);
           bit7 = x & 128;
           }
     while(bit6 ==0){
           s2 = s2+1;
           x=inp32(889);
           bit6 = (x & 64);
           }
    if((s2 == s1) and (entrando ==1)) printf("Entrou");
[b]    time (&start);[/b]
     if(pessoas <= 0) oup32(888,0);
     if (s2 > s1) {
            saindo = 1;
            x= inp32(889);
            bit7 = x & 128;
            bit6 = x & 64;
            pessoas++;
            pe = +pessoas;
            }   
    
     if(s1 > s2) entrando=1;
     if((s2 == s1) and (saindo==1)) {
 [b]    time (&end);
     dif = difftime (s1,s2);
     printf ("Voce Levou %.2lf segundos para passar de um sensor para o outro.\n", dif );[/b]
           printf("Saiu");
           pessoas--;
           ps = +pessoas;
           }
     
     if (pessoas > 0) oup32(888,1);
     printf("Pessoas que entraram =  %d \n",pe);
     printf("Pessoas que sairam   =  %d \n",ps);
    
     FreeLibrary(hLib);
     return 0;
}

Link para o comentário
Compartilhar em outros sites

  • 0

e aí Henrique Neto, conseguiu fazer o projeto aí cara? deu td certo? desculpa não ter entrado esses dias aki é que nem estava em casa, cheio de coisas pra fazer, mas depois posta aí se deu td certinho aí cara. Qualquer coisa estou à disposição. T+ Abraços...!!!

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

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

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...