Using OneWire and interrupt together

Hi all,

I'm using an Arduino Mega board with ethernet shield to read some buttons and sensors. Everything works well until I decided to add a flowsensor (which uses an interrupt).

It looks like my OneWire temp sensor doesn't work well together with this flowsensor. If I only use the flowsensor part in a sketch it works fine.

Can anyone point me in the right direction and tell me if (and how) I can use my buttons and tempsensor together with an interrupt on pin 19 to read the pulses of my flowsensor?

#include <Ethernet.h>
#include <PubSubClient.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <neotimer.h>

// IP instellingen
byte mac[] = {  0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED };
IPAddress ip(192, 168, 50, 20);


// MQTT instellingen
EthernetClient ethClient;
PubSubClient mqttClient(ethClient);

char x[8];
bool berichtOntvangen     = false;

bool arduinoIsHerstart    = true;


// Pinouts sectie: ALGEMEEN
int knop01FrequentieregelaarKNOP            = 44;
int knop01FrequentieregelaarLED             = 45;
int knop02DoseerpompjesKNOP                 = 46;
int knop02DoseerpompjesLED                  = 47;
int knop03StopcontactenKNOP                 = 48;
int knop03StopcontactenLED                  = 49;  
  
// Pinouts sectie: DOSERING
int knop04DoseerpompjeChloorKNOP            = 38;
int knop04DoseerpompjeChloorLED             = 39;
int knop05DoseerpompjePhKNOP                = 40;
int knop05DoseerpompjePhLED                 = 41;
int led01Chloorlevel                        = 42;
int led02Phlevel                            = 43;

// Pinouts sectie: POMP INSTELLING
int knop06PompAutoKNOP                      = 22;
int knop06PompAutoLED                       = 23;
int knop07PompUitKNOP                       = 24;
int knop07PompUitLED                        = 25;
int knop08PompLaagKNOP                      = 28;
int knop08PompLaagLED                       = 29;
int knop09PompMiddenKNOP                    = 26;
int knop09PompMiddenLED                     = 27;
int knop10PompHoogKNOP                      = 30;
int knop10PompHoogLED                       = 31;
  
// Pinouts sectie: POMP INFO
int led03WaterflowR                         = 32;
int led03WaterflowG                         = 33;
int led03WaterflowB                         = 34;
int led04PompViaDakR                        = 35;
int led04PompViaDakG                        = 36;
int led04PompViaDakB                        = 37;

// Pinouts sectie: OLED DISPLAY
int knop11MenuUp                            = 5;
int knop12MenuDown                          = 6;

// Pinouts relais Arduino A: schakelcontacten frequentieregelaar
int relais01FreqentieregelaarDi1OnOff       = 14;
int relais02FreqentieregelaarDi2Hoog        = 17;
int relais03FreqentieregelaarDi3Midden      = 16;
int relais04FreqentieregelaarDi4Laag        = 15;

// Pinouts relais Arduino B: schakelcontacten doseerpompjes
int relais05DoseerpompjeChloorOnOff         = 2;
int relais06DoseerpompjePhOnOff             = 3;


// Knop variabelen
bool knop01LaatsteStatus  = LOW;
bool knop02LaatsteStatus  = LOW;
bool knop03LaatsteStatus  = LOW;
bool knop04LaatsteStatus  = LOW;
bool knop05LaatsteStatus  = LOW;
bool knop06LaatsteStatus  = LOW;
bool knop07LaatsteStatus  = LOW;
bool knop08LaatsteStatus  = LOW;
bool knop09LaatsteStatus  = LOW;
bool knop10LaatsteStatus  = LOW;

bool knop01HuidigeStatus  = LOW;
bool knop02HuidigeStatus  = LOW;
bool knop03HuidigeStatus  = LOW;
bool knop04HuidigeStatus  = LOW;
bool knop05HuidigeStatus  = LOW;
bool knop06HuidigeStatus  = LOW;
bool knop07HuidigeStatus  = LOW;
bool knop08HuidigeStatus  = LOW;
bool knop09HuidigeStatus  = LOW;
bool knop10HuidigeStatus  = LOW;

unsigned long knop01Timer = 0; 
unsigned long knop02Timer = 0; 
unsigned long knop03Timer = 0; 
unsigned long knop04Timer = 0; 
unsigned long knop05Timer = 0; 
unsigned long knop06Timer = 0;
unsigned long knop07Timer = 0;
unsigned long knop08Timer = 0;
unsigned long knop09Timer = 0; 
unsigned long knop10Timer = 0; 

unsigned long debounceDelay = 250;

// Shelly statussen
bool shelly01Status       = HIGH;
bool shelly02Status       = HIGH;
bool shelly03Status       = HIGH;


// Relais statussen
bool relais01Status       = HIGH;
bool relais02Status       = HIGH;
bool relais03Status       = HIGH;
bool relais04Status       = HIGH;
bool relais05Status       = HIGH;
bool relais06Status       = HIGH;

// Pomp auto status
bool pompAutoStatus       = HIGH;

// Temperatuur-sensor variabelen
int sensor01Temperatuur   = 18;
DeviceAddress sensor01TemperatuurAdres;
OneWire oneWire(sensor01Temperatuur);
DallasTemperature sensorsTemperatuur(&oneWire);
Neotimer sensor01Timer    = Neotimer(); 

float sensor01TemperatuurInlaat        = 0.0; 
float sensor01TemperatuurDak           = 0.0;
float sensor01TemperatuurTuinhuis      = 0.0;

// Flowsensor variabelen

const byte sensor03Flow                 = 19;
const int sensor03FlowPulsesPerSeconde  = 12;  // 12 pulses per liter per seconde
float sensor03FlowPulseCounter          = 0;
long sensor03FlowLastMillis             = 0;
long sensor03FlowFlow                   = 0;
Neotimer sensor03Timer                  = Neotimer(); 

void setup() {

  // ------------------------------------
  // NETWERK EN SERIELE POORT STARTEN
  // ------------------------------------
  Serial.begin(9600);
  Serial.println(F("Arduino Tuinhuis....booting..."));

  // Start met monitoren van flowsensor
  EIFR = 4;
  pinMode(sensor03Flow, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(sensor03Flow), pulseFlowsensor, CHANGE);
  sensor03FlowLastMillis = millis();
  sensor03Timer.set(1000);
  
  Ethernet.begin(mac, ip);
  delay(1500);
 
  mqttConnect();

  // ------------------------------------
  // PINOUTS TOEWIJZEN
  // ------------------------------------
  // Sectie: ALGEMEEN
  pinMode(knop01FrequentieregelaarKNOP,       INPUT_PULLUP);
  pinMode(knop02DoseerpompjesKNOP,            INPUT_PULLUP);
  pinMode(knop03StopcontactenKNOP,            INPUT_PULLUP);
  
  pinMode(knop01FrequentieregelaarLED,        OUTPUT);
  pinMode(knop02DoseerpompjesLED,             OUTPUT);
  pinMode(knop03StopcontactenLED,             OUTPUT);
  
  
  // Sectie: DOSERING
  pinMode(knop04DoseerpompjeChloorKNOP,       INPUT_PULLUP);  
  pinMode(knop05DoseerpompjePhKNOP,           INPUT_PULLUP);
  
  pinMode(knop04DoseerpompjeChloorLED,        OUTPUT);
  pinMode(knop05DoseerpompjePhLED,            OUTPUT);
  
  pinMode(led01Chloorlevel,                   OUTPUT);
  pinMode(led02Phlevel,                       OUTPUT);


  // Sectie: POMP INSTELLING
  pinMode(knop06PompAutoKNOP,                 INPUT_PULLUP);
  pinMode(knop07PompUitKNOP,                  INPUT_PULLUP);
  pinMode(knop08PompLaagKNOP,                 INPUT_PULLUP);
  pinMode(knop09PompMiddenKNOP,               INPUT_PULLUP);
  pinMode(knop10PompHoogKNOP,                 INPUT_PULLUP);

  pinMode(knop06PompAutoLED,                  OUTPUT);
  pinMode(knop07PompUitLED,                   OUTPUT);
  pinMode(knop08PompLaagLED,                  OUTPUT);
  pinMode(knop09PompMiddenLED,                OUTPUT);    
  pinMode(knop10PompHoogLED,                  OUTPUT);


  // Sectie: POMP INFO
  pinMode(led03WaterflowR,                    OUTPUT);
  pinMode(led03WaterflowG,                    OUTPUT);
  pinMode(led03WaterflowB,                    OUTPUT);
  pinMode(led04PompViaDakR,                   OUTPUT);
  pinMode(led04PompViaDakG,                   OUTPUT);
  pinMode(led04PompViaDakB,                   OUTPUT); // Spare (niet aangesloten)


  // Sectie: OLED DISPLAY
  pinMode(knop11MenuUp,                       INPUT_PULLUP);
  pinMode(knop12MenuDown,                     INPUT_PULLUP);
  

  // Relais Arduino A: schakelcontacten frequentieregelaar
  pinMode(relais01FreqentieregelaarDi1OnOff,  OUTPUT);
  pinMode(relais02FreqentieregelaarDi2Hoog,   OUTPUT);
  pinMode(relais03FreqentieregelaarDi3Midden, OUTPUT);
  pinMode(relais04FreqentieregelaarDi4Laag,   OUTPUT);


  // Relais Arduino B: schakelcontacten doseerpompjes
  pinMode(relais05DoseerpompjeChloorOnOff,    OUTPUT);
  pinMode(relais06DoseerpompjePhOnOff,        OUTPUT);

  
  // Interne LED (voor eventuele test-doeleinden
  pinMode(LED_BUILTIN, OUTPUT);


  // Start met monitoren van temperatuur-sensoren
  sensorsTemperatuur.setWaitForConversion(false);
  sensorsTemperatuur.begin();
  sensorsTemperatuur.getAddress(sensor01TemperatuurAdres, 0);
  sensorsTemperatuur.setResolution(sensor01TemperatuurAdres, 11);
  sensor01Timer.set(10000);


}


