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;
}