MPU 6050 and relay control

I have a very specific project -
I want to illuminate an LED strip (5v but powered separately) for 7-10 seconds when an a ground mounted upright (a 42 mm pole) receives a contact from a moving object (a ball). My plan is to test if an MPU 6050 interfaced with an Arduino Uno (ultimately an embedded Micro Pro) is capable of detecting contacts across a wide range of conditions from direct hits to very light contacts.

To-date I have managed to upload and run an I2C program that provides a range of variables potentially capable of responding to contacts (the best variables are yet to be determined), -

#include <Wire.h>
long accelX, accelY, accelZ;
float gForceX, gForceY, gForceZ;

long gyroX, gyroY, gyroZ;
float rotX, rotY, rotZ;

void setup() {
  Serial.begin(9600);
  Wire.begin();
  setupMPU();
}


void loop() {
  recordAccelRegisters();
  recordGyroRegisters();
  printData();
  delay(100);
}

void setupMPU(){
  Wire.beginTransmission(0b1101000); //This is the I2C address of the MPU (b1101000/b1101001 for AC0 low/high datasheet sec. 9.2)
  Wire.write(0x6B); //Accessing the register 6B - Power Management (Sec. 4.28)
  Wire.write(0b00000000); //Setting SLEEP register to 0. (Required; see Note on p. 9)
  Wire.endTransmission();  
  Wire.beginTransmission(0b1101000); //I2C address of the MPU
  Wire.write(0x1B); //Accessing the register 1B - Gyroscope Configuration (Sec. 4.4) 
  Wire.write(0x00000000); //Setting the gyro to full scale +/- 250deg./s 
  Wire.endTransmission(); 
  Wire.beginTransmission(0b1101000); //I2C address of the MPU
  Wire.write(0x1C); //Accessing the register 1C - Acccelerometer Configuration (Sec. 4.5) 
  Wire.write(0b00000000); //Setting the accel to +/- 2g
  Wire.endTransmission(); 
}

void recordAccelRegisters() {
  Wire.beginTransmission(0b1101000); //I2C address of the MPU
  Wire.write(0x3B); //Starting register for Accel Readings
  Wire.endTransmission();
  Wire.requestFrom(0b1101000,6); //Request Accel Registers (3B - 40)
  while(Wire.available() < 6);
  accelX = Wire.read()<<8|Wire.read(); //Store first two bytes into accelX
  accelY = Wire.read()<<8|Wire.read(); //Store middle two bytes into accelY
  accelZ = Wire.read()<<8|Wire.read(); //Store last two bytes into accelZ
  processAccelData();
}

void processAccelData(){
  gForceX = accelX / 16384.0;
  gForceY = accelY / 16384.0; 
  gForceZ = accelZ / 16384.0;
}

void recordGyroRegisters() {
  Wire.beginTransmission(0b1101000); //I2C address of the MPU
  Wire.write(0x43); //Starting register for Gyro Readings
  Wire.endTransmission();
  Wire.requestFrom(0b1101000,6); //Request Gyro Registers (43 - 48)
  while(Wire.available() < 6);
  gyroX = Wire.read()<<8|Wire.read(); //Store first two bytes into accelX
  gyroY = Wire.read()<<8|Wire.read(); //Store middle two bytes into accelY
  gyroZ = Wire.read()<<8|Wire.read(); //Store last two bytes into accelZ
  processGyroData();
}

void processGyroData() {
  rotX = gyroX / 131.0;
  rotY = gyroY / 131.0; 
  rotZ = gyroZ / 131.0;
}


void printData() {
  Serial.print("Gyro (deg)");
  Serial.print(" X=");
  Serial.print(rotX);
  Serial.print(" Y=");
  Serial.print(rotY);
  Serial.print(" Z=");
  Serial.print(rotZ);
  Serial.print(" Accel (g)");
  Serial.print(" X=");
  Serial.print(gForceX);
  Serial.print(" Y=");
  Serial.print(gForceY);
  Serial.print(" Z=");
  Serial.println(gForceZ);

}

I have also managed to find a relay program (and breadboard circuit with 5v relay, diode, 2n222 transistor and 1K resistor) which works well with the following code -

// connect digital pin 8 to the transistor, via a resistor
int led = 8;

// the setup routine runs once when you press reset:
void setup() {                
// initialize the digital pin as an output.
pinMode(led, OUTPUT);  
}

// the loop routine runs over and over again forever:
void loop() {

delay(5000);               // wait for 5 seconds
digitalWrite(led, HIGH);   // turn the relay off
delay(5000);               // wait for a second
digitalWrite(led, LOW);    // turn the relay on
}

My main question is - how can I link these sketches so that a specific output from the 6050 might trigger a change in the relay state.
I don't need the Serial.print output.
I want the main MPU program to return to the state where it reads the 6050 output ready for the next impact contact.

As an inexperienced Arduino user (I bought a Uno 5 days ago) I suspect that I need to become familiar with Interrupts (ISRs). If this is the case I would very much welcome some help and guidance.

GB

You do not need to use interrupts.

To get the two functions to work together you must not use any delay functions. Look at the how to do several things at once sticky post. Or google state machine.

Thanks for your quick response.
I was thinking that they were 2 separate programs rather than separate functions.
The main i2C program reads the 6050 output and I then need to trigger the relay when a specific value(s) is read.
I will read the several things at once post.
Thanks again.
GB

how can I link these sketches so that a specific output from the 6050 might trigger a change in the relay state.

Use the if statement to control the state of the relay when you read a certain value from the 6050, like this:-

if(rotX > 300.0){
     digitalWrite(led, LOW);    // turn the relay on
 }
else {
    digitalWrite(led, HIGH);   // turn the relay off
}

Why use the name led for the relay control when it is not an led. Using variables whose name reflects something about its function.