2017-05-03 234 views
0

我已经连接了一个传感器和我的Arduino板,并且正在运行一个草图,它从传感器中检索一些数据并将其存储在4个双变量中。我需要从另一个.cpp文件访问这4个变量。Arduino和cpp文件通信

为此,我为两个声明了4个extern变量创建了一个通用头文件。然后这些定义在arduino草图中。与此问题是,当我尝试访问.cpp文件中的变量时,编译器错误指出它们未定义。

Arduino的草图:

#include <Wire.h> 
#include <Adafruit_Sensor.h> 
#include <Adafruit_BNO055.h> 
#include <utility/imumaths.h> 
#include <varDec.h> 

#define BNO055_SAMPLERATE_DELAY_MS (1000) 

double x,y,z,w; 

Adafruit_BNO055 bno = Adafruit_BNO055(); 

void setup() 
{ 
    Serial.begin(9600); 

    if(!bno.begin()) 
    { 
    Serial.println("Not connected"); 
    while(1); 
    } 

    bno.setExtCrystalUse(false); 

} 

void loop() 
{ 
    imu::Quaternion quat = bno.getQuat(); 

    x = quat.x(); 
    y = quat.y(); 
    z = quat.z(); 
    w = quat.w(); 

    uint8_t system, gyro, accel, mag = 0; 
    bno.getCalibration(&system, &gyro, &accel, &mag); 

    delay(BNO055_SAMPLERATE_DELAY_MS); 

} 

cpp文件:

#include <unistd.h> // sleep() 
#include <stdio.h> // fopen(), fclose(), fprintf(), perror() 
#include <stdlib.h> // exit() and EXIT_FAILURE 
#include <iostream> 
#include "/home/matthew/sketchbook/libraries/Custom/varDec.h" 

using namespace std; 

int main() 
{ 
    cout << x; 
    getchar(); 

    getchar(); 

    return(0); 
} // end function: main 

和标题:

extern double x; 
extern double y; 
extern double z; 
extern double w; 

回答

0

从我读什么结构,我想,是什么你称之为“另一个.cpp文件”是一个运行在计算机上的程序....

如果是这样的话,那么你试图做的事情将永远不会工作。变量,被命名为分配内存的空间。并且在计算机上运行的程序将无法访问arduino上分配的内存。

从传感器获取数值到计算机上运行的程序的最简单方法是编程arduino将值写入串口。 (这里您可以找到有关如何将不同格式的值发送到串行端口的很好示例:https://www.arduino.cc/en/serial/print

而且您的计算机上运行的程序应该读取预期值的串行端口。读取计算机上的串行端口并不是一项艰巨的任务。但它依赖于系统。有很多互联网上的文档)

祝你好运我的朋友;-)

+0

你是对的,我意识到我的错误后,思考它。我设法通过串口发送数据并以这种方式获取数据。 – MattMalt