[讨论] linux串口程序如何与我设计的人机界面结合

girl   2007-8-16 14:56 楼主
linux串口程序如何与我设计的人机界面结合?

回复评论 (5)

回复:linux串口程序如何与我设计的人机界面结合

最近正在开发一个linux下串口程序,环境ubuntu,我不明白串口程序如何与我设计的人机界面结合?直接在 qt designer中写串口程序(c语言)?好像没法编译!我不知道是我qt designe版本的问题还是什么原因?一编译就出错,说是找不到文件,明明那个文件在的. qt designer中没有串口通信的类.
点赞  2007-8-16 15:01

回复:linux串口程序如何与我设计的人机界面结合

为啥没有理会呢??
点赞  2007-8-16 15:02

回复: linux串口程序如何与我设计的人机界面结合

/**************************************************************************** ** Form interface generated from reading ui file 'cato.ui' ** ** Created: Mon Jun 4 09:37:06 2007 ** by: The User Interface Compiler (uic) ** ** WARNING! All changes made in this file will be lost! ****************************************************************************/ #ifndef CATO_H #define CATO_H #include <qvariant.h> #include <qwidget.h> class QVBoxLayout; class QHBoxLayout; class QGridLayout; class QPushButton; class QSlider; class cato : public QWidget { Q_OBJECT public: cato( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 ); int open_port( int fd, int comport); int set_opt(int fd, int nSpeed, int nBits, char nEvent, int nStop); int init_com(void); ~cato(); QSlider* Slider1; QSlider* Slider2; QSlider* Slider3; QPushButton* key1; QPushButton* key2; QPushButton* key3; QPushButton* key4; QPushButton* key5; QPushButton* key6; QPushButton* key7; QPushButton* key8; public slots: void key1_com(); void key2_com(); void key3_com(); void key4_com(); void key5_com(); void key6_com(); void key7_com(); void key8_com(); void key1_value(int i); void key1_released(int i); }; #endif // CATO_H
点赞  2007-8-16 15:03

回复: linux串口程序如何与我设计的人机界面结合

