<< return to Pixycam.com

Pixymon interpreter Result

I’m trying to enhance the Pixymon Program a bit to fit my needs. Now i want to get some data off pixy using the m_interpreter. I have no problem executing something (to change the brightness), but i have no idea how to get the result of a m_interpreter->execute call. Is there a documentation regarding pixymon or can any of the devs help me getting a result

Hello Paul,
There are two threads in PixyMon, one for the gui and one for Pixy communications. Making a call into the interpreter is usually done by the gui thread, so it can’t block to wait for a result. Getting the result from the gui thread has to be asynchronous and can be challenging/confusing. Most calls to Pixy are handled within the Pixy thread, from within the Interpreter class, where you can wait for a result without causing the application to hang.

Hope this helps!

Edward

I wrote a little workaround, i just execute the command, wait some time and then get the result of the plainTextEdit. If anyone is interestes here is my code:
In console.cpp (you need to add those functions to console.h as well)

QString ConsoleWidget::getLastLine(){
    QString plainTextEditContents = toPlainText();
    QStringList lines = plainTextEditContents.split("\n");
    return lines[lines.length()-2]; //-2 because the last line is empty

}

int ConsoleWidget::getLastResult(){
    QString lastLine = this->getLastLine();
    lastLine = lastLine.remove("response: ", Qt::CaseSensitive);
    int pos = lastLine.indexOf("(",0,Qt::CaseInsensitive);
    lastLine = lastLine.remove(pos, lastLine.length()-pos);
    return lastLine.toInt();
}

and in the mainwindow.cpp:

void MainWindow::writeResult(){
    m_ui->label->setText("Voltage: "+QString::number(m_console->getLastResult())+"mV");
    if (m_interpreter){
        m_interpreter->execute("run()");
    }
}

void MainWindow::on_tabWidget_currentChanged(int index){
     if (m_interpreter){
         m_interpreter->execute("pwr_getVin()");
         QTimer::singleShot(100,this,SLOT(writeResult()));
     }     
}