diff --git a/firmware/drivers/pid_controller/pid_controller.cpp b/firmware/drivers/pid_controller/pid_controller.cpp
index a5d77c5253ed46f0d62f298460c96aa85f16084e..a0132eb2cb60a84be74df13d72e5c479067f95dc 100644
--- a/firmware/drivers/pid_controller/pid_controller.cpp
+++ b/firmware/drivers/pid_controller/pid_controller.cpp
@@ -23,6 +23,7 @@ std::vector<double> Pid_controller::pid_vec_ = {0., 0., 0.}; //current values of
 std::vector<double> Pid_controller::kpid_vec_ = {0., 0., 0.}; //coefficients Kp Ki Kd
 double Pid_controller::I_reset_ = 0.; //reset value of I
 double Pid_controller::I_reset_errsq_ = 0.5; //value of error*error above which the I-term is held in reset
+bool Pid_controller::enabled_ = true;
 
 
 void Pid_controller::init(double setpoint, std::vector<double> kpid, double I_reset, double I_reset_errsq){
@@ -33,6 +34,11 @@ void Pid_controller::init(double setpoint, std::vector<double> kpid, double I_re
 }
 
 void Pid_controller::update_pid(double temperature){
+    if(!enabled_){ //if we have been turned off, stay off
+        output_ = 0.09;
+        Ltc6992::set_level(output_);
+        return;
+    }
     //calculate error from setpoint
     double error = setpoint_ - temperature;
     //update P,I,D
@@ -92,3 +98,12 @@ double Pid_controller::get_I_reset(){
 double Pid_controller::get_setpoint(){
     return setpoint_;
 }
+
+void Pid_controller::turn_off(){
+    output_ = 0.09;
+    enabled_ = false;
+}
+
+void Pid_controller::turn_on(){
+    enabled_ = true;
+}
\ No newline at end of file
diff --git a/firmware/drivers/pid_controller/pid_controller.hpp b/firmware/drivers/pid_controller/pid_controller.hpp
index 4c5bd047e32df6ec5e865158700a0c0aee6c07ec..55e53e8a2001b072d6f1eab10d9fe08561905092 100644
--- a/firmware/drivers/pid_controller/pid_controller.hpp
+++ b/firmware/drivers/pid_controller/pid_controller.hpp
@@ -21,6 +21,9 @@ public:
     static double get_I_reset();
     static double get_setpoint();
 
+    static void turn_off();
+    static void turn_on();
+
 private:
     static double setpoint_; //target temperature in °C
     static double output_; //output to LTC6992
@@ -28,6 +31,8 @@ private:
     static std::vector<double> kpid_vec_; //coefficients Kp Ki Kd
     static double I_reset_; //reset value of I
     static double I_reset_errsq_; //value of error*error above which the I-term is held in reset
+    
+    static bool enabled_;
 };
 
 #endif