Puente Levadizo por Puerto Paralelo DUDA

#1
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
 
#2
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.
 
#3
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
 
Arriba