// Arduino loop die oneindig herhaalt
void loop() {
  
  // ------------------------------------
  // UITLEZEN SENSOREN
  // ------------------------------------
  
  // Herhaal elke 10000 ms
  if(sensor01Timer.repeat())
  {
    // Lees de temperatuur sensor uit
    sensorsTemperatuur.requestTemperatures();

    // Haal temperatuur in Celcius op van eerste sensor
    sensor01TemperatuurInlaat = sensorsTemperatuur.getTempCByIndex(0);

    // Toon temperatuur op seriële monitor
    Serial.print(F("Temperatuur 1 is: "));       
    Serial.println(sensor01TemperatuurInlaat);

    // Stuur de temperatuur naar Home Assistant
    boolean rc17 = mqttClient.publish("zwembad/temperatuur/1",dtostrf(sensor01TemperatuurInlaat, 4, 2, x));
  }

  // Herhaal elke 1000 ms
  if(sensor03Timer.repeat())
  {
    updateFlowsensorFlow();

    // Toon flow op seriële monitor
    Serial.print(F("Waterflow is: "));       
    Serial.println(sensor03FlowFlow);

    // Stuur de waterflow naar Home Assistant
    boolean rc17 = mqttClient.publish("zwembad/flow/1",sensor03FlowFlow);
  }


  // ------------------------------------
  // AFHANDELEN BUTTONS
  // ------------------------------------
  
  // Sectie:        ALGEMEEN
  // Knop:          01
  // Functie:       Aan / Uitzetten van frequentieregelaar via Shelly 4PM Pro relais
  // Opmerkingen:   De schakeling van de Shelly relais loopt via Home Assistant
  
  knop01HuidigeStatus = digitalRead(knop01FrequentieregelaarKNOP);

if(knop01HuidigeStatus == HIGH && knop01LaatsteStatus == LOW && ((millis() - knop01Timer) > debounceDelay))
  {
    if(!arduinoIsHerstart)
    {
      // Knop is ingedrukt omdat status anders is dan de vorige loop
      Serial.println(F("Knop frequentieregelaar is ingedrukt"));
  
      // Knop is aangezet
      if (shelly01Status == LOW)
      {
        setFrequentieregelaar(HIGH);
      }
  
      // Knop is uitgezet
      else
      {
        setFrequentieregelaar(LOW);
      } 
  
      // Update timer met de laatste tijd van uitvoering
      knop01Timer = millis();
    }
  }

  // Sla status weer op zodat niet steeds opnieuw getriggerd wordt
  knop01LaatsteStatus = knop01HuidigeStatus;


  // Sectie:        ALGEMEEN
  // Knop:          02
  // Functie:       Aan / Uitzetten van doseerpompjes via Shelly 4PM Pro relais
  // Opmerkingen:   De schakeling van de Shelly relais loopt via Home Assistant
  
  knop02HuidigeStatus = digitalRead(knop02DoseerpompjesKNOP);

  if(knop02HuidigeStatus == HIGH && knop02LaatsteStatus == LOW && ((millis() - knop02Timer) > debounceDelay))
  {
    if(!arduinoIsHerstart)
    {
      // Knop is ingedrukt omdat status anders is dan de vorige loop
      Serial.println(F("Knop doseerpompjes is ingedrukt"));
  
      // Knop is aangezet
      if (shelly02Status == LOW)
      {
        setDoseerpompjes(HIGH);
      }
  
      // Knop is uitgezet
      else
      {
        setDoseerpompjes(LOW);
      } 
  
      // Update timer met de laatste tijd van uitvoering
      knop02Timer = millis();
    }
  }

  // Sla status weer op zodat niet steeds opnieuw getriggerd wordt
  knop02LaatsteStatus = knop02HuidigeStatus;


  // Sectie:        ALGEMEEN
  // Knop:          03
  // Functie:       Aan / Uitzetten van stopcontacten via Shelly 4PM Pro relais
  // Opmerkingen:   De schakeling van de Shelly relais loopt via Home Assistant
  
  knop03HuidigeStatus = digitalRead(knop03StopcontactenKNOP);

  if(knop03HuidigeStatus == HIGH && knop03LaatsteStatus == LOW && ((millis() - knop03Timer) > debounceDelay))
  {
      if(!arduinoIsHerstart)
      {
      // Knop is ingedrukt omdat status anders is dan de vorige loop
      Serial.println(F("Knop stopcontacten is ingedrukt"));
    
      // Knop is aangezet
      if (shelly03Status == LOW)
      {
        setStopcontacten(HIGH);
      }
    
      // Knop is uitgezet
      else
      {
        setStopcontacten(LOW);
      } 
    
      // Update timer met de laatste tijd van uitvoering
      knop03Timer = millis();
    }
  }

  // Sla status weer op zodat niet steeds opnieuw getriggerd wordt
  knop03LaatsteStatus = knop03HuidigeStatus;
 

  // Sectie:        DOSERING
  // Knop:          04
  // Functie:       Aan / Uitzetten van Chloor doseringspompje via Arduino relais B
  // Opmerkingen:   Het relais is een schakelcontact dat een level-schakelaar op het pompje aan / uitzet waardoor de pomp in standby gaat
  
  knop04HuidigeStatus = digitalRead(knop04DoseerpompjeChloorKNOP);

  if(knop04HuidigeStatus == HIGH && knop04LaatsteStatus == LOW && ((millis() - knop04Timer) > debounceDelay))
  {
    if(!arduinoIsHerstart)
    {
      // Knop is ingedrukt omdat status anders is dan de vorige loop
      Serial.println(F("Knop chloor is ingedrukt"));
  
      // Knop is aangezet
      if (relais05Status == LOW)
      {
        setChloorpompje(HIGH);
      }
  
      // Knop is uitgezet
      else
      {
        setChloorpompje(LOW);
      } 
  
      // Update timer met de laatste tijd van uitvoering
      knop04Timer = millis();
    }
  }

  // Sla status weer op zodat niet steeds opnieuw getriggerd wordt
  knop04LaatsteStatus = knop04HuidigeStatus;


  // Sectie:        DOSERING
  // Knop:          05
  // Functie:       Aan / Uitzetten van PH doseringspompje via Arduino relais B
  // Opmerkingen:   Het relais is een schakelcontact dat een level-schakelaar op het pompje aan / uitzet waardoor de pomp in standby gaat
  
  knop05HuidigeStatus = digitalRead(knop05DoseerpompjePhKNOP);

  if(knop05HuidigeStatus == HIGH && knop05LaatsteStatus == LOW && ((millis() - knop05Timer) > debounceDelay))
  {
    if(!arduinoIsHerstart)
    {
      // Knop is ingedrukt omdat status anders is dan de vorige loop
      Serial.println(F("Knop PH is ingedrukt"));
  
      // Knop is aangezet
      if (relais06Status == LOW)
      {
        setPhpompje(HIGH);
      }
  
      // Knop is uitgezet
      else
      {
        setPhpompje(LOW);
      } 
  
      // Update timer met de laatste tijd van uitvoering
      knop05Timer = millis();
    }
  }

  // Sla status weer op zodat niet steeds opnieuw getriggerd wordt
  knop05LaatsteStatus = knop05HuidigeStatus;
  

  // Sectie:        POMP INSTELLING
  // Knop:          06
  // Functie:       Aanzetten automatische stand frequentieregelaar via Arduino relais A
  // Opmerkingen:   Met deze knop worden alle contacten op relais A opengezet zodat de frequentieregelaar in de clockmode gaat
  
  knop06HuidigeStatus = digitalRead(knop06PompAutoKNOP);

  if(knop06HuidigeStatus == HIGH && knop06LaatsteStatus == LOW && ((millis() - knop06Timer) > debounceDelay))
  {
      if(!arduinoIsHerstart)
      {
      // Knop is ingedrukt omdat status anders is dan de vorige loop
      Serial.println(F("Knop pomp op auto is ingedrukt"));
    
      // Knop is aangezet
      if (pompAutoStatus == LOW)
      {
        setPompAuto(HIGH);
      }
    
      // Knop is uitgezet
      else
      {
        setPompAuto(LOW);
      } 
    
      // Update timer met de laatste tijd van uitvoering
      knop06Timer = millis();
    }
  }  

  // Sla status weer op zodat niet steeds opnieuw getriggerd wordt
  knop06LaatsteStatus = knop06HuidigeStatus;


  // Sectie:        POMP INSTELLING
  // Knop:          07
  // Functie:       Aanzetten uit stand frequentieregelaar via Arduino relais A
  // Opmerkingen:   Belangrijk is om alle contacten op het relais te schakelen zodat er maar 1 hoog is
  
  knop07HuidigeStatus = digitalRead(knop07PompUitKNOP);

  if(knop07HuidigeStatus == HIGH && knop07LaatsteStatus == LOW && ((millis() - knop07Timer) > debounceDelay))
  {
    if(!arduinoIsHerstart)
    {
      // Knop is ingedrukt omdat status anders is dan de vorige loop
      Serial.println(F("Knop pomp op uit is ingedrukt"));
  
      setPompUit();
  
      // Update timer met de laatste tijd van uitvoering
      knop07Timer = millis();
    }
  }

  // Sla status weer op zodat niet steeds opnieuw getriggerd wordt
  knop07LaatsteStatus = knop07HuidigeStatus;


  // Sectie:        POMP INSTELLING
  // Knop:          08
  // Functie:       Aanzetten laag stand frequentieregelaar via Arduino relais A
  // Opmerkingen:   Belangrijk is om alle contacten op het relais te schakelen zodat er maar 1 hoog is
  
  knop08HuidigeStatus = digitalRead(knop08PompLaagKNOP);

  if(knop08HuidigeStatus == HIGH && knop08LaatsteStatus == LOW && ((millis() - knop08Timer) > debounceDelay))
  {
    if(!arduinoIsHerstart)
    {
      // Knop is ingedrukt omdat status anders is dan de vorige loop
      Serial.println(F("Knop pomp op laag is ingedrukt"));
  
      setPompLaag();
      
      // Update timer met de laatste tijd van uitvoering
      knop08Timer = millis();
    }
  }

  // Sla status weer op zodat niet steeds opnieuw getriggerd wordt
  knop08LaatsteStatus = knop08HuidigeStatus;


  // Sectie:        POMP INSTELLING
  // Knop:          09
  // Functie:       Aanzetten midden stand frequentieregelaar via Arduino relais A
  // Opmerkingen:   Belangrijk is om alle contacten op het relais te schakelen zodat er maar 1 hoog is
  
  knop09HuidigeStatus = digitalRead(knop09PompMiddenKNOP);

  if(knop09HuidigeStatus == HIGH && knop09LaatsteStatus == LOW && ((millis() - knop09Timer) > debounceDelay))
  {
    if(!arduinoIsHerstart)
    {
      // Knop is ingedrukt omdat status anders is dan de vorige loop
      Serial.println(F("Knop pomp op midden is ingedrukt"));
  
      setPompMidden();
  
      // Update timer met de laatste tijd van uitvoering
      knop09Timer = millis();
    }
  }

  // Sla status weer op zodat niet steeds opnieuw getriggerd wordt
  knop09LaatsteStatus = knop09HuidigeStatus;


  // Sectie:        POMP INSTELLING
  // Knop:          10
  // Functie:       Aanzetten hoog stand frequentieregelaar via Arduino relais A
  // Opmerkingen:   Belangrijk is om alle contacten op het relais te schakelen zodat er maar 1 hoog is
  
  knop10HuidigeStatus = digitalRead(knop10PompHoogKNOP);

  if(knop10HuidigeStatus == HIGH && knop10LaatsteStatus == LOW && ((millis() - knop10Timer) > debounceDelay))
  {
    if(!arduinoIsHerstart)
    {
      // Knop is ingedrukt omdat status anders is dan de vorige loop
      Serial.println(F("Knop pomp op hoog is ingedrukt"));
  
      setPompHoog();
  
      // Update timer met de laatste tijd van uitvoering
      knop10Timer = millis();
    }
  }

  // Sla status weer op zodat niet steeds opnieuw getriggerd wordt
  knop10LaatsteStatus = knop10HuidigeStatus;

  if(arduinoIsHerstart)
  {
    // Stuur een eerste syncbericht naar Home Asssitant om alle huidige standen op te halen
    arduinoIsHerstart = false;
    mqttClient.publish("tuinhuis/sync","SYNC");
  }

      
  // Zet MQTT client in loop mode zodat deze continue blijft zoeken naar nieuwe binnenkomende berichten
  mqttReconnect();
}



