MakerGram Logo

    MakerGram

    • Register
    • Login
    • Search
    • Categories
    • Recent
    • Popular
    • Tags
    • Users
    • Groups

    Error While writing Library for Gy521

    General Discussion
    4
    12
    245
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • rafitc99
      rafitc99 last edited by

      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 🙂

      1 Reply Last reply Reply Quote 1
      • vishnumaiea
        vishnumaiea last edited by

        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.

        rafitc99 1 Reply Last reply Reply Quote 1
        • rafitc99
          rafitc99 @vishnumaiea last edited by

          @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.

          vishnumaiea 1 Reply Last reply Reply Quote 1
          • vishnumaiea
            vishnumaiea @rafitc99 last edited by

            @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);
            
            rafitc99 1 Reply Last reply Reply Quote 2
            • rafitc99
              rafitc99 @vishnumaiea last edited by

              @vishnumaiea

              Serial.println(goo.AcX);
              Serial.println(goo.AcY);
              Serial.println(goo.AcZ);
              

              while using above code, I'm getting '0'. not updating,

              saheen_palayi 1 Reply Last reply Reply Quote 0
              • saheen_palayi
                saheen_palayi @rafitc99 last edited by

                @rafitc99 is it fixed ?,u found a solution?

                rafitc99 1 Reply Last reply Reply Quote 0
                • rafitc99
                  rafitc99 @saheen_palayi last edited by

                  @saheen_palayi Nop, while calling goo.AcX getting zero as output. not getting updated value.

                  saheen_palayi 1 Reply Last reply Reply Quote 0
                  • saheen_palayi
                    saheen_palayi @rafitc99 last edited by

                    @rafitc99 I dont think u can access those like that did you tried those lines after

                     goo.getAcData();
                     goo.getGyData();
                    
                    rafitc99 1 Reply Last reply Reply Quote 1
                    • rafitc99
                      rafitc99 @saheen_palayi last edited by

                      @saheen_palayi yeah! that was the problem. Now it's worked. Thank you @saheen_palayi and @vishnumaiea

                      salmanfaris 1 Reply Last reply Reply Quote 1
                      • salmanfaris
                        salmanfaris @rafitc99 last edited by

                        @rafitc99 What was the solution?

                        rafitc99 1 Reply Last reply Reply Quote 0
                        • First post
                          Last post

                        Recent Posts

                        • Hi team,

                          Any one have experience in Altium schematic designing.
                          I am facing some issue in Hierarchy->harness in Schematic.
                          The offpage number for harness is not showing, and while generation the smart PDF if we click the harness port /green box the page want to go there automatically, but that also not working.

                          • read more
                        • D

                          @salmanfaris thank you so much man, I'll try this and update you shortly. Thank you once again.

                          Best,
                          Dipu

                          • read more
                        • Hi @dipu_varghese ,

                          Here is the sample input from the binary edge impulse inference,

                          Predictions (DSP: 16 ms., Classification: 1 ms., Anomaly: 2 ms.): idle: 0.91016 snake: 0.08203 updown: 0.00391 wave: 0.00391 anomaly score: -0.067”

                          And from here for example we can try to get the updown values only by attaching the device to another controller and read the Serial string directly.

                          void setup() { // Start serial communication at 9600 baud Serial.begin(9600); } void loop() { // Wait until there is data available on the serial port while (!Serial.available()) { // Do nothing } // Read the input string from the serial port String inputString = Serial.readStringUntil('\n'); // Find the position of the "updown" value in the input string int updownPos = inputString.indexOf("updown:"); // If the "updown" value was found in the input string if (updownPos >= 0) { // Extract the "updown" value from the input string String updownString = inputString.substring(updownPos + 8, inputString.indexOf('\n', updownPos)); // Convert the "updown" value to a float float updownValue = updownString.toFloat(); // Output the "updown" value Serial.println(updownValue); } }

                          The sketch should then output the "updown" value, which is 0.08203.

                          Hope this will be helpful, let me know if you need more clarification.

                          • read more
                        • D

                          @salmanfaris any updates?

                          Best,
                          Dipu

                          • read more
                        • D

                          @salmanfaris Hope you're doing well, did you get sometime to work on this?

                          Best,
                          Dipu

                          • read more
                        By MakerGram | A XiStart Initiative | Built with ♥ NodeBB
                        Copyright © 2023 MakerGram, All rights reserved.
                        Privacy Policy | Terms & Conditions | Disclaimer | Code of Conduct