我一直在努力解决这个问题。我必须与Arduino和C ++程序进行通信。我知道它在Python中很容易,但它必须在C ++中用于学校项目。所以我正在阅读很多内容,但没有人能帮助我。
所以我有一个简短的Python脚本,可以很好地与arduino进行通信,并且用Python编写。
communication.py:
import serial
ser = serial.Serial('/dev/ttyACM0', 9600)
def communicate(number):
ser.write(number)
return ser.readline()
Arduino获取数字并以字符串形式返回光传感器的值。现在我希望这与C ++程序进行通信。我的C ++代码(这只是整个程序的一小部分)
mainwindow.cpp:
void MainWindow::run(){
while (ui->startstop->value() == 1){// as long that the program must run
blockchange = 0;
// get data from arduino
Py_Initialize();
const char* modulename = "communication";
PyObject *pName = PyUnicode_FromString(modulename);
PyObject *pModule = PyImport_Import(pName);
if (pModule != NULL){
PyObject *pDict = PyModule_GetDict(pModule);
PyObject *pFunc = PyDict_GetItem(pDict, PyUnicode_FromString("communicate"));
if (pFunc != NULL){
PyObject_CallObject(pFunc, PyLong_FromLong(blockchange));
}else{
std::cout << "couldn't find func\n";
}
}else{
std::cout << "pyhton module not found\n";
}
}
它只提供“未找到python模块”。这意味着PyImport_Import(pName)
返回NULL。有什么问题?
我使用Ubuntu 18.04,我的标准版本的Python是3.5,程序是用Qt Creator编写的。我尝试了很多东西,也没有Python,但我找不到任何有用的东西。我只希望我的Arduino从0到6读取一个int,并且C ++程序读取一个由“,”分隔的6个数字的字符串。