Okay so i made some adjustments to my code, with the watchdog timer and millisDelay.
il would very much like to know if im doing anything wrong 
Some of comments and varaiables is writen in danish
#include <EEPROM.h>
#include <LiquidCrystal.h>
#include <MovingAverageFilter.h>
#include <avr/wdt.h>
#include <millisDelay.h>
MovingAverageFilter movingAverageFilter(10); //Gennemsnitet vil blive udregnet efter 10 mÄlinger, dette kan forÞges hvis der Þnskes et mere prÊcist gennemsnit.
int Pumpe = A4;
int Niveau_kontakt = 11;
float tempPin = A5;
int Jordfugtighed = A3;
millisDelay Temp;
millisDelay Soil;
millisDelay Pump;
const unsigned long TempTime = 1000;
const unsigned long PumpRunTime = 2000;
const unsigned long SoilCheckTime = 60000;
// LCD opsĂŠtning
const int rs = 10, en = 9, d4 = 8, d5 = 7, d6 = 6, d7 = 5; // pins
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
// Variabler til jordfugtighedsmÄleren
const int AirValue = 592; //you need to replace this value with Value_1
const int WaterValue = 278; //you need to replace this value with Value_2
int intervals = (AirValue - WaterValue) / 3;
int soilMoistureValue = 0;
int SoilMoistureLevel = 0;
int SoilState;
bool LowWaterLevel = false;
bool FirstScan = true;
// Variabler til temperatur mÄling
float TempVal;
float NuvaerendeTemp; // Den nuvĂŠrende temperatur
//----------------------------------------------------------------------------------------//
void setup() {
pinMode(Pumpe, OUTPUT);
pinMode(Niveau_kontakt, INPUT);
pinMode(tempPin, INPUT);
pinMode(Jordfugtighed, INPUT);
analogRead (A0); // force voltage reference to be turned on
analogRead (A1); // force voltage reference to be turned on
Serial.begin(9600);
lcd.begin(20, 4);
digitalWrite(Pumpe, HIGH);
// Watchdog timer sat til 4 sekunder
wdt_enable(WDTO_4S);
}
void loop() {
wdt_reset(); //Starter watchdog timer forfra.
lcd.setCursor(0, 1);
lcd.print("Jorden = ");
lcd.setCursor(0, 2);
lcd.print("Temperatur = ");
// NÄr JordfugtighedsmÄleren skal testes bruges dette stykke kode, som mÄler vÊrdien for hvad der er luft og hvad der er vand
/*
int val;
val = analogRead(A3); //connect sensor to Analog 0
Serial.println(val); //print the value to serial port
delay(100);
*/
// Hvis vandniveauet bliver for lavt vil en flydekontakt blive hĂžj og slukke for pumpen
if (digitalRead(Niveau_kontakt) == HIGH) { //Start if
// Serial.println("Vand niveau er lavt"); // Hvis vand niveauet bliver lavt skrives en besked til serial om at niveauet er lavt
LowWaterLevel = true;
digitalWrite(Pumpe, HIGH); // Pumpe OFF
lcd.setCursor(0, 0);
lcd.print("Vand niveau lavt");
}//End if
else {
LowWaterLevel = false;
lcd.setCursor(0, 0);
lcd.print(" ");
}
if (!Soil.isRunning()) { // Hvis "Soil" ikke tÊller sÄ skal den starte den og take en mÄling af jorden. Denne mÄde gÞr ogsÄ at det fÞrste scan vil mÄlingen blive taget da tiden ikke er startet i nu.
SoilCheck();
Soil.start(SoilCheckTime);
}
if (SoilState == 3) {
SoilState = 0;
if (LowWaterLevel == false) {
Pump.start(PumpRunTime); // Start pumpen i 2 sekunder
}
}
if (Pump.isRunning()) { //Hvis tiden er startet, startes pumpen.
digitalWrite(Pumpe , LOW);
// Serial.println("Pumpe ON");
}
if (Pump.justFinished()) { // NÄr tiden er gÄet stoppes pumpen.
digitalWrite(Pumpe, HIGH);
// Serial.println("Pumpe OFF");
}
if (!Temp.isRunning()) { // Hvis tiden for temperatur mÄlingen ikke er i gang tages en mÄling og tiden startes.
TempMaalling();
Temp.start(TempTime);
}
}//Void loop end
// MÄling og udregning af temperaturen. Temperaturen kan visses med decimaltal.
void TempMaalling() {
TempVal = analogRead(tempPin);
float Voltage = TempVal * (5000 / 1024.0); // Udregning af spÊndnings oplÞsning. Da refferencen er 5V(5000mV) og det analog input bruger 10 bit som ogsÄ svare til 0 - 1023.
float cel = Voltage / 10; // NÄr temperaturen stiger 1 grad celsius stiger spÊndingen med 10 mV og ved 25 grader celsius er spÊndingen 250 mV.
// Temperaturen skrives til LCD skrĂŠmen
if ( cel != NuvaerendeTemp) {
NuvaerendeTemp = cel;
lcd.setCursor(14, 2);
lcd.print(cel);
lcd.print("C°");
Serial.print("TEMPRATURE = ");
Serial.print(cel);
Serial.print("C°");
Serial.println();
}
}
// MÄlling af jord fugtigheden
void SoilCheck() {
float soilMoistureValue_Paletblad = analogRead(A3);
float input = soilMoistureValue_Paletblad; // Input til udregning af gennemsnits jordfugtighed.
float output = 0;
for (int n = 0; n < 10 + 2; n++) // For loop for gennemsnits udregning
{
output = movingAverageFilter.process(input); // Udregning af det sammelagte gennemsnits resultat fra jordmÄling
}
// MÄling af jordfugtighed som om dannes til info om jorden er tÞr, vÄd eller meget vÄd som bliver sendt til serial.
SoilState = Soil_Moisture(output, 1);
Serial.println(output);
}
I forgot to post the code where I calculate the soil moisture, so here it is.
int Soil_Moisture(float soilMoistureValue, int Row) {
if (soilMoistureValue > WaterValue && soilMoistureValue < (WaterValue + intervals)) {
Serial.println("Very Wet");
lcd.setCursor(10, Row); // cursoren sÊttes pÄ linje "LCDLineNr" plads 10
lcd.print(" ");
lcd.setCursor(10, Row); // cursoren sÊttes pÄ linje "LCDLineNr" plads 10
lcd.print("Very Wet");
int SoilMoistureLevel = 1;
return SoilMoistureLevel;
}
else if (soilMoistureValue > (WaterValue + intervals) && soilMoistureValue < (AirValue - intervals)) {
Serial.println("Wet");
lcd.setCursor(10, Row); // cursoren sÊttes pÄ linje "LCDLineNr" plads 10
lcd.print(" ");
lcd.setCursor(10, Row); // cursoren sÊttes pÄ linje "LCDLineNr" plads 10
lcd.print("Wet");
int SoilMoistureLevel = 2;
return SoilMoistureLevel;
}
else if (soilMoistureValue < AirValue && soilMoistureValue > (AirValue - intervals)) {
int LCdLineNr;
Serial.println("Dry");
lcd.setCursor(10, Row); // cursoren sÊttes pÄ linje "LCDLineNr" plads 10
lcd.print(" ");
lcd.setCursor(10, Row); // cursoren sÊttes pÄ linje "LCDLineNr" plads 10
lcd.print("Dry");
int SoilMoistureLevel = 3;
return SoilMoistureLevel;
}
}