2016-05-12 26 views
1

私は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 
+0

コメント 'timer = 0; //常にタイマを0で起動して、エラーから何か問題が発生したかどうかを確認してください – Vtik

+0

私は、コンパイラがヘッダファイルに表示しているのとは異なるクラス定義を使用していると確信しています。いくつかのファイルを古いバージョンと混在させましたか?また、この種のエラーが発生した場合は、この#ifdefヘッダーのバリアを#pragmaで1回置き換えることをお勧めします(ただし、これは問題ではありません)。 プリコンパイル済みヘッダーを無効にしましたか?また、すべてのヘッダーファイルのデバッグ出力を提供するようにコンパイラーをセットアップします。実際に使用するクラス定義であることを確認してください。 MPU6050_Hのテキスト検索を実行すると、その単一の.hファイルでのみポップアップする必要があります。 – philipp

+0

@ YassinNasriがタイマー変数をコメントアウトすると、エラーが消えてしまい、問題を解決した別のエラーに集中するようになりました。 – Wesley

答えて

1

私は単純な間違いをしたようです。

リストの下にもう少しエラーが表示されたのはunknown declaration of type uint_32で、以前に見ていたエラーの原因となりました。私はuint_32の問題を解決したArduino.hヘッダーを含め、残りのコードが期待通りにコンパイルされるようにしました。

ストーリーのモラルは、上から下にエラーを修正しようとしていません。

関連する問題