更新Qtimer

时间:2015-06-16 07:20:24

标签: qt user-interface adc

我正在使用mini2440的qt工具。 我为拥有starti2c和stopi2c的i2c adc做了一个gui。 所有东西都运行良好:它在starti2c按钮按下时读取信号值,但我希望更新此值。我知道可以使用Qtimer,但我怎么能这样做? 这是代码:

# include <termio.h>
# include <time.h>
# include <string.h>
# include <sys/time.h>

HelloForm::HelloForm(QWidget* parent, const char* name, WFlags fl):

HelloBaseForm(parent, name, fl)

{

connect(PushButton1,SIGNAL(clicked()),this,SLOT(starti2c()));
connect(PushButton2,SIGNAL(clicked()),this,SLOT(stopi2c()));

}

HelloForm::~HelloForm()  

{

}

//*********************Code for getting i2c**************************// 
  char HelloForm::geti2c()
{

  char buf[100];                              
  char buff[100];     
  char valuee;

  int m1;   

  char con_buff[10];

  int fd=open("/dev/i2c/0",O_RDWR);

  if (fd<0)
  {

   Message->setText(" NOT ABLE TO OPEN THE DRIVER ");

   }

   else

  {

  Message->setText(" I2C IS WORKING ");

}

    int  io,wbyte,rbyte,i;

   //********i2cdetect and read************

   buf[0]=0x48;    

  buf[1]=0x00;   

  buf[2]=0x91;  

  io=ioctl(fd,I2C_SLAVE,0x48); 

  if(io<0)

{

Message->setText(" ");

 Message->setText("error ioctl");

 }

 else

 {

 wbyte=write(fd,buf,3); 
                   // write all three control word to arm 
 usleep(1*1000);

 }

 if(wbyte!=3)

{
Message->setText("error write");

Message->setText(QString::number(wbyte));

rbyte=read(fd,buff,10);    

//ADC->setText(buff);

sscanf(buff,"%c",&valuee);             

m1=int(valuee);     

return(m1);

}


void HelloForm::starti2c()

{


while(1)

{   

float adc_val=0;

adc_val=geti2c();

adc_val=(adc_val*5)/255.00;

usleep(1*1000);   

ADC->setText(QString::number(adc_val));   
  }
  }

//***********stop********//
void HelloForm::stopi2c()
{                        

   ADC->setText(" ");
Message->setText("Stopped");
}        

1 个答案:

答案 0 :(得分:0)

希望这会让你开始 - 它会创建一个每1000毫秒超时的计时器。定时器的超时信号连接到PushButton1所连接的同一插槽 - starti2c。

QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(starti2c()));
timer->start(1000);

该代码应放在您拥有2个连接语句的下方。