私はarduinoコードベースを.h & .cppファイルの両方を持つクラスを作成して、単一の 'ino'ファイルから適切なish C++プログラムに分割しようとしています。私は解決できなかったいくつかのエラーに遭遇しています。私は何かが簡単でないことを願っています。C++のメソッド定義と変数宣言
プラグイン "Visual Studio用のArduino IDE" を実行Visual Studioでコンパイルする場合、私は次のエラーを取得:
7:8: error: 'class MPU6050' has no member named 'timer
30:5: error: prototype for 'int MPU6050::MPU6050_read(int, uint8_t*, int)' does not match any in class 'MPU6050
私はここで何をしないのですか?私は考えていない(もっと多くの#defineに関連しています
#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は私の定数のすべてが含まれており、以下のように見えるの.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
含む)
#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; //常にタイマを0で起動して、エラーから何か問題が発生したかどうかを確認してください – Vtik
私は、コンパイラがヘッダファイルに表示しているのとは異なるクラス定義を使用していると確信しています。いくつかのファイルを古いバージョンと混在させましたか?また、この種のエラーが発生した場合は、この#ifdefヘッダーのバリアを#pragmaで1回置き換えることをお勧めします(ただし、これは問題ではありません)。 プリコンパイル済みヘッダーを無効にしましたか?また、すべてのヘッダーファイルのデバッグ出力を提供するようにコンパイラーをセットアップします。実際に使用するクラス定義であることを確認してください。 MPU6050_Hのテキスト検索を実行すると、その単一の.hファイルでのみポップアップする必要があります。 – philipp
@ YassinNasriがタイマー変数をコメントアウトすると、エラーが消えてしまい、問題を解決した別のエラーに集中するようになりました。 – Wesley