Puente Levadizo por Puerto Paralelo DUDA

hola nosotros estamos haciendo un proyecto para la facu, es un puente levadizo controlado por puerto paralelo. En si el puente se eleva mediante un motor paso a paso, y el barco es detectado por un infrarrojo. La duda es la siguiente: como puedo hacer para que el programa pida constantemente el estado del puerto, es decir que en la pantalla aparezca "PUENTE EN STAND BY" y cuando se corte la señal infrarroja (en cualquier momento) empiece a funcionar el motor y todo lo demas. Y caundo se quiera salir del programa se aprieta Escape y sale (tambien en cualquier momento).

Estoy usando Linux y lenguaje c y c++
Hasta ahora lo que tenemos como programa para porbar el funcionamiento es el siguiente:



#include <iostream>
using namespace std;
#include <stdio.h>
#include <unistd.h>
//asm/io.h es donde están definidas las funciones ioperm() y outb()
#include <sys/io.h>
#include <time.h>

/* Esta es la direccion más frecuente para el puerto paralelo*/
#define DATAPORT 0x378
#define STATUSPORT DATAPORT+1


using namespace std;


int main()
{
int op,i;
//Obtenemos permiso de acceso para la direccion de DATAPORT y
//las 2 siguientes
if (ioperm(DATAPORT, 3, 1)) {perror("ioperm"); return 1;}

//Entramos en un bucle infinito


cout<<"\n\n\nPuente en Stand-By";
while(1){



if(inb(STATUSPORT)==127){
system("clear");
cout<<"\n\n\nPuente Elevandose";

printf("\n\nEl motor gira horariamente\n");
for(i=0;i<30;i++){
outb(1, DATAPORT);
usleep(50000);
outb(4, DATAPORT);
usleep(50000);
}
usleep(3000000);
printf("\n\nEl motor gira antihorariamente\n");
for(i=0;i<30;i++){
outb(2, DATAPORT);
usleep(50000);
outb(8, DATAPORT);
usleep(50000);
}


}


}

//Antes de terminar el programa dejamos los permisos de acceso
//a los puertos como estaban
if (ioperm(DATAPORT, 3, 0)) {perror("ioperm"); return 1;}

//El programa termina sin errores
return 0;
}



Desde ya muchas gracias por la ayuda
 
Usa un WHILE que sense constantemente el infrarrojo (LPT), y que corte el bucle cuando cambie.

Ej: si la direccion de entrada es 0x379, y tiene como valor 0x5F, pone

WHILE(0x379==0x5F)
inportb(ENTRADA=0x379)

Si no recuerdo mal, deberia funcionar.

Saludos.
 
Hola chelo,
Estoy haciendo un puente levadizo para un trabajo de la facultad y vi que vos estuviste en mi misma posición.
En fin, quería saber si pudiste hacer el proyecto y en el caso de haberlo hecho si me podes pasar la documentación que tengas (circuito, programa, etc), estoy bastante perdido en esto y con poco tiempo de presentación, así que si me podes ayudar te lo agradecería mucho!!

Muchas Gracias!
Saludos
 
Atrás
Arriba