Pid'li termostat projemde rakamlar sürekli değişiyor

yaptığım bu projemi kuluçka makinesinde kullacağım fakat ısı ve nem değerini butonla 2 farklı ayara getiriyorum rakamlar birindeyken sıkıntı yok ama buton diğer yöndeyken sürekli iki ayar arasında git gel yapıyor ekranda

yani mesela; iki değer var biri 37 diğeri 38, buton açık konumda 37 yi göstermeli, kapalı konumda 38: FAKAT açık konumda 37 iken kapalı konuma getirince sürekli 37-38 arasında değişip duruyor.
sıkıntım bu

belki kodlarda sıkıntı vardır diye koyuyorum buraya

#include <PID_v1.h>
// #include “DHT.h”
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include “SHT31.h”

LiquidCrystal_I2C lcd(0x27,16,2);

                                                       //-----------------------** // pin ayarlama kısımı

//#define DHTPIN 2 //dht 22 bağlantı pini 2
#define PIN_OUTPUT 6 // rezistans pini 6
#define nemmakine 8 // nemrolesi pini 8
#define switcbuton 13 //anahtarbuton pini 13
#define cevirmerole 11 // cevirmerole pin 11

uint32_t start;
uint32_t stop;

SHT31 sht;

//#define DHTTYPE DHT22
//DHT dht(DHTPIN, DHTTYPE);

                 //-----------------------------//

double Setpoint, Input, Output; // Değişkenleri tanımlıyoruz.
double Kp=1200, Ki=200, Kd=950; // Ayar parametrelerimizi tanımlayıp belirliyoruz.
PID myPID(&Input, &Output, &Setpoint, Kp, Ki, Kd, DIRECT);

int WindowSize = 1000; // Pulse için belirlediğimiz maksimum süre.
unsigned long windowStartTime;
unsigned long zaman = 0, eskizaman = 0;
void setup()
{
Wire.begin();
sht.begin(0x44); //SHT31 I2C Address
Serial.begin(9600);

lcd.init();
lcd.backlight();
// dht.begin();
Wire.setClock(100000);
uint16_t stat = sht.readStatus();
Serial.print(stat, HEX);
Serial.println();

pinMode(cevirmerole,OUTPUT);
pinMode(nemmakine,OUTPUT);
pinMode(PIN_OUTPUT,OUTPUT);
pinMode(switcbuton,INPUT);

float Setpoint;

windowStartTime = millis();  // Değişkenlerimizi atıyoruz, analog iletişimi başlatıyoruz.
myPID.SetOutputLimits(0, WindowSize);     // PWM işleminin gerçekleşme süre aralığını belirliyoruz.
myPID.SetMode(AUTOMATIC);                 // PID kontrolörümüzü açıyoruz.

}
void loop()
{

sht.read();

Serial.print(“Temperature:”);
Serial.print(sht.getTemperature(), 1);
Serial.print("\t");
Serial.print(“Humidity:”);
Serial.println(sht.getHumidity(), 1);

zaman = millis();
unsigned long fark = zaman - eskizaman;

Input = sht.getTemperature(); // PID kontrolörümüze göre rölenin açık duruma geçmesi
myPID.Compute(); // veya kapalı duruma geçmesini sağlayan kod.
float nem = sht.getHumidity();
float setnem;
//---------------------------------------------------------//
int anahtarbuton=digitalRead(13);
if(anahtarbuton==0)
{
Setpoint=37.70; //37,70
setnem=55,70; //55,70
}
else
{
Setpoint=37.20; //37,20
setnem=68,50; //68,50
}

//-------------------------------------------------------//

if (millis() - windowStartTime > WindowSize)
{
windowStartTime += WindowSize;
}
if (Output > millis() - windowStartTime) {
digitalWrite(PIN_OUTPUT, HIGH); }
else {
digitalWrite(PIN_OUTPUT, LOW);
}
//--------------------------------------------------//

if(nem <= setnem)
{
digitalWrite(nemmakine,LOW);
}
if (nem >= setnem)
{
digitalWrite(nemmakine,HIGH);
}

//----------------------------------------------------//

if (fark <= 7200000)
{
digitalWrite(cevirmerole,HIGH);
}
else if ( fark <= 7215000)
{
digitalWrite(cevirmerole, LOW);
}
else
{
eskizaman = zaman;
}

//--------------------------------------------------//
lcd.setCursor(0,0);
lcd.print(“SI:”);
lcd.print(Setpoint);
lcd.setCursor(0,1);
lcd.print(“SN:”);
lcd.print(setnem);

lcd.setCursor(9,0);
lcd.print(“I:”);
lcd.print(Input);
lcd.setCursor(9,1);
lcd.print(“N:”);
lcd.print(nem);

}

yazılım içeriğini code penceresi içerisinde paylaşır mısınız.