void mqttConnect()
{
  mqttClient.setServer("192.168.50.6", 1883);
  while (!mqttClient.connected()) {
    Serial.print(F("MQTT connecting..."));
    
    if (mqttClient.connect("arduino-1","mosquitto","pass"))
    {
      // Connectie gelukt
      Serial.println(F("Verbonden met MQTT server"));
      mqttClient.setCallback(mqttOntvangen);

      // Inschrijven op topic waarop Home Assistant gaat communiceren
      mqttClient.subscribe("tuinhuis/callback");
      Serial.println(F("Aangemeld voor callbacks vanuit Home Assistant"));
    }
    
    else
    {
      // Connectie niet gelukt
      Serial.print(F("Het is niet gelukt om te verbinden met de MQTT server, rc="));
      Serial.print(mqttClient.state());
      Serial.println(F("- opnieuw proberen over 5 seconde"));
      delay(5000);
    }
  }
}  

void mqttReconnect()
{
  // Zorg er voor dat er een verbinding blijft met de MQTT broker
  if (!mqttClient.connected()) {
    mqttConnect();
  }
  
  mqttClient.loop();
}

void mqttOntvangen(char* topic, byte* payload, unsigned int length) {
  berichtOntvangen = true;

  Serial.print(F("MQTT bericht ontvangen: "));
  Serial.write(payload, length);
  Serial.println();

  // ALGEMEEN
  if (strncmp((const char*) payload, "DOSEERPOMPJES-ON", 16) == 0)
  {
    setDoseerpompjes(HIGH);
  }
  
  else if (strncmp((const char*) payload, "DOSEERPOMPJES-OFF", 17) == 0)
  {
    setDoseerpompjes(LOW);
  }
  
  else if (strncmp((const char*) payload, "FREQUENTIEREGELAAR-ON", 21) == 0)
  {
    setFrequentieregelaar(HIGH);
  }

  else if (strncmp((const char*) payload, "FREQUENTIEREGELAAR-OFF", 22) == 0)
  {
    setFrequentieregelaar(LOW);
  }

  else if (strncmp((const char*) payload, "STOPCONTACTEN-ON", 16) == 0)
  {
    setStopcontacten(HIGH);
  }

  else if (strncmp((const char*) payload, "STOPCONTACTEN-OFF", 17) == 0)
  {
    setStopcontacten(LOW);
  }

  // DOSERING
  else if (strncmp((const char*) payload, "CHLOORPOMPJE-ON", 15) == 0)
  {
    setChloorpompje(HIGH);
  }

  else if (strncmp((const char*) payload, "CHLOORPOMPJE-OFF", 16) == 0)
  {
    setChloorpompje(LOW);
  }

  else if (strncmp((const char*) payload, "PHPOMPJE-ON", 11) == 0)
  {
    setPhpompje(HIGH);
  }

  else if (strncmp((const char*) payload, "PHPOMPJE-OFF", 12) == 0)
  {
    setPhpompje(LOW);
  }

  // POMP INSTELLING
  else if (strncmp((const char*) payload, "POMP-AUTO-ON", 12) == 0)
  {
    setPompAuto(HIGH);
  }

  else if (strncmp((const char*) payload, "POMP-AUTO-OFF", 13) == 0)
  {
    setPompAuto(LOW);
  }

  else if (strncmp((const char*) payload, "POMP-UIT", 8) == 0)
  {
    setPompUit();
  }

  else if (strncmp((const char*) payload, "POMP-LAAG", 9) == 0)
  {
    setPompLaag();
  }

  else if (strncmp((const char*) payload, "POMP-MIDDEN", 11) == 0)
  {
    setPompMidden();
  }

  else if (strncmp((const char*) payload, "POMP-HOOG", 9) == 0)
  {
    setPompHoog();
  }  
}


// ------------------------------------
// BUTTON FUNCTIES
// ------------------------------------
void setDoseerpompjes(bool state)
{
  // Zet doseerpompjes aan
  if(state == HIGH)
  {
    // Stuur trigger naar Home Assistant
    if(mqttClient.publish("tuinhuis/doseerpompjes","ON"))
    {
      // Zet LED van knop aan
      digitalWrite(knop02DoseerpompjesLED, HIGH);
  
      // Zet status op aan
      shelly02Status = HIGH;
    }
  }

  // Zet doseerpompjes uit
  else
  {
    // Stuur trigger naar Home Assistant
    if(mqttClient.publish("tuinhuis/doseerpompjes","OFF"))
    {
      // Zet LED van knop uit
      digitalWrite(knop02DoseerpompjesLED, LOW);

      // Zet status op uit
      shelly02Status = LOW;
    }
  }
}

void setFrequentieregelaar(bool state)
{
  // Zet frequentieregelaar aan
  if(state == HIGH)
  {
    // Stuur trigger naar Home Assistant
    if(mqttClient.publish("tuinhuis/frequentieregelaar","ON"))
    {
      // Zet LED van knop aan
      digitalWrite(knop01FrequentieregelaarLED, HIGH);

      // Zet status op aan
      shelly01Status = HIGH;
    }
  }

  // Zet frequentieregelaar uit
  else
  {
    // Stuur trigger naar Home Assistant
    if(mqttClient.publish("tuinhuis/frequentieregelaar","OFF"))
    {
      // Zet LED van knop uit
      digitalWrite(knop01FrequentieregelaarLED, LOW);

      // Zet status op uit
      shelly01Status = LOW;
    }
  }
}

void setStopcontacten(bool state)
{
  // Zet stopcontacten aan
  if(state == HIGH)
  {
    // Stuur trigger naar Home Assistant
    if(mqttClient.publish("tuinhuis/stopcontacten","ON"))
    {
      // Zet LED van knop aan
      digitalWrite(knop03StopcontactenLED, HIGH);

      // Zet status op aan
      shelly03Status = HIGH;
    }
  }

  // Zet stopcontacten uit
  else
  {
    // Stuur trigger naar Home Assistant
    if(mqttClient.publish("tuinhuis/stopcontacten","OFF"))
    {
      // Zet LED van knop uit
      digitalWrite(knop03StopcontactenLED, LOW);

      // Zet status op uit
      shelly03Status = LOW;
    }
  }
}


