(SOLUCIONADO) Problema con setpoint control pid

Hola comunidad tengo el siguiente codigo que es un control pid, el cual controla las rpm de un cooler para enfriar al ds1820.

Tengo dos botones los cuales quiero usar para subir o bajar el setpoint, pero al armar todo y pulsar los botones lo pasa nada ni baja ni sube el setpoint, no se en que le estoy errando si me echan una mano se lo agradeceria. Desde ya mucchas gracias.

El codigo:

#include <OneWire.h>
#include <DallasTemperature.h>
#include <PID_v1.h>
#include <LiquidCrystal.h>
 
//Definitions
#define FAN 9          
#define ONE_WIRE_BUS 8


#define CRITICAL 50.00  
 

 
LiquidCrystal lcd(12, 11, 13, 5,6,7);  

const int  SetTempUp = 4;   
const int  SetTempDown = 2; 

int TempButtonUpState = 0;   
int TempButtonDownState = 0; 
int lastTempButtonState = 0;
int TemButtonCounter = 0;
 
//Setup Temperature Sensor
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
 
//Setup PID
double Setpoint, Input, Output;                                             
double aggKp=40, aggKi=2, aggKd=10;                                        
double consKp=20, consKi=1, consKd=5;                                       
PID myPID(&Input, &Output, &Setpoint, consKp, consKi, consKd, REVERSE);  
 

int timeCounter;




void setup()
{  

  Serial.begin(9600);
  Serial.println("Start");
 
  //Temperature Setup
  sensors.begin();                   
  sensors.requestTemperatures();     
  Input = sensors.getTempCByIndex(0); 
  Setpoint = 01;   

  pinMode(SetTempUp, INPUT);
  pinMode(SetTempDown, INPUT);




 
  //PID Setup
  myPID.SetMode(AUTOMATIC);
  //TCCR2B = TCCR2B & 0b11111000 | 0x01;  
 
  //Setup Pins
  pinMode(FAN, OUTPUT);                   
                
 
  //Set up Interupts
  attachInterrupt(0, pulls, CHANGE);  
 
  //interface
  timeCounter=0;
 

  lcd.begin(16, 2);

}
void loop()
{

   timeCounter++;
 

   sensors.requestTemperatures();
   Input=sensors.getTempCByIndex(0);
 

  lcd.clear();
  lcd.setCursor(1,0);
  lcd.print("Temp:");
  lcd.print((int)Input);
  lcd.setCursor(9,0);
  lcd.print("RPM:");
  lcd.print((int)Output*4.7059);    
  lcd.setCursor(1,1);
  lcd.print("Set:");
  lcd.print((int)Setpoint);
 
 
  double gap = abs(Setpoint-Input); 
  if(gap<1)
  {  
  
    myPID.SetTunings(consKp, consKi, consKd);
  }
  else
  {
  
     myPID.SetTunings(aggKp, aggKi, aggKd);
  } 
  myPID.Compute();
  Serial.print(timeCounter);
  Serial.print(" ");
  Serial.print(Input);
  Serial.print(" ");
  Serial.println(Output);
  analogWrite(FAN,255);

  if (Input<CRITICAL)
    analogWrite(FAN,Output);
  else
    analogWrite(FAN,255);
}
 
void pulls()
{
  
   TempButtonUpState = digitalRead(SetTempUp);
 

   if (TempButtonUpState != lastTempButtonState) {
     
     
     if (TempButtonUpState == HIGH)
     {
      TemButtonCounter++;
     }
      
  }

   lastTempButtonState = TempButtonUpState;
   Setpoint=TemButtonCounter;
   
   
   TempButtonDownState = digitalRead(SetTempDown);

   if (SetTempDown != lastTempButtonState) {
     
     
     if (SetTempDown == HIGH)
     {
      TemButtonCounter--;
     }
      
   }
   lastTempButtonState = SetTempDown;
Setpoint=TemButtonCounter;
 
}

Ya lo solucione, era una tonteria no habia llamado la funcion pulls() en el loop, :-[ :-[ y modifique la lectura de los botones…

#include <OneWire.h>
#include <DallasTemperature.h>
#include <PID_v1.h>
#include <LiquidCrystal.h>
 
//Definitions
#define FAN 9          
#define ONE_WIRE_BUS 8


#define CRITICAL 50.00  
 

 
LiquidCrystal lcd(12, 11, 13, 5,6,7);  

const int  SetTempUp = 4;   
const int  SetTempDown = 3; 

int TempButtonUpState = 0;   
int TempButtonDownState = 0; 
int lastTempButtonState = 0;
int TemButtonCounter = 0;
 
//Setup Temperature Sensor
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
 
//Setup PID
double Setpoint, Input, Output;                                             
double aggKp=40, aggKi=2, aggKd=10;                                        
double consKp=20, consKi=1, consKd=5;                                       
PID myPID(&Input, &Output, &Setpoint, consKp, consKi, consKd, DIRECT);  
 

int timeCounter;




void setup()
{  

  Serial.begin(9600);
  Serial.println("Start");
 
  //Temperature Setup
  sensors.begin();                   
  sensors.requestTemperatures();     
  Input = sensors.getTempCByIndex(0); 
  Setpoint = 1;   

  pinMode(SetTempUp, INPUT);
  pinMode(SetTempDown, INPUT);


Setpoint=TemButtonCounter;

 
  //PID Setup
  myPID.SetMode(AUTOMATIC);
  //TCCR2B = TCCR2B & 0b11111000 | 0x01;  
 
  //Setup Pins
  pinMode(FAN, OUTPUT);                   
                
 
  //Set up Interupts
  attachInterrupt(0, pulls, CHANGE);  
 
  //interface
  timeCounter=0;
 
  //Setup LCD 16x2 and display startup message
  lcd.begin(16, 2);
  lcd.print("  Smart   Fan");
  lcd.setCursor(0,1);
  lcd.print("  Starting Up");
  delay(1000);
  lcd.clear();
}
void loop()
{
pulls();
   timeCounter++;
 
   //Get temperature and give it to the PID input
   sensors.requestTemperatures();
   Input=sensors.getTempCByIndex(0);
 
  //print out info to LCD
  lcd.clear();
  lcd.setCursor(1,0);
  lcd.print("Temp:");
  lcd.print((int)Input);
  lcd.setCursor(9,0);
  lcd.print("RPM:");
  lcd.print((int)Output*4.7059);    
  lcd.setCursor(1,1);
  lcd.print("Set:");
  lcd.print((int)Setpoint);
 
  //Compute PID value
  double gap = abs(Setpoint-Input); 
  if(gap<1)
  {  
  
    myPID.SetTunings(consKp, consKi, consKd);
  }
  else
  {
     //Far from Setpoint, be aggresive
     myPID.SetTunings(aggKp, aggKi, aggKd);
  } 
  myPID.Compute();
  Serial.print(timeCounter);
  Serial.print(" ");
  Serial.print(Input);
  Serial.print(" ");
  Serial.println(Output);
  analogWrite(FAN,255);

  if (Input<CRITICAL)
    analogWrite(FAN,Output);
  else
    analogWrite(FAN,255);
}
 
void pulls()
{
  
     if(digitalRead(SetTempUp)==1) {
    TemButtonCounter++;

  } else if (digitalRead(SetTempDown) == 1) {
    TemButtonCounter--;

  }

  Setpoint = TemButtonCounter;
}