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
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