Need help with mosfet not sending power to heat pad

Hey! so iv been having a problem where when I use a USB connected to my laptop, my Temperature in serial monitor is fine but when I use a 9v battery, the temperature starts to spike randomly which messes my code up because It depends on the temperature sensor being right.

Temperature Sensor = TMP36

/*
Bio Innovation Project
Heat Pad Made For Tendinitis In the Knee
By: Amish  
*/

int led1 = 4; //green led is digital pin 4
int led2 = 5; //red led is digital pin 5
int fet = 3;  //mosfet is digital pin 3
const int HeatOn = 255; // heat pad turns on at 100%
const int HeatOff = 0; //heat pad turns off 
int val; //Create an integer variable
int OverTemp = 184; // Heat Pad is over recommended temp = 40 degress C

void setup()
{
  pinMode(fet, OUTPUT); //mosfet digital pin is OUTPUT
  pinMode(led1, OUTPUT);//led1 digital pin is OUTPUT
  pinMode(led2, OUTPUT);//led2 digital pin is OUTPUT
  Serial.begin(9600); //start serial
  digitalWrite(led2, HIGH); //turn the red led on
  }
  
void loop()
{
////////////////////// Showing Voltage and Celcius in Serial Monitor //////////////////////
val=analogRead(0);      //Read the analog port 0 and store the value in val
  delay(1000);            //Wait one second before we do it again
  
float voltage = val * 5.0 / 1024;  // converting val's reading to voltage

// print out the temperature
float temperatureC = (voltage - 0.5) * 100 ; //converting from 10 mv per degree wit 500 mV offset
//to degrees ((volatge - 500mV) times 100)
Serial.print(temperatureC); Serial.println(" degress C");
delay(1000);
  
///////////////////// Bluetooth Wireless /////////////////////
int blthState = Serial.read(); // Reads the data from the serial port

/////////////////// 100% HEAT ////////////////
 if (blthState == '0') {
  digitalWrite(led1, LOW);// Turn LED OFF
  digitalWrite(led2, HIGH); // Turn LED ON
  analogWrite(fet, HeatOff); //Turn Heat Pad Off
  Serial.println("Heat Pad: OFF"); 
  blthState = 0; //change blthState back to 0
 }
 else if (blthState == '1') {
  digitalWrite(led1, HIGH);//Turn LED ON
  digitalWrite(led2, LOW); //Turn LED OFF
  analogWrite(fet, HeatOff); //Turn Heat Pad Off
  Serial.println("Heat Pad: ON");
  blthState = 0; //turn blthState back to 0

}
//------------\\ Saftey System //-----------//
  if (val >= OverTemp) { //if temperature is over 40 degrees Ceclius
      digitalWrite(led1, LOW);
      Serial.println("Heat Pad: OVERHEATING"); 
      delay(1000); //delay for 1 second 
       analogWrite(fet, HeatOff); //Turn Heat Pad Off
        digitalWrite(led2, LOW);
        delay(1000);
        digitalWrite(led2, HIGH);
        delay(1000);
        digitalWrite(led2, LOW);
        delay(1000);
        digitalWrite(led2, HIGH);
        delay(1000);
        digitalWrite(led2, LOW);
        delay(1000);
        digitalWrite(led2, HIGH);
        delay(1000);
        digitalWrite(led2, LOW);
        delay(1000);
        digitalWrite(led2, HIGH);
        delay(1000);
      digitalWrite(led2, LOW);
        delay(1000);
        digitalWrite(led2, HIGH);
        delay(1000); 
      //tell the red led to blink 10 times when the temperature is overheating
    blthState= 0;
  }
      
}