MPU-9250 I2C "Accelerometer like" data outputs from the gyroscope register?

I am monitoring the X axis from the gyroscope of a MPU-9250 over I2C with the ultimate goal of using the full XYZ of the gyroscope to control the RGB values of an LED. I am fresh to Arduino so I am keeping it simple by learning how to do one axis at a time, thus I am practicing on only the X axis.

The problem is that when I read from the gyroscope register for the X axis I am getting results that only seem to respond to motion of the IMU chip rather than it’s current position. I have the IMU running to an LCD display updating every half second (500ms) so I can use my laptop for reviewing the register maps thinking that maybe I had the incorrect register and accidentally accessed the accelerometer data but I don’t think so. I am definitely sure that all connections are working and transmitting information to the correct lines, as well as my sensor receiving the correct voltage and proper amperage however I feel like I am falling short of either my software, my understanding of how to read register maps, or my understanding of what kind of data the sensor is outputting.

Hardware Specifications

#include <LiquidCrystal.h>
#include <Wire.h>

#define Gyro_gX 0x44

int Gyro = 0x68;
int gX;

const int V0 = 2, RS = 13, RW = 12, E = 11, D0 = 10, D1 = 9, D2 = 8, D3 = 7, D4 = 6, D5 = 5, D6 = 4, D7 = 3, A = 1;
const int CONTRAST = 100, BACKLIGHT = 30;
LiquidCrystal LCDPanel(RS, RW, E, D0, D1, D2, D3, D4, D5, D6, D7);

void setup() {

  Serial.println("BEGIN SETUP");


  Serial.println("Initializing CONTRAST");
  analogWrite(V0, CONTRAST);
  Serial.println("CONTRAST has initialized.");

  Serial.println("Initializing BACKLIGHT");
  analogWrite(A, BACKLIGHT);
  Serial.println("BACKLIGHT has initialized.");


  Serial.println("Initializing LCDPanel");
  LCDPanel.begin(16, 2);
  Serial.println("LiquidCrystal has initialized.");

  Serial.println("Initializing I2C");


  Serial.println("I2C has initialized.");

  Serial.println("Configuring IMU-9250");

  Wire.write(0x6B); // CTRL_REG1 - Power Mode
  Wire.write(2);   // Normal mode: 15d - 00001111b   
  Wire.write(0x1B); // CTRL_REG4 - Sensitivity, Scale Selection
  Wire.write(01);   // 2000dps: 48d - 00110000b

  Serial.println("IMU-9250 has been configured.");

  Serial.println("Attempting LCDPanel.print(\"0123456789ABCD!?\")");
  Serial.println("Attempt complete.");


  Serial.println("SETUP COMPLETE");


void loop() {  

  Wire.beginTransmission(Gyro); // transmit to device
  Wire.requestFrom(Gyro, 1); 
    LCDPanel.print("Gryo_gX: ");


This is a Google Drive folder of all of my photo attachments because the files were too large for upload.

Rate gyros is what the gyros are really called. The rate gyro gives you the rate of rotation. If there is no rate of rotation then the gyros do not have 'anything' to output. If you want to know the angle of tilt, now, use accelerometer data. I find that a filter of some sort will give the cleanest of readings. I have used a complementary filter which works good for something like an Uno, with limited resources, and a Quaternion filter, with an ESP32, converting the Quaternion values to Euler angles for roll, pitch, and heading.

Thankyou for the help, this helped immensely!