void setChloorpompje(bool state)
{
  // Zet chloorpompje aan
  if(state == HIGH)
  {
    // Stuur trigger naar Home Assistant
    if(mqttClient.publish("tuinhuis/chloor","ON"))
    {
      // Zet LED van knop aan
      digitalWrite(knop04DoseerpompjeChloorLED, HIGH);
      
      // Zet relais 5 (chloor) aan
      digitalWrite(relais05DoseerpompjeChloorOnOff, HIGH);
      
      // Zet status op aan
      relais05Status = HIGH;
    }
  }

  // Zet chloorpompje uit
  else
  {
    // Stuur trigger naar Home Assistant
    if(mqttClient.publish("tuinhuis/chloor","OFF"))
    {
      // Zet LED van knop uit
      digitalWrite(knop04DoseerpompjeChloorLED, LOW);
      
      // Zet relais 5 (chloor) uit
      digitalWrite(relais05DoseerpompjeChloorOnOff, LOW);
      
      // Zet status op uit
      relais05Status = LOW;
    }
  }
}


void setPhpompje(bool state)
{
  // Zet PH pompje aan
  if(state == HIGH)
  {
    // Stuur trigger naar Home Assistant
    if(mqttClient.publish("tuinhuis/ph","ON"))
    {
      // Zet LED van knop aan
      digitalWrite(knop05DoseerpompjePhLED, HIGH);

      // Zet relais 5 (chloor) aan
      digitalWrite(relais06DoseerpompjePhOnOff, HIGH);

      // Zet status op aan
      relais06Status = HIGH;
    }
  }

  // Zet PH pompje uit
  else
  {
    // Stuur trigger naar Home Assistant
    if(mqttClient.publish("tuinhuis/ph","OFF"))
    {
      // Zet LED van knop uit
      digitalWrite(knop05DoseerpompjePhLED, LOW);
      
      // Zet relais 5 (chloor) uit
      digitalWrite(relais06DoseerpompjePhOnOff, LOW);
      
      // Zet status op uit
      relais06Status = LOW;
    }
  }
}


void setPompAuto(bool state)
{
  // Zet PH pompje aan
  if(state == HIGH)
  {
    // Stuur trigger naar Home Assistant
    if(mqttClient.publish("tuinhuis/pomp","AUTO-ON"))
    {
      // Zet LED van knop aan
      digitalWrite(knop06PompAutoLED, HIGH);
  
      // Zet andere LEDS uit
      //digitalWrite(knop07PompUitLED, LOW);
      //digitalWrite(knop08PompLaagLED, LOW);
      //digitalWrite(knop09PompMiddenLED, LOW);
      //digitalWrite(knop10PompHoogLED, LOW);
      
      // Zet relais 1, 2, 3 en 4 uit
      //digitalWrite(relais01FreqentieregelaarDi1OnOff, HIGH);
      //digitalWrite(relais02FreqentieregelaarDi2Hoog, HIGH);
      //digitalWrite(relais03FreqentieregelaarDi3Midden, HIGH);
      //digitalWrite(relais04FreqentieregelaarDi4Laag, HIGH);

      // Zet status op uit
      pompAutoStatus = HIGH;
    }
  }

  else
  {
    // Stuur trigger naar Home Assistant
    if(mqttClient.publish("tuinhuis/pomp","AUTO-OFF"))
    {
      // Zet LED van knop aan
      digitalWrite(knop06PompAutoLED, LOW);
  
      // Zet andere LEDS uit
      //digitalWrite(knop07PompUitLED, LOW);
      //digitalWrite(knop08PompLaagLED, LOW);
      //digitalWrite(knop09PompMiddenLED, LOW);
      //digitalWrite(knop10PompHoogLED, LOW);
      
      // Zet relais 1, 2, 3 en 4 uit
      //digitalWrite(relais01FreqentieregelaarDi1OnOff, HIGH);
      //digitalWrite(relais02FreqentieregelaarDi2Hoog, HIGH);
      //digitalWrite(relais03FreqentieregelaarDi3Midden, HIGH);
      //digitalWrite(relais04FreqentieregelaarDi4Laag, HIGH);

      // Zet status op uit
      pompAutoStatus = LOW;
    }
  }  
}


void setPompUit()
{
  // Stuur trigger naar Home Assistant
  if(mqttClient.publish("tuinhuis/pomp","UIT"))
  {
    // Zet LED van knop aan
    digitalWrite(knop07PompUitLED, HIGH);

    // Zet andere LEDS uit
    //digitalWrite(knop06PompAutoLED, LOW);
    digitalWrite(knop08PompLaagLED, LOW);
    digitalWrite(knop09PompMiddenLED, LOW);
    digitalWrite(knop10PompHoogLED, LOW);
    
    // Zet relais 1 aan en 2, 3 en 4 uit
    digitalWrite(relais01FreqentieregelaarDi1OnOff, LOW);
    digitalWrite(relais02FreqentieregelaarDi2Hoog, HIGH);
    digitalWrite(relais03FreqentieregelaarDi3Midden, HIGH);
    digitalWrite(relais04FreqentieregelaarDi4Laag, HIGH);
  }
}

void setPompLaag()
{
  // Stuur trigger naar Home Assistant
  if(mqttClient.publish("tuinhuis/pomp","LAAG"))
  {
    // Zet LED van knop aan
    digitalWrite(knop08PompLaagLED, HIGH);

    // Zet andere LEDS uit
    //digitalWrite(knop06PompAutoLED, LOW);
    digitalWrite(knop07PompUitLED, LOW);
    digitalWrite(knop09PompMiddenLED, LOW);
    digitalWrite(knop10PompHoogLED, LOW);
    
    // Zet relais 1 aan en 2, 3 en 4 uit
    digitalWrite(relais01FreqentieregelaarDi1OnOff, HIGH);
    digitalWrite(relais02FreqentieregelaarDi2Hoog, HIGH);
    digitalWrite(relais03FreqentieregelaarDi3Midden, HIGH);
    digitalWrite(relais04FreqentieregelaarDi4Laag, LOW);
  }
}

void setPompMidden()
{
  // Stuur trigger naar Home Assistant
  if(mqttClient.publish("tuinhuis/pomp","MIDDEN"))
  {
    // Zet LED van knop aan
    digitalWrite(knop09PompMiddenLED, HIGH);

    // Zet andere LEDS uit
    //digitalWrite(knop06PompAutoLED, LOW);
    digitalWrite(knop07PompUitLED, LOW);
    digitalWrite(knop08PompLaagLED, LOW);
    digitalWrite(knop10PompHoogLED, LOW);
    
    // Zet relais 1 aan en 2, 3 en 4 uit
    digitalWrite(relais01FreqentieregelaarDi1OnOff, HIGH);
    digitalWrite(relais02FreqentieregelaarDi2Hoog, HIGH);
    digitalWrite(relais03FreqentieregelaarDi3Midden, LOW);
    digitalWrite(relais04FreqentieregelaarDi4Laag, HIGH);
  }
}

void setPompHoog()
{
  // Stuur trigger naar Home Assistant
  if(mqttClient.publish("tuinhuis/pomp","HOOG"))
  {
    // Zet LED van knop aan
    digitalWrite(knop10PompHoogLED, HIGH);

    // Zet andere LEDS uit
    //digitalWrite(knop06PompAutoLED, LOW);
    digitalWrite(knop07PompUitLED, LOW);
    digitalWrite(knop08PompLaagLED, LOW);
    digitalWrite(knop09PompMiddenLED, LOW);
    
    // Zet relais 1 aan en 2, 3 en 4 uit
    digitalWrite(relais01FreqentieregelaarDi1OnOff, HIGH);
    digitalWrite(relais02FreqentieregelaarDi2Hoog, LOW);
    digitalWrite(relais03FreqentieregelaarDi3Midden, HIGH);
    digitalWrite(relais04FreqentieregelaarDi4Laag, HIGH);
  }
}


void pulseFlowsensor()
{
    // Bij iedere puls de counter verhogen met 1
    Serial.println("test interrupt");
    sensor03FlowPulseCounter += 1;
}

void updateFlowsensorFlow()
{
  sensor03FlowFlow = 3600 * sensor03FlowPulseCounter * 1000 / (millis() - sensor03FlowLastMillis) / sensor03FlowPulsesPerSeconde;    // m3/u
  sensor03FlowLastMillis = millis();
  sensor03FlowPulseCounter = 0;
}

A few issues:

  1. What is the part number of your flow sensor?
  2. Why are you using a float for sensor03FlowPulseCounter?
  3. Since sensor03FlowPulseCounter is shared between the ISR and loop() it needs to be declared with the volatile keyword.
  4. When reading or modifying sensor03FlowPulseCounter from loop() interrupts need to be disabled.
  5. NEVER use serial I/O or delay calls in an ISR!

Thanks for your quick reply!

My flowsensor is this one:
https://nl.aliexpress.com/item/32844361367.html?spm=a2g0o.order_list.0.0.4d8179d2MG4vQu&gatewayAdapt=glo2nld

I changed my code a bit:

#include <Ethernet.h>
#include <PubSubClient.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <neotimer.h>

// IP instellingen
byte mac[] = {  0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED };
IPAddress ip(192, 168, 50, 20);


// MQTT instellingen
EthernetClient ethClient;
PubSubClient mqttClient(ethClient);

char x[8];
bool berichtOntvangen     = false;

