Cant stop code from being run after reset

Ok then, I got this.

Change the LCD I2C stuff back to your LCD setup.

#include <Wire.h>         //MINE
#include <LiquidCrystal_I2C.h> //MINE

LiquidCrystal_I2C lcd(0x20,20,4); //MINE


#define ledPin  13                  // LED connected to digital pin 13
#define buttonPin 9                 // button on pin 4

int value = LOW;                    // previous value of the LED
int buttonState;                    // variable to store button state
int lastButtonState;                // variable to store last button state
long interval = 100;                // blink interval - change to suit
long previousMillis = 0;            // variable to store last time LED was updated
long startTime ;                    // start time for stop watch
long elapsedTime ;                  // elapsed time for stop watch
int fractional;// variable used to store fractional part of time

boolean start = false;
byte lastbuttonState2 = 0; // new global variable
byte buttonState1 = 0;
byte buttonState2 = 0;

void setup()
{
  Serial.begin(9600);

  lcd.begin(16, 2);
  // Print a message to the LCD.
  lcd.print("Test");

  pinMode(ledPin, OUTPUT);         // sets the digital pin as output

  pinMode(buttonPin, INPUT);       // not really necessary, pins default to INPUT anyway
  digitalWrite(buttonPin, HIGH);   // turn on pullup resistors. Wire button so that press shorts pin to ground.
  lcd.init();                      // initialize the lcd  MINE
  lcd.backlight();              // MINE
}

void loop()
{ 
  buttonState1 = digitalRead(buttonPin);
  delay(20);
  buttonState2 = digitalRead(buttonPin);

  if(buttonState1 == buttonState2) {
    if(buttonState2 == HIGH){
      start = true;
      startTime = millis();
      lastButtonState = buttonState2;
    }
  
  if(start == true){
  elapsedTime =   millis() - startTime;              // store elapsed time
    lastButtonState = buttonState;                     // store buttonState in lastButtonState, to compare next time

    lcd.setCursor(0,1);

    lcd.print("   ");
    // routine to report elapsed time 
    lcd.print( (int)(elapsedTime / 1000UL));         // divide by 1000 to convert to seconds - then cast to an int to print

    lcd.print(".");                             

    fractional = (int)(elapsedTime % 1000UL);

    if (fractional == 0)
      lcd.print("000");     
    else if (fractional < 10)    
      lcd.print("00");       
    else if (fractional < 100)
      lcd.print("0");        

    lcd.print(fractional);  // print fractional part of time 
  }
  }
}

I took everything out of the activate() function, just to test it without the use of any other functions.

Now what this does is it waits for the button to be pressed, in my case buttonState2 = HIGH (yours might be LOW) then starts the timer at 0.000 and counts. It will reset the timer every time the button is pressed.