【发布时间】:2016-05-12 15:25:34
【问题描述】:
我正在尝试通过创建同时具有 .h 和 .cpp 文件的类将我的 arduino 代码库从单个“ino”文件拆分为适当的 c++ 程序。我遇到了一些我无法解决的错误。我希望我错过了一些简单的东西。
在运行“Arduino IDE for Visual Studio”插件的 Visual Studio 中编译时,出现以下错误:
7:8: 错误:“MPU6050 类”没有名为“计时器”的成员
30:5:错误:“int MPU6050::MPU6050_read(int, uint8_t*, int)”的原型与“MPU6050”类中的任何内容都不匹配
我在这里错过了什么?
.h
#ifndef MPU6050_H
#define MPU6050_H
class MPU6050
{
private: // Vars
uint32_t timer; // Hold the value of the timer used for the complementary filter
int error;
public: // Methods
MPU6050();
~MPU6050();
void read_acc_gyr();
float const * const getXa();
float const * const getYa();
float const * const getXvel();
float const * const getYvel();
float const * const getZvel();
float const * const getZang();
double const * const getDt();
private:
void test_gyr_acc();
void MPU6050_init();
void printGyroValues();
void calibrateGyro();
int MPU6050_write(int start, const uint8_t *pData, int size);
int MPU6050_read(int start, uint8_t *buffer, int size);
int MPU6050_write_reg(int reg, uint8_t data);
};
#endif
.cpp
#include "MPU6050.h"
#include "Arduino.h"
#include "MPU6050Definitions.h"
MPU6050::MPU6050()
{
timer = 0; // Always start the timer at 0
error = 1;
Serial.println("Testing Gyro");
test_gyr_acc();
}
MPU6050::~MPU6050()
{
}
int MPU6050::MPU6050_read(int start, uint8_t *buffer, int size)
{
int i, n, error;
Wire.beginTransmission(MPU6050_I2C_ADDRESS);
n = Wire.write(start);
if (n != 1)
return (-10);
n = Wire.endTransmission(false); // hold the I2C-bus
if (n != 0)
return (n);
// Third parameter is true: relase I2C-bus after data is read.
Wire.requestFrom(MPU6050_I2C_ADDRESS, size, true);
i = 0;
while (Wire.available() && i<size)
{
buffer[i++] = Wire.read();
}
if (i != size)
return (-11);
return (0); // return : no error
}
void MPU6050::test_gyr_acc()
{
uint8_t c = 0;
error = MPU6050_read(MPU6050_WHO_AM_I, &c, 1);
if (error != 0) {
while (true) {
digitalWrite(13, HIGH);
delay(300);
digitalWrite(13, LOW);
delay(300);
}
}
}
MPUT6050Definitions.h 包含我的所有常量,如下所示:(还有更多我认为与包含无关的#defines)
#pragma once
//All the values to setup the MPU6050 gyro/accelermeter
#define MPU6050_AUX_VDDIO 0x01 // R/W
#define MPU6050_SMPLRT_DIV 0x19 // R/W
#define MPU6050_CONFIG 0x1A // R/W
#define MPU6050_GYRO_CONFIG 0x1B // R/W
【问题讨论】:
-
评论你的
timer = 0; // Always start the timer at 0,看看error是否有问题 -
我很确定编译器使用了与您在头文件中显示的不同的类定义。将一些文件与旧版本混合在一起?此外,当您遇到此类错误时,最好用#pragma 一次替换此#ifdef 标头障碍(尽管我认为这不是问题所在)。您是否禁用了预编译头文件?还要设置您的编译器以提供包含的所有头文件的调试输出。检查它是否真的是它使用的类定义。对 MPU6050_H 进行文本搜索,它应该只在该单个 .h 文件中弹出。
-
@YassinNasri 注释掉计时器变量导致错误消失,这导致我专注于解决我的问题的另一个错误。
-
@philipp 如何禁用预编译头文件?
标签: c++ arduino header-files