2017-05-03 238 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