2015-06-16 2 views
-2

Я использую инструмент qt для mini2440. Я делаю gui для i2c adc с starti2c и stopi2c. Все работает хорошо: оно считывает значение сигнала при нажатии кнопки starti2c, но я хочу, чтобы это значение обновлялось. Я знаю, что Qtimer можно использовать, но как я могу это сделать? Вот код:Обновление значения переменного тока для 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"); 
}   

+0

может кто-нибудь мне рассказать ... его срочный я использую trolltech qt 2.2.0 –

+1

Я не совсем понимаю вопрос. Но 'QTimer' имеет свой сигнал« timeout », используемый для обновлений. Также Qt 2.2? Это ** 15 ** лет. Вероятно, вам стоит подумать об использовании более новой версии – Bowdzone

+0

'Я хочу, чтобы это значение обновлялось' => какой? @Bowdzone он может ссылаться на Qt Creator 2.2, который немного младше –

ответ

0

Надеюсь, это поможет вам начать работу - это создает таймер, который раз каждые 1000 миллисекунд секунд. Сигнал тайм-аута таймера подключается к тому же слоту, к которому подключен PushButton1, - starti2c.

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

Этот код следует размещать ниже, если у вас есть два оператора связи.

+0

, там нужно добавить любые заголовки для этого ... –

+0

Вам нужно будет #include

+0

HelloForm :: HelloForm (QWidget * parent, const char * name, WFlags fl): HelloBaseForm (parent, name, fl) { connect (PushButton1, SIGNAL (clicked()), это, SLOT (starti2c())); connect (PushButton2, SIGNAL (щелкнул()), это, SLOT (stopi2c())); QTimer * timer = новый QTimer (это); connect (таймер, SIGNAL (таймаут()), это, SLOT (starti2c())); таймер-> старт (1000); } –