Hej
Du kan sagtens lave noget gennemsnit, men tror ikke det vil hjælpe dig her. Jeg kender DS18B20 og de giver en meget stabil udlæsning. I stedet skal du bruge hysteresis. Desuden tænder og slukker du faktisk udgangene en masser gange. Det går bare så hurtigt at du ikke opdager det

. Du skal i stedet overveje at bruge noget "if else". Der er mange måder at gøre det på, men jeg har prøvet lave lidt ændringer i dit kode. Vil ikke garantere at det virker, da jeg ikke har testet det:
#include <OneWire.h>
#include <DallasTemperature.h>
float Temp1 = 22.0;
float Temp2 = 24.0;
float Temp3 = 26.0;
float Temp4 = 28.0;
float Temp5 = 30.0;
float Temp6 = 32.0;
float Temp7 = 29.0;
float Temp8 = 30.0;
float Temp9 = 31.0;
#define ONE_WIRE_BUS 2
#define K101 3
#define K102 4
#define K103 5
#define K104 6
#define K105 7
#define K106 8
#define K107 9
#define K108 10
// Buffer til opbevaring af værdier mens de behandles
bool K101_buffer = 0;
bool K102_buffer = 0;
bool K103_buffer = 0;
bool K104_buffer = 0;
bool K105_buffer = 0;
bool K106_buffer = 0;
//Værdi der bruges til beregninger:
float current_temp = 0;
float temp_hys = 0.2;//Hysteresis. Prøv at google det. Så står relæerne ikke og danser.
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
void setup(void)
{
Serial.begin(9600);
pinMode(K101, OUTPUT);
pinMode(K102, OUTPUT);
pinMode(K103, OUTPUT);
pinMode(K104, OUTPUT);
pinMode(K105, OUTPUT);
pinMode(K106, OUTPUT);
pinMode(K107, OUTPUT);
pinMode(K108, OUTPUT);
sensors.begin();
}
void loop(void)
{
sensors.requestTemperatures();
float current_temp_unhandled = sensors.getTempCByIndex(0);
Serial.print("Ude Temperatur: ");
Serial.println(current_temp_unhandled);
//Bestemmer om temperaturen skal opdateres. Sikre at relæet ikke danser.
//ABS() tager længden af værdien 10-> 10 og -10 -> 10. Altså fjerner minus fortegn..
if(abs(current_temp_unhandled-current_temp)>temp_hys){
current_temp = current_temp_unhandled;
}else{
Serial.println("Ingen opdatering af temperatur");
}
//I udgangspunktet skal de alle være slukket
K101_buffer = 0;
K102_buffer = 0;
K103_buffer = 0;
K104_buffer = 0;
K105_buffer = 0;
K106_buffer = 0;
if(current_temp >= Temp5)
{
K106_buffer = 1;
/*digitalWrite(K101, LOW);
digitalWrite(K102, HIGH);
digitalWrite(K103, LOW);
digitalWrite(K104, LOW);
digitalWrite(K105, LOW);
digitalWrite(K106, LOW);*/
}
else if(current_temp >= Temp4)
{
K105_buffer = 1;
/*digitalWrite(K101, LOW);
digitalWrite(K102, LOW);
digitalWrite(K103, HIGH);
digitalWrite(K104, LOW);
digitalWrite(K105, LOW);
digitalWrite(K106, LOW);*/
}
else if(current_temp >= Temp3)
{
K104_buffer = 1;
}
else if(current_temp >= Temp2)
{
K103_buffer = 1;
}
else if(current_temp >= Temp1)
{
K102_buffer = 1;
}else {
K101_buffer = 1;
}
//Sender buffer til pins
digitalWrite(K101, K101_buffer);
digitalWrite(K102, K102_buffer);
digitalWrite(K103, K103_buffer);
digitalWrite(K104, K104_buffer);
digitalWrite(K105, K105_buffer);
digitalWrite(K106, K106_buffer);
delay(2000);
}