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


  • @vishnumaiea

    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?


Log in to reply
 

Recent Posts

  • read more
  • Hi @Akhil I found the following answer in one of the forums. here is the link to the thread.

    The way that I've seen most people do it (have a look on the Raspberry Pi forums), and have done myself with success is using /etc/rc.local.

    All you need to do here is put ./myscript in the rc.local text file. If it's in python, put python myscript.py.

    This literally is "a simple solution, (like dropping my script in some "startup" directory or something similar)"- maybe search on the forums when you're having questions as well, this solution came up on the first 4 results of a google search!

    read more
  • i need to run a QT application on BOOT. and i want to disable all controls like minimize application, close application.
    Anyone have experience in this? please help me.
    THANKS!

    read more
  • @mubassir-mk Glad that it helped.

    read more
  • M

    @kowshik1729 Thank you....
    Very help full your replay ...

    read more