0

First let me start off by saying this is code for a MAX32 Microcontroller. The code that i'm having issues with is written in c++. Its some files that i'm creating for this project

So i've been working on this for hours and I can't find whats wrong with my code. I'm a little rusty at C++ but the code seems right.

the error i get is

Senior_Design.cpp.o: In function setup': /privateSenior_Design.cpp:13: undefined reference toAccelerometer::setup()' Senior_Design.cpp.o: In function loop': /privateSenior_Design.cpp:20: undefined reference toAccelerometer::read()' Senior_Design.cpp.o: In function __static_initialization_and_destruction_0': /privateSenior_Design.cpp:7: undefined reference toAccelerometer::Accelerometer(long)' collect2: ld returned 1 exit status

The main code is called "senior_design" and it is

#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);
}

i have these two other files that will be used. This one is the accel.cpp file

#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;    
}

and the header file for it (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 */
arodriguezdonaire
  • 5,396
  • 1
  • 26
  • 50
  • 4
    And you actually *build* with the `accel.cpp` source file? It's in your *project* (and not only in the project *directory*) and is compiled into an object file that is linked into the binary? – Some programmer dude Mar 03 '16 at 12:02
  • 1
    First guess: You did not link your files properly. – knivil Mar 03 '16 at 12:02
  • It sounds like your build environment is either missing accel.cpp or otherwise botching the build. What build system are you using? –  Mar 03 '16 at 12:18
  • It works(sort of), literally all i had to do was restart the IDE. Thought that as you hit the compile button it would compile everything. – droltseknad Mar 03 '16 at 23:51

0 Answers0