bool arduinoIsHerstart    = true;


// Pinouts sectie: ALGEMEEN
int knop01FrequentieregelaarKNOP            = 44;
int knop01FrequentieregelaarLED             = 45;
int knop02DoseerpompjesKNOP                 = 46;
int knop02DoseerpompjesLED                  = 47;
int knop03StopcontactenKNOP                 = 48;
int knop03StopcontactenLED                  = 49;  
  
// Pinouts sectie: DOSERING
int knop04DoseerpompjeChloorKNOP            = 38;
int knop04DoseerpompjeChloorLED             = 39;
int knop05DoseerpompjePhKNOP                = 40;
int knop05DoseerpompjePhLED                 = 41;
int led01Chloorlevel                        = 42;
int led02Phlevel                            = 43;

// Pinouts sectie: POMP INSTELLING
int knop06PompAutoKNOP                      = 22;
int knop06PompAutoLED                       = 23;
int knop07PompUitKNOP                       = 24;
int knop07PompUitLED                        = 25;
int knop08PompLaagKNOP                      = 28;
int knop08PompLaagLED                       = 29;
int knop09PompMiddenKNOP                    = 26;
int knop09PompMiddenLED                     = 27;
int knop10PompHoogKNOP                      = 30;
int knop10PompHoogLED                       = 31;
  
// Pinouts sectie: POMP INFO
int led03WaterflowR                         = 32;
int led03WaterflowG                         = 33;
int led03WaterflowB                         = 34;
int led04PompViaDakR                        = 35;
int led04PompViaDakG                        = 36;
int led04PompViaDakB                        = 37;

// Pinouts sectie: OLED DISPLAY
int knop11MenuUp                            = 5;
int knop12MenuDown                          = 6;

// Pinouts relais Arduino A: schakelcontacten frequentieregelaar
int relais01FreqentieregelaarDi1OnOff       = 14;
int relais02FreqentieregelaarDi2Hoog        = 17;
int relais03FreqentieregelaarDi3Midden      = 16;
int relais04FreqentieregelaarDi4Laag        = 15;

// Pinouts relais Arduino B: schakelcontacten doseerpompjes
int relais05DoseerpompjeChloorOnOff         = 2;
int relais06DoseerpompjePhOnOff             = 3;


// Knop variabelen
bool knop01LaatsteStatus  = LOW;
bool knop02LaatsteStatus  = LOW;
bool knop03LaatsteStatus  = LOW;
bool knop04LaatsteStatus  = LOW;
bool knop05LaatsteStatus  = LOW;
bool knop06LaatsteStatus  = LOW;
bool knop07LaatsteStatus  = LOW;
bool knop08LaatsteStatus  = LOW;
bool knop09LaatsteStatus  = LOW;
bool knop10LaatsteStatus  = LOW;

bool knop01HuidigeStatus  = LOW;
bool knop02HuidigeStatus  = LOW;
bool knop03HuidigeStatus  = LOW;
bool knop04HuidigeStatus  = LOW;
bool knop05HuidigeStatus  = LOW;
bool knop06HuidigeStatus  = LOW;
bool knop07HuidigeStatus  = LOW;
bool knop08HuidigeStatus  = LOW;
bool knop09HuidigeStatus  = LOW;
bool knop10HuidigeStatus  = LOW;

unsigned long knop01Timer = 0; 
unsigned long knop02Timer = 0; 
unsigned long knop03Timer = 0; 
unsigned long knop04Timer = 0; 
unsigned long knop05Timer = 0; 
unsigned long knop06Timer = 0;
unsigned long knop07Timer = 0;
unsigned long knop08Timer = 0;
unsigned long knop09Timer = 0; 
unsigned long knop10Timer = 0; 

unsigned long debounceDelay = 250;

// Shelly statussen
bool shelly01Status       = HIGH;
bool shelly02Status       = HIGH;
bool shelly03Status       = HIGH;


// Relais statussen
bool relais01Status       = HIGH;
bool relais02Status       = HIGH;
bool relais03Status       = HIGH;
bool relais04Status       = HIGH;
bool relais05Status       = HIGH;
bool relais06Status       = HIGH;

// Pomp auto status
bool pompAutoStatus       = HIGH;

// Temperatuur-sensor variabelen
int sensor01Temperatuur   = 18;
DeviceAddress sensor01TemperatuurAdres;
OneWire oneWire(sensor01Temperatuur);
DallasTemperature sensorsTemperatuur(&oneWire);
Neotimer sensor01Timer    = Neotimer(); 

float sensor01TemperatuurInlaat        = 0.0; 
float sensor01TemperatuurDak           = 0.0;
float sensor01TemperatuurTuinhuis      = 0.0;

// Flowsensor variabelen

const byte sensor03Flow                 = 19;
const int sensor03FlowPulsesPerSeconde  = 12;  // 12 pulses per liter per seconde
volatile int sensor03FlowPulseCounter   = 0;
long sensor03FlowLastMillis             = 0;
long sensor03FlowFlow                   = 0;
Neotimer sensor03Timer                  = Neotimer(); 

void setup() {

  // ------------------------------------
  // NETWERK EN SERIELE POORT STARTEN
  // ------------------------------------
  Serial.begin(9600);
  Serial.println(F("Arduino Tuinhuis....booting..."));

  // Start met monitoren van flowsensor
  EIFR = 4;
  pinMode(sensor03Flow, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(sensor03Flow), pulseFlowsensor, CHANGE);
  sensor03FlowLastMillis = millis();
  sensor03Timer.set(1000);
  
  Ethernet.begin(mac, ip);
  delay(1500);
 
  mqttConnect();

  // ------------------------------------
  // PINOUTS TOEWIJZEN
  // ------------------------------------
  // Sectie: ALGEMEEN
  pinMode(knop01FrequentieregelaarKNOP,       INPUT_PULLUP);
  pinMode(knop02DoseerpompjesKNOP,            INPUT_PULLUP);
  pinMode(knop03StopcontactenKNOP,            INPUT_PULLUP);
  
  pinMode(knop01FrequentieregelaarLED,        OUTPUT);
  pinMode(knop02DoseerpompjesLED,             OUTPUT);
  pinMode(knop03StopcontactenLED,             OUTPUT);
  
  
  // Sectie: DOSERING
  pinMode(knop04DoseerpompjeChloorKNOP,       INPUT_PULLUP);  
  pinMode(knop05DoseerpompjePhKNOP,           INPUT_PULLUP);
  
  pinMode(knop04DoseerpompjeChloorLED,        OUTPUT);
  pinMode(knop05DoseerpompjePhLED,            OUTPUT);
  
  pinMode(led01Chloorlevel,                   OUTPUT);
  pinMode(led02Phlevel,                       OUTPUT);


  // Sectie: POMP INSTELLING
  pinMode(knop06PompAutoKNOP,                 INPUT_PULLUP);
  pinMode(knop07PompUitKNOP,                  INPUT_PULLUP);
  pinMode(knop08PompLaagKNOP,                 INPUT_PULLUP);
  pinMode(knop09PompMiddenKNOP,               INPUT_PULLUP);
  pinMode(knop10PompHoogKNOP,                 INPUT_PULLUP);

  pinMode(knop06PompAutoLED,                  OUTPUT);
  pinMode(knop07PompUitLED,                   OUTPUT);
  pinMode(knop08PompLaagLED,                  OUTPUT);
  pinMode(knop09PompMiddenLED,                OUTPUT);    
  pinMode(knop10PompHoogLED,                  OUTPUT);


  // Sectie: POMP INFO
  pinMode(led03WaterflowR,                    OUTPUT);
  pinMode(led03WaterflowG,                    OUTPUT);
  pinMode(led03WaterflowB,                    OUTPUT);
  pinMode(led04PompViaDakR,                   OUTPUT);
  pinMode(led04PompViaDakG,                   OUTPUT);
  pinMode(led04PompViaDakB,                   OUTPUT); // Spare (niet aangesloten)


  // Sectie: OLED DISPLAY
  pinMode(knop11MenuUp,                       INPUT_PULLUP);
  pinMode(knop12MenuDown,                     INPUT_PULLUP);
  

  // Relais Arduino A: schakelcontacten frequentieregelaar
  pinMode(relais01FreqentieregelaarDi1OnOff,  OUTPUT);
  pinMode(relais02FreqentieregelaarDi2Hoog,   OUTPUT);
  pinMode(relais03FreqentieregelaarDi3Midden, OUTPUT);
  pinMode(relais04FreqentieregelaarDi4Laag,   OUTPUT);


  // Relais Arduino B: schakelcontacten doseerpompjes
  pinMode(relais05DoseerpompjeChloorOnOff,    OUTPUT);
  pinMode(relais06DoseerpompjePhOnOff,        OUTPUT);

  
  // Interne LED (voor eventuele test-doeleinden
  pinMode(LED_BUILTIN, OUTPUT);


  // Start met monitoren van temperatuur-sensoren
  sensorsTemperatuur.setWaitForConversion(false);
  sensorsTemperatuur.begin();
  sensorsTemperatuur.getAddress(sensor01TemperatuurAdres, 0);
  sensorsTemperatuur.setResolution(sensor01TemperatuurAdres, 11);
  sensor01Timer.set(10000);


}


