我已经将传感器连接到我的Arduino板并运行了一个草图,该草图从传感器检索一些数据并将其存储在4个双变量中。我需要从另一个.cpp文件中访问这4个变量。
为此,我为两者创建了一个公共头文件,声明了4个外部变量。然后在arduino草图中定义它们。这样做的问题是,当我尝试从.cpp文件访问变量时,编译器错误表明它们是未定义的。
arduino sketch:
#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 :(得分:0)
从我正在阅读的内容的结构来看,我猜,你所谓的“另一个.cpp文件”是一个在计算机上运行的程序....
如果是这种情况,那么你要做的事情永远不会奏效。变量,被命名为已分配内存的间隔。并且在计算机上运行的程序将无法访问arduino上的已分配内存。
从传感器获取值到计算机上运行的程序的最简单方法是对arduino进行编程,以将值写入串行端口。 (这里有关于如何将不同格式的值发送到串口的好例子:https://www.arduino.cc/en/serial/print)
计算机上运行的程序应该读取预期值的串行端口。读取计算机上的串口并不是一项艰巨的任务。但它取决于系统。互联网上有很多文档)
祝我的朋友好运; - )