El mié, 02-07-2008 a las 23:20 +0200, Jesús Genicio escribió: > Hola: > > Aquí tienes varios ejemplos de cómo hacerlo. > > http://tuxgraphics.org/electronics/ > > S2. > >
tal vez esto te sirva: http://es.tldp.org/COMO-INSFLUG/es/ps/Programacion-Serie-Como.ps.gz O esto: Este programita se comunica con un PIC y a través del puerto serie lee datos y los grafica. A lo mejor podés sacar algo. #include <string.h> #include <fcntl.h> #include <termios.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <libio.h> #include <X11/Xlib.h> #include "Escala.h" #include "Escala.cc" // Ancho y alto de la ventana en pixels. #define ANCHO 800 #define ALTO 540 /* la tasa de baudios esta definida en <asm/termbits.h>, que esta incluida <termios.h> */ #define BAUDRATE B57600 /* cambie esta definicion por el puerto correcto */ #define MODEMDEVICE "/dev/ttyS0" #define _POSIX_SOURCE 1 /* fuentes cumple POSIX */ #define FALSE 0 #define TRUE 1 main() { int fd , res; double x,y; int xPixel, yPixel; struct termios oldtio,newtio; unsigned char datosrx[2500]={0}, datostx; Display *disp = NULL; /* Ventana que vamos a crear para dibujar */ Window ventana; /* Color que vamos a utilizar para dibujar una linea */ XColor color; /* Abrimos la conexion con el servidor de X */ disp = XOpenDisplay(NULL); /* Creamos una ventana */ ventana = XCreateSimpleWindow ( disp, XDefaultRootWindow (disp), 100, 100, ANCHO, ALTO, 1, 1, WhitePixel (disp, DefaultScreen(disp))); /* Hacemos que la ventana sea visible */ XMapWindow (disp, ventana); /* Obtenemos el color azul */ color.flags = DoRed | DoGreen | DoBlue; color.red = 65535; color.blue = 0; color.green = 0; color.pad = 0; XAllocColor ( disp, DefaultColormap (disp, DefaultScreen(disp)), &color); /* Indicamos que el color de dibujo a partir de ahora es el azul */ XSetForeground ( disp, XDefaultGC (disp, DefaultScreen(disp)), color.pixel); /* Instanciamos y preparamos la clase de conversión de escala.*/ EscalaC escala; escala.tomaExtremos (0.0, 3.0, -1.01, 2.0); escala.tomaAreaGrafica (ANCHO, ALTO); sleep(1); fd = open(MODEMDEVICE, O_RDWR | O_NOCTTY ); if (fd <0) { perror(MODEMDEVICE); exit(-1); } tcgetattr(fd,&oldtio); bzero(&newtio, sizeof(newtio)); /* limpiamos struct para recibir los /* types nuevos parametros del puerto */ /* BAUDRATE: Fija la tasa bps. Podria tambien usar cfsetispeed y cfsetospeed. CRTSCTS : control de flujosize de salida por hardware (usado solo si el cable tiene todas las lineas necesarias Vea sect. 7 de Serial-HOWTO) CS8 : 8n1 (8bit,no paridad,1 bit de parada) CLOCAL : conexion local, sin control de modem CREAD : activa recepcion de caracteres */ //| CRTSCTS newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD; newtio.c_iflag = IGNPAR; newtio.c_oflag = 0; cfsetispeed(&newtio, B57600); cfsetospeed(&newtio, B57600); newtio.c_lflag = 0; newtio.c_cc[VTIME] =0; /* temporizador entre caracter, no usado */ newtio.c_cc[VMIN] =250; /* bloquea lectura hasta recibir 5 chars */ tcflush(fd, TCIFLUSH); tcsetattr(fd,TCSANOW,&newtio); /** Mandandole un 15 al pic comienza a convertir **/ int variable = 0; datostx = 1; write(fd, &datostx, 1); usleep(100); x=0.0; y=1.0; while(1) { res = read(fd, &datosrx[250 * variable], 250); //printf("caracteres leidos:%d\n\n", res); variable++; res = read(fd, &datosrx[250 * variable], 250); //printf("caracteres leidos:%d\n\n", res); variable++; res = read(fd, &datosrx[250 * variable], 250); //printf("caracteres leidos:%d\n\n", res); variable++; graficar(datosrx, x, y, disp, ventana, escala); XFlush(disp); //scanf("%c", &datostx); x=y; y+=1.0; if(y > 3) { y=1.0; variable=0; x=0; XClearWindow(disp, ventana); } } tcsetattr(fd,TCSANOW,&oldtio); printf("\nchau\n"); } -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]