#include #include #include #include #include #include #define BAUDRATE B19200 #define MODEMDEVICE "/dev/cua0" #define _POSIX_SOURCE 1 /* POSIX compliant source */ #define FALSE 0 #define TRUE 1 volatile int STOP=FALSE; void SetPVA(unsigned long p, unsigned long v, unsigned long a); void StopMotor(unsigned char value); void ReadStatus(char string[]); int fd; main(int argc, char **argv) { int i,count,ret; unsigned char buf[40]; struct termios oldtio,newtio; unsigned long p; unsigned long v; unsigned long a; unsigned long velocity = 100000; unsigned long acceleration = 100000; argc--;*argv++; if(argc-- > 0) p= atol(*argv++); fd = open(MODEMDEVICE, O_RDWR); if (fd <0) {perror(MODEMDEVICE); exit(-1); } tcgetattr(fd,&oldtio); /* save current port settings */ /* bzero(newtio, sizeof(newtio)); */ newtio.c_cflag = BAUDRATE | CS8 | CREAD; newtio.c_iflag = 0; newtio.c_oflag = 0; /* set input mode (non-canonical, no echo,...) */ newtio.c_lflag = 0; newtio.c_cc[VTIME] = 0; /* inter-character timer unused */ newtio.c_cc[VMIN] = 0; /* blocking read until 1 chars received */ tcflush(fd, TCIFLUSH); tcsetattr(fd,TCSANOW,&newtio); #if(0) while(1) { RequestStatus (); count = 0; do { printf("A\n"); ret = read(fd,&buf[count],3-count); count += ret; } while (count < 3); if((buf[0] & 1) == 1) break; } WaitDone(); #endif while(1) { #if(1) for(i=0;i<400;i+=40) { SetPVA(i,velocity,acceleration); usleep(100*1000); } #else SetPVA(0,velocity,acceleration); SetPVA(50000,velocity,acceleration); #endif } tcsetattr(fd,TCSANOW,&oldtio); } void SetPVA(unsigned long p, unsigned long v, unsigned long ac){ unsigned char a[40]; int i = 0; int j; unsigned char sum = 0; int ret; a[i++] = 0xAA; a[i++] = 0x00; a[i++] = 0xd4; a[i++] = 0x97; a[i++] = p & 0xFF; a[i++] = (p >> 8) & 0xff; a[i++] = (p >> 16) & 0xff; a[i++] = (p >> 24) & 0xff; a[i++] = v & 0xFF; a[i++] = (v >> 8) & 0xff; a[i++] = (v >> 16) & 0xff; a[i++] = (v >> 24) & 0xff; a[i++] = ac & 0xFF; a[i++] = (ac >> 8) & 0xff; a[i++] = (ac >> 16) & 0xff; a[i++] = (ac >> 24) & 0xff; sum = 0; for(j=1;j