回复:linux串口程序如何与我设计的人机界面结合
最近正在开发一个linux下串口程序,环境ubuntu,我不明白串口程序如何与我设计的人机界面结合?直接在 qt designer中写串口程序(c语言)?好像没法编译!我不知道是我qt designe版本的问题还是什么原因?一编译就出错,说是找不到文件,明明那个文件在的.
qt designer中没有串口通信的类.
回复:linux串口程序如何与我设计的人机界面结合
为啥没有理会呢??
回复: 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
回复: 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
}
回复: 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> /*错误号定义*/
谁能给个完整的 例子看看?
同情下初学者吧!!