mpu 6050 give random values

the values which i get is totally random , when i use this code with my mpu-6050,

i think the control register value i have to change , i try many values after reading datasheet of mpu-6050 but the result is still random.

here is my code

#include <Wire.h> //Include the Wire.h library so we can communicate with the gyro

//Declaring variables
int cal_int;
unsigned long UL_timer;
double gyro_pitch, gyro_roll, gyro_yaw;
double gyro_roll_cal, gyro_pitch_cal, gyro_yaw_cal;
byte highByte, lowByte;

//Setup routine
void setup(){
  Wire.begin();                                      //Start the I2C as master
  Serial.begin(9600);                                //Start the serial connetion @ 9600bps

  //The gyro is disabled by default and needs to be started
  Wire.beginTransmission(0x68);                       //Start communication with the gyro (adress 1101001)
  Wire.write(0x19);                                  //We want to write to register 20
  Wire.write(0);                                  //Set the register bits as 00001111 (Turn on the gyro and enable all axis)
  Wire.endTransmission();                            //End the transmission with the gyro
 Wire.beginTransmission(0x68);                       //Start communication with the gyro (adress 1101001)
 Wire.write(0x00);                                  //We want to write to register 23
 Wire.write(0x00);                                  //Set the register bits as 10000000 (Block Data Update active)
  Wire.endTransmission();                            //End the transmission with the gyro


  delay(250);                                        //Give the gyro time to start
  
  //Let's take multiple samples so we can determine the average gyro offset
  Serial.print("Starting calibration...");           //Print message
  for (cal_int = 0; cal_int < 2000 ; cal_int ++){    //Take 2000 readings for calibration
    gyro_signalen();                                 //Read the gyro output
    gyro_roll_cal += gyro_roll;                      //Ad roll value to gyro_roll_cal
    gyro_pitch_cal += gyro_pitch;                    //Ad pitch value to gyro_pitch_cal
    gyro_yaw_cal += gyro_yaw;                        //Ad yaw value to gyro_yaw_cal
    if(cal_int%100 == 0)Serial.print(".");           //Print a dot every 100 readings
    delay(4);                                        //Wait 4 milliseconds before the next loop
  }
  //Now that we have 2000 measures, we need to devide by 2000 to get the average gyro offset
  Serial.println(" done!");                          //2000 measures are done!
  gyro_roll_cal /= 2000;                             //Divide the roll total by 2000
  gyro_pitch_cal /= 2000;                            //Divide the pitch total by 2000
  gyro_yaw_cal /= 2000;                              //Divide the yaw total by 2000
//  
}
//Main program
void loop(){
  delay(250);                                        //Wait 250 microseconds for every loop  
  gyro_signalen();                                   //Read the gyro signals
  print_output();                                    //Print the output
}

void gyro_signalen(){
  Wire.beginTransmission(0x68);                       //Start communication with the gyro (adress 1101001)
  Wire.write(0x43);                                   //Start reading @ register 28h and auto increment with every read
  Wire.endTransmission();                            //End the transmission
  Wire.requestFrom(0x68, 6);                          //Request 6 bytes from the gyro
  while(Wire.available() < 6);                       //Wait until the 6 bytes are received
  lowByte = Wire.read();                             //First received byte is the low part of the angular data
  highByte = Wire.read();                            //Second received byte is the high part of the angular data
  gyro_roll = ((highByte<<8)|lowByte);               //Multiply highByte by 256 and ad lowByte
  if(cal_int == 2000)gyro_roll -= gyro_roll_cal;     //Only compensate after the calibration
  lowByte = Wire.read();                             //First received byte is the low part of the angular data
  highByte = Wire.read();                            //Second received byte is the high part of the angular data
  gyro_pitch = ((highByte<<8)|lowByte);              //Multiply highByte by 256 and ad lowByte
  gyro_pitch *= -1;                                  //Invert axis
  if(cal_int == 2000)gyro_pitch -= gyro_pitch_cal;   //Only compensate after the calibration
  lowByte = Wire.read();                             //First received byte is the low part of the angular data
  highByte = Wire.read();                            //Second received byte is the high part of the angular data
  gyro_yaw = ((highByte<<8)|lowByte);                //Multiply highByte by 256 and ad lowByte
  gyro_yaw *= -1;                                    //Invert axis
  if(cal_int == 2000)gyro_yaw -= gyro_yaw_cal;       //Only compensate after the calibration
}

void print_output(){
  Serial.print("Pitch:");
  if(gyro_pitch >= 0)Serial.print("+");
  Serial.print(gyro_pitch/57.14286,0);               //Convert to degree per second
  if(gyro_pitch/57.14286 - 2 > 0)Serial.print(" NoU");
  else if(gyro_pitch/57.14286 + 2 < 0)Serial.print(" NoD");
  else Serial.print(" ---");
  Serial.print("  Roll:");
  if(gyro_roll >= 0)Serial.print("+");
  Serial.print(gyro_roll/57.14286,0);                //Convert to degree per second
  if(gyro_roll/57.14286 - 2 > 0)Serial.print(" RwD");
  else if(gyro_roll/57.14286 + 2 < 0)Serial.print(" RwU");
  else Serial.print(" ---");
  Serial.print("  Yaw:");
  if(gyro_yaw >= 0)Serial.print("+");
  Serial.print(gyro_yaw/57.14286,0);                 //Convert to degree per second
  if(gyro_yaw/57.14286 - 2 > 0)Serial.println(" NoR");
  else if(gyro_yaw/57.14286 + 2 < 0)Serial.println(" NoL");
  else Serial.println(" ---");
}

Did you write the sketch yourself ? I'm sorry, but I have a few comments on it : It uses the Wire library in the wrong way; the comments don't match the numbers in the code; shifting a 8-bit variable by 8 bits results in nothing; combining two bytes in a strange way and then converting it to a floating point is very confusing; there is no check if you are actually communicating with the sensor; the 'call_int' will be 2000 forever, that means the program flow is wrong; the layout of the code text is not very nice, are newlines expensive in your country ?

Start with the i2c_scanner to check if the address is 0x68 or 0x69 : Arduino Playground - I2cScanner
I guess it is 0x68, because a part of the sketch is working.
Let the i2c_scanner run for a while to see if everything is stable and okay.

Try the short test code : Arduino Playground - MPU-6050

i changed the values according to mpu-6050, but it did not work.

i bring this code from , this guy had explain a basic functions about quadcopter, as i am new to quadcopter i search on google and found i youtube series that i found nice one.

thanks for the help,