Error While writing Library for Gy521
-
I'm trying to make an Arduino library for GY521. Created .cpp and .h files and also completed the code. But I'm getting an error while calling library function via main code.
look my code below or via project repo
Accelometer:10:7: error: request for member 'getAcData' in 'goo', which is of non-class type 'Gy521()' goo.getAcData(); ^~~~~~~~~ Accelometer:11:7: error: request for member 'getGyData' in 'goo', which is of non-class type 'Gy521()' goo.getGyData();
Accelometer.ino (main code):
//#include <Wire.h> #include "Gy521.h" Gy521 goo(); void setup(){ Serial.begin(9600); } void loop(){ goo.getAcData(); goo.getGyData(); }
Gy521.cpp
#include "Gy521.h" #include "Arduino.h" #include <Wire.h> Gy521::Gy521() { Wire.begin(); Wire.beginTransmission(_MPU); Wire.write(0x6B); Wire.write(0); Wire.endTransmission(true); } void Gy521::getAcData(){ Wire.beginTransmission(_MPU); Wire.write(0x3B); Wire.endTransmission(false); Wire.requestFrom(_MPU,6,true); AcX=Wire.read()<<8|Wire.read(); AcY=Wire.read()<<8|Wire.read(); AcZ=Wire.read()<<8|Wire.read(); Serial.print("Accelerometer: "); Serial.print("X = "); Serial.print(AcX); Serial.print(" | Y = "); Serial.print(AcY); Serial.print(" | Z = "); Serial.println(AcZ); } void Gy521::getGyData(){ Wire.beginTransmission(_MPU); Wire.write(0x43); Wire.endTransmission(false); Wire.requestFrom(_MPU,6,true); GyX=Wire.read()<<8|Wire.read(); GyY=Wire.read()<<8|Wire.read(); GyZ=Wire.read()<<8|Wire.read(); Serial.print("Gyroscope: "); Serial.print("X = "); Serial.print(GyX); Serial.print(" | Y = "); Serial.print(GyY); Serial.print(" | Z = "); Serial.println(GyZ); Serial.println(" "); delay(100); }
Gy521.h
#ifndef Gy521_h #define Gy521_h #include "Arduino.h" class Gy521 { public: Gy521(); void getAcData(); void getGyData(); int16_t GyX,GyY,GyZ; int16_t AcX,AcY,AcZ; private: const int _MPU = 0x68; }; #endif
:- This is my first try to make an Arduino Library
-
When you want to create an object of a class and it doesn't take in any parameters, then
Gy521 goo; //object declaration
is enough. Then invoke the initialization function,
goo.begin(); //initialization
For that, you need to create an initialization function. You can copy the statements in your constructor there.
-
@vishnumaiea Thank you. I made the changes, it worked well.
Next, I want to return 3 variables in getAcData() function. Is there any way to do this ? Can i access AcX,AcY,AcZ globally via main code. -
@rafitc99 The member variables of a class can not be accessed without an accompanying object; that's the concept of a class. If you want to return three values, simply update the member variables AcX, Ac and AcZ, and access them as,
Serial.println(goo.AcX); Serial.println(goo.AcY); Serial.println(goo.AcZ);
-
Serial.println(goo.AcX); Serial.println(goo.AcY); Serial.println(goo.AcZ);
while using above code, I'm getting '0'. not updating,
-
@rafitc99 is it fixed ?,u found a solution?
-
@saheen_palayi Nop, while calling goo.AcX getting zero as output. not getting updated value.
-
@rafitc99 I dont think u can access those like that did you tried those lines after
goo.getAcData(); goo.getGyData();
-
@saheen_palayi yeah! that was the problem. Now it's worked. Thank you @saheen_palayi and @vishnumaiea
-
@rafitc99 What was the solution?