// Arduino loop die oneindig herhaalt
void loop() {
  
  // ------------------------------------
  // UITLEZEN SENSOREN
  // ------------------------------------
  
  // Herhaal elke 10000 ms
  if(sensor01Timer.repeat())
  {
    // Lees de temperatuur sensor uit
    sensorsTemperatuur.requestTemperatures();

    // Haal temperatuur in Celcius op van eerste sensor
    sensor01TemperatuurInlaat = sensorsTemperatuur.getTempCByIndex(0);

    // Toon temperatuur op seriële monitor
    Serial.print(F("Temperatuur 1 is: "));       
    Serial.println(sensor01TemperatuurInlaat);

    // Stuur de temperatuur naar Home Assistant
    boolean rc17 = mqttClient.publish("zwembad/temperatuur/1",dtostrf(sensor01TemperatuurInlaat, 4, 2, x));
  }

  // Herhaal elke 1000 ms
  if(sensor03Timer.repeat())
  {
    updateFlowsensorFlow();

    // Toon flow op seriële monitor
    Serial.print(F("Waterflow is: "));       
    Serial.println(sensor03FlowFlow);

    // Stuur de waterflow naar Home Assistant
    boolean rc17 = mqttClient.publish("zwembad/flow/1",sensor03FlowFlow);
  }


  // ------------------------------------
  // AFHANDELEN BUTTONS
  // ------------------------------------
  
  // Sectie:        ALGEMEEN
  // Knop:          01
  // Functie:       Aan / Uitzetten van frequentieregelaar via Shelly 4PM Pro relais
  // Opmerkingen:   De schakeling van de Shelly relais loopt via Home Assistant
  
  knop01HuidigeStatus = digitalRead(knop01FrequentieregelaarKNOP);

if(knop01HuidigeStatus == HIGH && knop01LaatsteStatus == LOW && ((millis() - knop01Timer) > debounceDelay))
  {
    if(!arduinoIsHerstart)
    {
      // Knop is ingedrukt omdat status anders is dan de vorige loop
      Serial.println(F("Knop frequentieregelaar is ingedrukt"));
  
      // Knop is aangezet
      if (shelly01Status == LOW)
      {
        setFrequentieregelaar(HIGH);
      }
  
      // Knop is uitgezet
      else
      {
        setFrequentieregelaar(LOW);
      } 
  
      // Update timer met de laatste tijd van uitvoering
      knop01Timer = millis();
    }
  }

  // Sla status weer op zodat niet steeds opnieuw getriggerd wordt
  knop01LaatsteStatus = knop01HuidigeStatus;


  // Sectie:        ALGEMEEN
  // Knop:          02
  // Functie:       Aan / Uitzetten van doseerpompjes via Shelly 4PM Pro relais
  // Opmerkingen:   De schakeling van de Shelly relais loopt via Home Assistant
  
  knop02HuidigeStatus = digitalRead(knop02DoseerpompjesKNOP);

  if(knop02HuidigeStatus == HIGH && knop02LaatsteStatus == LOW && ((millis() - knop02Timer) > debounceDelay))
  {
    if(!arduinoIsHerstart)
    {
      // Knop is ingedrukt omdat status anders is dan de vorige loop
      Serial.println(F("Knop doseerpompjes is ingedrukt"));
  
      // Knop is aangezet
      if (shelly02Status == LOW)
      {
        setDoseerpompjes(HIGH);
      }
  
      // Knop is uitgezet
      else
      {
        setDoseerpompjes(LOW);
      } 
  
      // Update timer met de laatste tijd van uitvoering
      knop02Timer = millis();
    }
  }

  // Sla status weer op zodat niet steeds opnieuw getriggerd wordt
  knop02LaatsteStatus = knop02HuidigeStatus;


  // Sectie:        ALGEMEEN
  // Knop:          03
  // Functie:       Aan / Uitzetten van stopcontacten via Shelly 4PM Pro relais
  // Opmerkingen:   De schakeling van de Shelly relais loopt via Home Assistant
  
  knop03HuidigeStatus = digitalRead(knop03StopcontactenKNOP);

  if(knop03HuidigeStatus == HIGH && knop03LaatsteStatus == LOW && ((millis() - knop03Timer) > debounceDelay))
  {
      if(!arduinoIsHerstart)
      {
      // Knop is ingedrukt omdat status anders is dan de vorige loop
      Serial.println(F("Knop stopcontacten is ingedrukt"));
    
      // Knop is aangezet
      if (shelly03Status == LOW)
      {
        setStopcontacten(HIGH);
      }
    
      // Knop is uitgezet
      else
      {
        setStopcontacten(LOW);
      } 
    
      // Update timer met de laatste tijd van uitvoering
      knop03Timer = millis();
    }
  }

  // Sla status weer op zodat niet steeds opnieuw getriggerd wordt
  knop03LaatsteStatus = knop03HuidigeStatus;
 

  // Sectie:        DOSERING
  // Knop:          04
  // Functie:       Aan / Uitzetten van Chloor doseringspompje via Arduino relais B
  // Opmerkingen:   Het relais is een schakelcontact dat een level-schakelaar op het pompje aan / uitzet waardoor de pomp in standby gaat
  
  knop04HuidigeStatus = digitalRead(knop04DoseerpompjeChloorKNOP);

  if(knop04HuidigeStatus == HIGH && knop04LaatsteStatus == LOW && ((millis() - knop04Timer) > debounceDelay))
  {
    if(!arduinoIsHerstart)
    {
      // Knop is ingedrukt omdat status anders is dan de vorige loop
      Serial.println(F("Knop chloor is ingedrukt"));
  
      // Knop is aangezet
      if (relais05Status == LOW)
      {
        setChloorpompje(HIGH);
      }
  
      // Knop is uitgezet
      else
      {
        setChloorpompje(LOW);
      } 
  
      // Update timer met de laatste tijd van uitvoering
      knop04Timer = millis();
    }
  }

  // Sla status weer op zodat niet steeds opnieuw getriggerd wordt
  knop04LaatsteStatus = knop04HuidigeStatus;


  // Sectie:        DOSERING
  // Knop:          05
  // Functie:       Aan / Uitzetten van PH doseringspompje via Arduino relais B
  // Opmerkingen:   Het relais is een schakelcontact dat een level-schakelaar op het pompje aan / uitzet waardoor de pomp in standby gaat
  
  knop05HuidigeStatus = digitalRead(knop05DoseerpompjePhKNOP);

  if(knop05HuidigeStatus == HIGH && knop05LaatsteStatus == LOW && ((millis() - knop05Timer) > debounceDelay))
  {
    if(!arduinoIsHerstart)
    {
      // Knop is ingedrukt omdat status anders is dan de vorige loop
      Serial.println(F("Knop PH is ingedrukt"));
  
      // Knop is aangezet
      if (relais06Status == LOW)
      {
        setPhpompje(HIGH);
      }
  
      // Knop is uitgezet
      else
      {
        setPhpompje(LOW);
      } 
  
      // Update timer met de laatste tijd van uitvoering
      knop05Timer = millis();
    }
  }

  // Sla status weer op zodat niet steeds opnieuw getriggerd wordt
  knop05LaatsteStatus = knop05HuidigeStatus;
  

  // Sectie:        POMP INSTELLING
  // Knop:          06
  // Functie:       Aanzetten automatische stand frequentieregelaar via Arduino relais A
  // Opmerkingen:   Met deze knop worden alle contacten op relais A opengezet zodat de frequentieregelaar in de clockmode gaat
  
  knop06HuidigeStatus = digitalRead(knop06PompAutoKNOP);

  if(knop06HuidigeStatus == HIGH && knop06LaatsteStatus == LOW && ((millis() - knop06Timer) > debounceDelay))
  {
      if(!arduinoIsHerstart)
      {
      // Knop is ingedrukt omdat status anders is dan de vorige loop
      Serial.println(F("Knop pomp op auto is ingedrukt"));
    
      // Knop is aangezet
      if (pompAutoStatus == LOW)
      {
        setPompAuto(HIGH);
      }
    
      // Knop is uitgezet
      else
      {
        setPompAuto(LOW);
      } 
    
      // Update timer met de laatste tijd van uitvoering
      knop06Timer = millis();
    }
  }  

  // Sla status weer op zodat niet steeds opnieuw getriggerd wordt
  knop06LaatsteStatus = knop06HuidigeStatus;


  // Sectie:        POMP INSTELLING
  // Knop:          07
  // Functie:       Aanzetten uit stand frequentieregelaar via Arduino relais A
  // Opmerkingen:   Belangrijk is om alle contacten op het relais te schakelen zodat er maar 1 hoog is
  
  knop07HuidigeStatus = digitalRead(knop07PompUitKNOP);

  if(knop07HuidigeStatus == HIGH && knop07LaatsteStatus == LOW && ((millis() - knop07Timer) > debounceDelay))
  {
    if(!arduinoIsHerstart)
    {
      // Knop is ingedrukt omdat status anders is dan de vorige loop
      Serial.println(F("Knop pomp op uit is ingedrukt"));
  
      setPompUit();
  
      // Update timer met de laatste tijd van uitvoering
      knop07Timer = millis();
    }
  }

  // Sla status weer op zodat niet steeds opnieuw getriggerd wordt
  knop07LaatsteStatus = knop07HuidigeStatus;


  // Sectie:        POMP INSTELLING
  // Knop:          08
  // Functie:       Aanzetten laag stand frequentieregelaar via Arduino relais A
  // Opmerkingen:   Belangrijk is om alle contacten op het relais te schakelen zodat er maar 1 hoog is
  
  knop08HuidigeStatus = digitalRead(knop08PompLaagKNOP);

  if(knop08HuidigeStatus == HIGH && knop08LaatsteStatus == LOW && ((millis() - knop08Timer) > debounceDelay))
  {
    if(!arduinoIsHerstart)
    {
      // Knop is ingedrukt omdat status anders is dan de vorige loop
      Serial.println(F("Knop pomp op laag is ingedrukt"));
  
      setPompLaag();
      
      // Update timer met de laatste tijd van uitvoering
      knop08Timer = millis();
    }
  }

  // Sla status weer op zodat niet steeds opnieuw getriggerd wordt
  knop08LaatsteStatus = knop08HuidigeStatus;


  // Sectie:        POMP INSTELLING
  // Knop:          09
  // Functie:       Aanzetten midden stand frequentieregelaar via Arduino relais A
  // Opmerkingen:   Belangrijk is om alle contacten op het relais te schakelen zodat er maar 1 hoog is
  
  knop09HuidigeStatus = digitalRead(knop09PompMiddenKNOP);

  if(knop09HuidigeStatus == HIGH && knop09LaatsteStatus == LOW && ((millis() - knop09Timer) > debounceDelay))
  {
    if(!arduinoIsHerstart)
    {
      // Knop is ingedrukt omdat status anders is dan de vorige loop
      Serial.println(F("Knop pomp op midden is ingedrukt"));
  
      setPompMidden();
  
      // Update timer met de laatste tijd van uitvoering
      knop09Timer = millis();
    }
  }

  // Sla status weer op zodat niet steeds opnieuw getriggerd wordt
  knop09LaatsteStatus = knop09HuidigeStatus;


  // Sectie:        POMP INSTELLING
  // Knop:          10
  // Functie:       Aanzetten hoog stand frequentieregelaar via Arduino relais A
  // Opmerkingen:   Belangrijk is om alle contacten op het relais te schakelen zodat er maar 1 hoog is
  
  knop10HuidigeStatus = digitalRead(knop10PompHoogKNOP);

  if(knop10HuidigeStatus == HIGH && knop10LaatsteStatus == LOW && ((millis() - knop10Timer) > debounceDelay))
  {
    if(!arduinoIsHerstart)
    {
      // Knop is ingedrukt omdat status anders is dan de vorige loop
      Serial.println(F("Knop pomp op hoog is ingedrukt"));
  
      setPompHoog();
  
      // Update timer met de laatste tijd van uitvoering
      knop10Timer = millis();
    }
  }

  // Sla status weer op zodat niet steeds opnieuw getriggerd wordt
  knop10LaatsteStatus = knop10HuidigeStatus;

  if(arduinoIsHerstart)
  {
    // Stuur een eerste syncbericht naar Home Asssitant om alle huidige standen op te halen
    arduinoIsHerstart = false;
    mqttClient.publish("tuinhuis/sync","SYNC");
  }

      
  // Zet MQTT client in loop mode zodat deze continue blijft zoeken naar nieuwe binnenkomende berichten
  mqttReconnect();
}



