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

関連する問題