首先让我先说这是MAX32微控制器的代码。我遇到问题的代码是用c ++编写的。我正在为这个项目创建的一些文件
所以我一直在努力工作几个小时,我找不到我的代码有什么问题。 我在C ++上有点生疏,但代码似乎没错。
我得到的错误是
Senior_Design.cpp.o:在函数setup':
/privateSenior_Design.cpp:13: undefined reference to
Accelerometer :: setup()'中
Senior_Design.cpp.o:在函数loop':
/privateSenior_Design.cpp:20: undefined reference to
Accelerometer :: read()'
Senior_Design.cpp.o:在函数__static_initialization_and_destruction_0':
/privateSenior_Design.cpp:7: undefined reference to
Accelerometer :: Accelerometer(long)'中
collect2:ld返回1退出状态
主代码名为“senior_design”,它是
#include <Wire.h>
#include "accel.h"
Accelerometer bodyAccel = Accelerometer(321);
void setup(void){
Serial.begin(9600);
//Wire.begin(); // join i2c bus (address optional for master)
if( !bodyAccel.setup() ){
Serial.println("Error with accelerometer");
while(1);
}
}
void loop(void){
bodyAccel.read();
Serial.print("Accel. Reading: ");
Serial.println(bodyAccel.x);
Serial.println(bodyAccel.y);
Serial.println(bodyAccel.z);
delay(1000);
}
我将使用这两个其他文件。这个是accel.cpp文件
#include "accel.h"
#include <Wire.h>
#include "WProgram.h"
#include <limits.h>
static float Accel_MG_LSB = 0.001f;
Accelerometer::Accelerometer(long sensorID){
sensor_ID = sensorID;
}
void Accelerometer::read(){
Wire.beginTransmission( (byte)accelAddr );
delay(50);
Wire.send(accelXRegAddr | 0x80);
Wire.endTransmission();
delay(50);
Wire.requestFrom( (byte)accelAddr, (byte)6 );
while(Wire.available() < 6);
xlo = Wire.receive();
xhi = Wire.receive();
ylo = Wire.receive();
yhi = Wire.receive();
zlo = Wire.receive();
zhi = Wire.receive();
accelDatax = (int16_t)(xlo | (xhi << 8)) >> 4;
accelDatay = (int16_t)(ylo | (yhi << 8)) >> 4;
accelDataz = (int16_t)(zlo | (zhi << 8)) >> 4;
x = accelDatax * Accel_MG_LSB * 9.8;
y = accelDatay * Accel_MG_LSB * 9.8;
z = accelDataz * Accel_MG_LSB * 9.8;
}
bool Accelerometer::setup(){
Wire.begin();
//Enable 100Hz on accelerometer
Wire.beginTransmission(accelAddr);
Wire.send(0x20);
Wire.send(0x57);
Wire.endTransmission();
Wire.beginTransmission(accelAddr);
Wire.send(0x20);
Wire.endTransmission();
Wire.requestFrom(accelAddr, (byte)1);
uint8_t reg = Wire.receive();
Wire.endTransmission();
if(reg != 0x57)
return false;
return true;
}
及其头文件(accel.h)
#ifndef accel_h
#define accel_h
#include "WProgram.h"
#include <Wire.h>
#define accelAddr (0x32 >> 1)
#define accelXRegAddr 0x28
class Accelerometer{
public:
Accelerometer(long sensorID = -1);
void read(void);
bool setup(void);
float x;
float y;
float z;
private:
long sensor_ID;
uint8_t xlo;
uint8_t xhi;
uint8_t ylo;
uint8_t yhi;
uint8_t zlo;
uint8_t zhi;
float accelDatax;
float accelDatay;
float accelDataz;
};
#endif /* accel_h */