void mqttConnect()
{
  mqttClient.setServer("192.168.50.6", 1883);
  while (!mqttClient.connected()) {
    Serial.print(F("MQTT connecting..."));
    
    if (mqttClient.connect("arduino-1","mosquitto","pass"))
    {
      // Connectie gelukt
      Serial.println(F("Verbonden met MQTT server"));
      mqttClient.setCallback(mqttOntvangen);

      // Inschrijven op topic waarop Home Assistant gaat communiceren
      mqttClient.subscribe("tuinhuis/callback");
      Serial.println(F("Aangemeld voor callbacks vanuit Home Assistant"));
    }
    
    else
    {
      // Connectie niet gelukt
      Serial.print(F("Het is niet gelukt om te verbinden met de MQTT server, rc="));
      Serial.print(mqttClient.state());
      Serial.println(F("- opnieuw proberen over 5 seconde"));
      delay(5000);
    }
  }
}  

void mqttReconnect()
{
  // Zorg er voor dat er een verbinding blijft met de MQTT broker
  if (!mqttClient.connected()) {
    mqttConnect();
  }
  
  mqttClient.loop();
}

void mqttOntvangen(char* topic, byte* payload, unsigned int length) {
  berichtOntvangen = true;

  Serial.print(F("MQTT bericht ontvangen: "));
  Serial.write(payload, length);
  Serial.println();

  // ALGEMEEN
  if (strncmp((const char*) payload, "DOSEERPOMPJES-ON", 16) == 0)
  {
    setDoseerpompjes(HIGH);
  }
  
  else if (strncmp((const char*) payload, "DOSEERPOMPJES-OFF", 17) == 0)
  {
    setDoseerpompjes(LOW);
  }
  
  else if (strncmp((const char*) payload, "FREQUENTIEREGELAAR-ON", 21) == 0)
  {
    setFrequentieregelaar(HIGH);
  }

  else if (strncmp((const char*) payload, "FREQUENTIEREGELAAR-OFF", 22) == 0)
  {
    setFrequentieregelaar(LOW);
  }

  else if (strncmp((const char*) payload, "STOPCONTACTEN-ON", 16) == 0)
  {
    setStopcontacten(HIGH);
  }

  else if (strncmp((const char*) payload, "STOPCONTACTEN-OFF", 17) == 0)
  {
    setStopcontacten(LOW);
  }

  // DOSERING
  else if (strncmp((const char*) payload, "CHLOORPOMPJE-ON", 15) == 0)
  {
    setChloorpompje(HIGH);
  }

  else if (strncmp((const char*) payload, "CHLOORPOMPJE-OFF", 16) == 0)
  {
    setChloorpompje(LOW);
  }

  else if (strncmp((const char*) payload, "PHPOMPJE-ON", 11) == 0)
  {
    setPhpompje(HIGH);
  }

  else if (strncmp((const char*) payload, "PHPOMPJE-OFF", 12) == 0)
  {
    setPhpompje(LOW);
  }

  // POMP INSTELLING
  else if (strncmp((const char*) payload, "POMP-AUTO-ON", 12) == 0)
  {
    setPompAuto(HIGH);
  }

  else if (strncmp((const char*) payload, "POMP-AUTO-OFF", 13) == 0)
  {
    setPompAuto(LOW);
  }

  else if (strncmp((const char*) payload, "POMP-UIT", 8) == 0)
  {
    setPompUit();
  }

  else if (strncmp((const char*) payload, "POMP-LAAG", 9) == 0)
  {
    setPompLaag();
  }

  else if (strncmp((const char*) payload, "POMP-MIDDEN", 11) == 0)
  {
    setPompMidden();
  }

  else if (strncmp((const char*) payload, "POMP-HOOG", 9) == 0)
  {
    setPompHoog();
  }  
}


// ------------------------------------
// BUTTON FUNCTIES
// ------------------------------------
void setDoseerpompjes(bool state)
{
  // Zet doseerpompjes aan
  if(state == HIGH)
  {
    // Stuur trigger naar Home Assistant
    if(mqttClient.publish("tuinhuis/doseerpompjes","ON"))
    {
      // Zet LED van knop aan
      digitalWrite(knop02DoseerpompjesLED, HIGH);
  
      // Zet status op aan
      shelly02Status = HIGH;
    }
  }

  // Zet doseerpompjes uit
  else
  {
    // Stuur trigger naar Home Assistant
    if(mqttClient.publish("tuinhuis/doseerpompjes","OFF"))
    {
      // Zet LED van knop uit
      digitalWrite(knop02DoseerpompjesLED, LOW);

      // Zet status op uit
      shelly02Status = LOW;
    }
  }
}

void setFrequentieregelaar(bool state)
{
  // Zet frequentieregelaar aan
  if(state == HIGH)
  {
    // Stuur trigger naar Home Assistant
    if(mqttClient.publish("tuinhuis/frequentieregelaar","ON"))
    {
      // Zet LED van knop aan
      digitalWrite(knop01FrequentieregelaarLED, HIGH);

      // Zet status op aan
      shelly01Status = HIGH;
    }
  }

  // Zet frequentieregelaar uit
  else
  {
    // Stuur trigger naar Home Assistant
    if(mqttClient.publish("tuinhuis/frequentieregelaar","OFF"))
    {
      // Zet LED van knop uit
      digitalWrite(knop01FrequentieregelaarLED, LOW);

      // Zet status op uit
      shelly01Status = LOW;
    }
  }
}

void setStopcontacten(bool state)
{
  // Zet stopcontacten aan
  if(state == HIGH)
  {
    // Stuur trigger naar Home Assistant
    if(mqttClient.publish("tuinhuis/stopcontacten","ON"))
    {
      // Zet LED van knop aan
      digitalWrite(knop03StopcontactenLED, HIGH);

      // Zet status op aan
      shelly03Status = HIGH;
    }
  }

  // Zet stopcontacten uit
  else
  {
    // Stuur trigger naar Home Assistant
    if(mqttClient.publish("tuinhuis/stopcontacten","OFF"))
    {
      // Zet LED van knop uit
      digitalWrite(knop03StopcontactenLED, LOW);

      // Zet status op uit
      shelly03Status = LOW;
    }
  }
}


void setChloorpompje(bool state)
{
  // Zet chloorpompje aan
  if(state == HIGH)
  {
    // Stuur trigger naar Home Assistant
    if(mqttClient.publish("tuinhuis/chloor","ON"))
    {
      // Zet LED van knop aan
      digitalWrite(knop04DoseerpompjeChloorLED, HIGH);
      
      // Zet relais 5 (chloor) aan
      digitalWrite(relais05DoseerpompjeChloorOnOff, HIGH);
      
      // Zet status op aan
      relais05Status = HIGH;
    }
  }

  // Zet chloorpompje uit
  else
  {
    // Stuur trigger naar Home Assistant
    if(mqttClient.publish("tuinhuis/chloor","OFF"))
    {
      // Zet LED van knop uit
      digitalWrite(knop04DoseerpompjeChloorLED, LOW);
      
      // Zet relais 5 (chloor) uit
      digitalWrite(relais05DoseerpompjeChloorOnOff, LOW);
      
      // Zet status op uit
      relais05Status = LOW;
    }
  }
}