connect( key1, SIGNAL( clicked() ), this, SLOT( key1_com() ) ); connect( key2, SIGNAL( clicked() ), this, SLOT( key2_com() ) ); connect( Slider1 , SIGNAL( sliderMoved(int) ), this, SLOT( key1_value(int) ) ); connect( Slider1 , SIGNAL( valueChanged(int) ), this, SLOT( key1_released(int) ) ); } //====================================================== void cato::key1_com() { //int fd ,i; unsigned char buff[9] = {0xca,0x20,0xfe,0x2b,0x03,0x01,0x00,0x01,0xac}; // fd = 3; if( zu > 0 ) { zu=zu-1; Slider1->setValue(zu); } write( adc, &buff[0],9 ); } //====================================================== void cato::key2_com() { //int fd ,i; unsigned char buff[9] = {0xca,0x20,0xfe,0x2b,0x03,0x01,0x01,0x01,0xac}; // fd = 3; if( zu < 64 ) { zu=zu+1; Slider1->setValue(zu); } write( adc, &buff[0],9 ); } //====================================================== void cato::key3_com() { ; } //====================================================== void cato::key4_com() { ; } //====================================================== void cato::key5_com() { ; } //====================================================== void cato::key6_com() { ; } //====================================================== void cato::key7_com() { ; } //====================================================== void cato::key8_com() { ; } //===================================================== void cato::key1_value(int i) { //int fd ,i; unsigned char buff[8] = {0xca,0x20,0xfe,0x21,0x02,0x01,0x00,0xac}; // fd = 3; zu = i; i = 64 - i; buff[6] = i; write( adc, &buff[0],8 ); } //===================================================== void cato::key1_released(int i) { //int fd ,i; unsigned char buff[8] = {0xca,0x20,0xfe,0x21,0x02,0x01,0x00,0xac}; // fd = 3; zu = i; buff[6] = 64-i; write( adc, &buff[0],8 ); } //====================================================== int cato::open_port( int fd, int comport) { // char *dev[] = {"/dev/ttyS0", "/dev/ttyS1", "/dev/ttyS2"}; long vdisable ; if( comport == 1 ) { fd = open( "/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY); if( -1 == fd ) { perror( "Can't open serial port"); return (-1); } } else if( comport == 2 ) { fd = open( "/dev/ttyS1", O_RDWR | O_NOCTTY | O_NDELAY); if( -1 == fd ) { perror( "Can't open serial port"); return (-1); } } else if( comport == 3 ) { fd = open( "/dev/ttyS2", O_RDWR | O_NOCTTY | O_NDELAY); if( -1 == fd ) { perror( "Can't open serial port"); return (-1); } } /************************************************************************/ if( fcntl( fd, F_SETFL, 0 ) < 0) printf( "fcntl failed!\n" ); else printf( "fontl=%d\n", fcntl( fd, F_SETFL, 0)); /***********************************************************************/ if( isatty( STDIN_FILENO ) == 0) printf( "standard input is not aterminal device\n"); else printf( "isatty success!\n"); printf( "fd-open = %d\n", fd); return fd; } /********************************************************************************** * *******************************************************************************/ int cato::set_opt(int fd, int nSpeed, int nBits, char nEvent, int nStop) { struct termios newtio, oldtio; if( tcgetattr(fd, &oldtio) != 0 ) { perror("setupSerial 1"); return -1; } bzero( &newtio, sizeof(newtio) ); newtio.c_cflag |= CLOCAL | CREAD; newtio.c_cflag &= ~CSIZE; switch( nBits ) { case 7: newtio.c_cflag |= CS7; break; case 8: newtio.c_cflag |= CS8; break; } switch( nEvent ) { case 'O': newtio.c_cflag |= PARENB; newtio.c_cflag |= PARODD; newtio.c_cflag |= (INPCK | ISTRIP); break; case 'E': newtio.c_cflag |= (INPCK | ISTRIP); newtio.c_cflag |= PARENB; newtio.c_cflag &= ~PARODD; break; case 'N': newtio.c_cflag &= ~PARENB; break; } /**************************************/ switch( nSpeed ) { case 2400: cfsetispeed( &newtio, B2400); cfsetospeed( &newtio, B2400); break; case 4800: cfsetispeed( &newtio, B4800); cfsetospeed( &newtio, B4800); break; case 9600: cfsetispeed( &newtio, B9600); cfsetospeed( &newtio, B9600); break; case 115200: cfsetispeed( &newtio, B115200); cfsetospeed( &newtio, B115200); break; case 460800: cfsetispeed( &newtio, B460800); cfsetospeed( &newtio, B460800); break; default: cfsetispeed( &newtio, B9600); cfsetospeed( &newtio, B9600); break; } if( nStop == 1) newtio.c_cflag &= ~CSTOPB; else if( nStop == 2 ) newtio.c_cflag |= CSTOPB; newtio.c_cc[ VTIME ] = 0; newtio.c_cc[ VMIN ] = 0; tcflush( fd, TCIFLUSH ); if((tcsetattr(fd, TCSANOW, &newtio)) != 0) { perror("com set error"); return -1; } printf("set done!\n"); return 0; } int cato::init_com(void) { int fd, i; if( ( fd = cato::open_port( fd, 2)) < 0 ) { perror( "open_port error"); return 0 ; } if( ( i = cato::set_opt( fd, 9600, 8, 'N', 1 ) ) < 0 ) { perror( "set_opt error"); return 0 ; } printf( "fd = %d\n", fd ); return fd; } /**************************************************************************************/ //====================================================== /* * Destroys the object and frees any allocated resources */ cato::~cato() { // no need to delete child widgets, Qt does it all for us }
点赞  2007-8-16 15:04

回复: linux串口程序如何与我设计的人机界面结合

将linux下串口通信程序嵌入qt designer设计的界面,编译出了很多问题! 郁闷之至!我是将这些头文件直接包含在主界面窗口类的.h文件中的! #include <stdio.h> /*标准输入输出定义*/ #include <stdlib.h> /*标准函数库定义*/ #include <unistd.h> /*Unix 标准函数定义*/ #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> /*文件控制定义*/ #include <termios.h> /*PPSIX 终端控制定义*/ #include <errno.h> /*错误号定义*/ 谁能给个完整的 例子看看? 同情下初学者吧!!
点赞  2007-8-16 15:06
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复