void setPhpompje(bool state)
{
  // Zet PH pompje aan
  if(state == HIGH)
  {
    // Stuur trigger naar Home Assistant
    if(mqttClient.publish("tuinhuis/ph","ON"))
    {
      // Zet LED van knop aan
      digitalWrite(knop05DoseerpompjePhLED, HIGH);

      // Zet relais 5 (chloor) aan
      digitalWrite(relais06DoseerpompjePhOnOff, HIGH);

      // Zet status op aan
      relais06Status = HIGH;
    }
  }

  // Zet PH pompje uit
  else
  {
    // Stuur trigger naar Home Assistant
    if(mqttClient.publish("tuinhuis/ph","OFF"))
    {
      // Zet LED van knop uit
      digitalWrite(knop05DoseerpompjePhLED, LOW);
      
      // Zet relais 5 (chloor) uit
      digitalWrite(relais06DoseerpompjePhOnOff, LOW);
      
      // Zet status op uit
      relais06Status = LOW;
    }
  }
}


void setPompAuto(bool state)
{
  // Zet PH pompje aan
  if(state == HIGH)
  {
    // Stuur trigger naar Home Assistant
    if(mqttClient.publish("tuinhuis/pomp","AUTO-ON"))
    {
      // Zet LED van knop aan
      digitalWrite(knop06PompAutoLED, HIGH);
  
      // Zet andere LEDS uit
      //digitalWrite(knop07PompUitLED, LOW);
      //digitalWrite(knop08PompLaagLED, LOW);
      //digitalWrite(knop09PompMiddenLED, LOW);
      //digitalWrite(knop10PompHoogLED, LOW);
      
      // Zet relais 1, 2, 3 en 4 uit
      //digitalWrite(relais01FreqentieregelaarDi1OnOff, HIGH);
      //digitalWrite(relais02FreqentieregelaarDi2Hoog, HIGH);
      //digitalWrite(relais03FreqentieregelaarDi3Midden, HIGH);
      //digitalWrite(relais04FreqentieregelaarDi4Laag, HIGH);

      // Zet status op uit
      pompAutoStatus = HIGH;
    }
  }

  else
  {
    // Stuur trigger naar Home Assistant
    if(mqttClient.publish("tuinhuis/pomp","AUTO-OFF"))
    {
      // Zet LED van knop aan
      digitalWrite(knop06PompAutoLED, LOW);
  
      // Zet andere LEDS uit
      //digitalWrite(knop07PompUitLED, LOW);
      //digitalWrite(knop08PompLaagLED, LOW);
      //digitalWrite(knop09PompMiddenLED, LOW);
      //digitalWrite(knop10PompHoogLED, LOW);
      
      // Zet relais 1, 2, 3 en 4 uit
      //digitalWrite(relais01FreqentieregelaarDi1OnOff, HIGH);
      //digitalWrite(relais02FreqentieregelaarDi2Hoog, HIGH);
      //digitalWrite(relais03FreqentieregelaarDi3Midden, HIGH);
      //digitalWrite(relais04FreqentieregelaarDi4Laag, HIGH);

      // Zet status op uit
      pompAutoStatus = LOW;
    }
  }  
}


void setPompUit()
{
  // Stuur trigger naar Home Assistant
  if(mqttClient.publish("tuinhuis/pomp","UIT"))
  {
    // Zet LED van knop aan
    digitalWrite(knop07PompUitLED, HIGH);

    // Zet andere LEDS uit
    //digitalWrite(knop06PompAutoLED, LOW);
    digitalWrite(knop08PompLaagLED, LOW);
    digitalWrite(knop09PompMiddenLED, LOW);
    digitalWrite(knop10PompHoogLED, LOW);
    
    // Zet relais 1 aan en 2, 3 en 4 uit
    digitalWrite(relais01FreqentieregelaarDi1OnOff, LOW);
    digitalWrite(relais02FreqentieregelaarDi2Hoog, HIGH);
    digitalWrite(relais03FreqentieregelaarDi3Midden, HIGH);
    digitalWrite(relais04FreqentieregelaarDi4Laag, HIGH);
  }
}

void setPompLaag()
{
  // Stuur trigger naar Home Assistant
  if(mqttClient.publish("tuinhuis/pomp","LAAG"))
  {
    // Zet LED van knop aan
    digitalWrite(knop08PompLaagLED, HIGH);

    // Zet andere LEDS uit
    //digitalWrite(knop06PompAutoLED, LOW);
    digitalWrite(knop07PompUitLED, LOW);
    digitalWrite(knop09PompMiddenLED, LOW);
    digitalWrite(knop10PompHoogLED, LOW);
    
    // Zet relais 1 aan en 2, 3 en 4 uit
    digitalWrite(relais01FreqentieregelaarDi1OnOff, HIGH);
    digitalWrite(relais02FreqentieregelaarDi2Hoog, HIGH);
    digitalWrite(relais03FreqentieregelaarDi3Midden, HIGH);
    digitalWrite(relais04FreqentieregelaarDi4Laag, LOW);
  }
}

void setPompMidden()
{
  // Stuur trigger naar Home Assistant
  if(mqttClient.publish("tuinhuis/pomp","MIDDEN"))
  {
    // Zet LED van knop aan
    digitalWrite(knop09PompMiddenLED, HIGH);

    // Zet andere LEDS uit
    //digitalWrite(knop06PompAutoLED, LOW);
    digitalWrite(knop07PompUitLED, LOW);
    digitalWrite(knop08PompLaagLED, LOW);
    digitalWrite(knop10PompHoogLED, LOW);
    
    // Zet relais 1 aan en 2, 3 en 4 uit
    digitalWrite(relais01FreqentieregelaarDi1OnOff, HIGH);
    digitalWrite(relais02FreqentieregelaarDi2Hoog, HIGH);
    digitalWrite(relais03FreqentieregelaarDi3Midden, LOW);
    digitalWrite(relais04FreqentieregelaarDi4Laag, HIGH);
  }
}

void setPompHoog()
{
  // Stuur trigger naar Home Assistant
  if(mqttClient.publish("tuinhuis/pomp","HOOG"))
  {
    // Zet LED van knop aan
    digitalWrite(knop10PompHoogLED, HIGH);

    // Zet andere LEDS uit
    //digitalWrite(knop06PompAutoLED, LOW);
    digitalWrite(knop07PompUitLED, LOW);
    digitalWrite(knop08PompLaagLED, LOW);
    digitalWrite(knop09PompMiddenLED, LOW);
    
    // Zet relais 1 aan en 2, 3 en 4 uit
    digitalWrite(relais01FreqentieregelaarDi1OnOff, HIGH);
    digitalWrite(relais02FreqentieregelaarDi2Hoog, LOW);
    digitalWrite(relais03FreqentieregelaarDi3Midden, HIGH);
    digitalWrite(relais04FreqentieregelaarDi4Laag, HIGH);
  }
}


void pulseFlowsensor()
{
    // Bij iedere puls de counter verhogen met 1
    sensor03FlowPulseCounter += 1;
}

void updateFlowsensorFlow()
{
  noInterrupts();
  int sensor03FlowPulseCounterCopy = sensor03FlowPulseCounter;
  sensor03FlowPulseCounter = 0;
  interrupts();
  Serial.println(sensor03FlowPulseCounterCopy);
  sensor03FlowFlow = 3600 * sensor03FlowPulseCounterCopy * 1000 / (millis() - sensor03FlowLastMillis) / sensor03FlowPulsesPerSeconde;    // m3/u
  sensor03FlowLastMillis = millis();
  //sensor03FlowPulseCounter = 0;
}

Still no luck. I see some action when booting the Arduino in the interrupt but after booting it keeps saying 0.

When you say "it keeps saying 0" do you mean sensor03FlowPulseCounter?
Also, I noticed sensor03FlowLastMillis should be declared as unsigned long. Anything having to do with millis() should be declared as unsigned long.

Also, I'm pretty sure you should use pin mode INPUT rather than INPUT_PULLUP for that sensor.

I mean sensor03FlowPulseCounterCopy is 0 (only after booting once or twice to 1 or 2).

Strange thing after debugging by removing bits of code. When I remove these lines it looks likes evertything works fine.

  pinMode(knop06PompAutoLED,                  OUTPUT);
  pinMode(knop07PompUitLED,                   OUTPUT);
  pinMode(knop08PompLaagLED,                  OUTPUT);
  pinMode(knop09PompMiddenLED,                OUTPUT);    
  pinMode(knop10PompHoogLED,                  OUTPUT);

Very strange. I've been looking to see if there are any pin conflicts. So even the Flow sensor is working when those are commented out?

Have you tried a sketch that has only the OneWire, temp sensor, and flow sensor? i.e. removing the Ethernet , MQTT, LEDs and switches?

I would physically remove the Ethernet shield.

Will try that tomorrow. I noticed also some strange behaviour in the flowrate working the opposite way: when pump is at a high RPM the flow is lesser then when pump is at a low RPM.

Maybe I can build the flowmeter using polling instead of using an interrupt?

You certainly could but you would have to make sure there are not functions blocking that would cause you to miss pulses. I think what you are doing is OK but like you I don't understand what the issue is.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.