Badkamer klimaat

algemene C code
Berichten: 11
Geregistreerd: 30 Jul 2015, 16:33

Badkamer klimaat

Berichtdoor Sanderoni » 27 Jul 2017, 14:47

Beste Forumleden,

Ik heb een installatie voor mijn nieuwe badkamer gemaakt, met aansturing vanuit de Arduino voor:

- elektrische vloerverwarming (standen 0, 1/3, 2/3 en vol) via een triac.
- een ventilator met 3 standen (perilex) welke aangestuurd worden door de WC (PIR), RV of drukknop (afzuigen douchen)
- verlichting dimbaar
- een klep voor de CV

Nu werd het geheugen van de Arduino aardig belast en liep deze vast. Ik heb nu mijn code wat gewijzigd en er diverse functie blokken ingezet voor o.a. de vloerverwarming en de ventilatie.

Alleen als nu een functie blok moet worden aangeroepen (Klokventilatie, en Vent2 in de functie Klokventilatie) start deze niet.

Kan iemand zien of ik iets verkeerd doe, qua functie aanroepen?

Mvg,

Sander

cpp code
// Programma tbv badkamer & WC mei 2017//
// Bijgewerkt: 24 juli 2017 //

#include <avr/wdt.h>
#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Time.h>
#include <DS3231.h>
#include <OneWire.h>

// * aanwijzing van in en uitgangen:

#define PIRWC A2 // PIR WC melding
#define BUTTONLCD 13 // drukknop LCD scherm (backlight & scrollen)
#define SV1 2 // Stuursignaal 1 Vloerverwarming
#define SV2 3 // Stuursignaal 2 Vloerverwarming
#define VenStand1 4 // relais 1 tm 3 ventilatie
#define VenStand2 5 // " "
#define VenStand3 6 // " "
#define TEMPVOCHT 7 // ingang temperatuur/vocht DHT22 sensor
#define GATERADIATOR 8 // triac aansturing radiator
#define LED_LCDBacklight 9 // backlicht aansturing LCD scherm
#define VERLICHTING1 10 // aansturing LED spots plafond
#define VERLICHTING2 11 // aansturing LED strips nisverlichting
#define PUSHVENTILATIE 12 // drukknop voor ventilatie badkamer
#define TEMPVLOER A3 // ingang temperatuurvoeler vloerverwarming DS18B20
#define DIMMERLICHT A0 // ingang tbv dimmer verlichting badkamer
#define DC_IN A1 // spanning vanaf 12 volt gelijkrichter

#define DHTTYPE DHT22 // vocht/temp is een DHT 22 (AM2302), AM2321
DHT dht(TEMPVOCHT, DHTTYPE);

int16_t tempvloer(int x,byte start) // inlezen van DS18B20 voeler
{

OneWire ds (x);
byte i;
byte data[2];
int16_t result;
do
{
ds.reset(); // reset de DS18B20 chip
ds.write(0xCC); // skip ROM van sensor (1 sensor)
ds.write(0xBE); // lees "scratchpad" geheugen van de sensor
for (i=0; i<2; i++) data[i] = ds.read(); //
result=(data[1]<<8)|data[0];
result>>=4; if (data[1]&128) result |=61440;
if (data[0]&8) ++result;
ds.reset();
ds.write(0xCC);
ds.write(0x44,1); // stuurt temperatuur data naar de Arduino
if (start) delay(1000);
}
while (start--);
return result;
}

// * aanwijzing van globale variabelen:

int vloertemp = 0;
double badkamertemp = 0;
double badkamervocht = 0;
double tempPrint = 0;
double UPrint = 0;
int HuidigeTijd =0;
int uur = 0;
byte uurPlus = 0;
int minNachtTijd1 = 2200;
int maxNachtTijd1 = 0400;
int minNachtTijd2 = 2000;
int maxNachtTijd2 = 0500;
int minDagTijd = 800;
int maxDagTijd = 1700;
byte nachtklok1 = 0;
byte nachtklok2 = 0;
byte dagklok = 0;
byte dimmerwaarde1 = 0;
byte dimmerwaarde2 = 0;
int8_t opwarmen = 0;
int8_t Ventilatie0 = 0;
int8_t Ventilatie1 = 0;
int8_t Ventilatie2 = 0;
int8_t Ventilatie3 = 0;
int timerWC = 0; // tijdvertraging in sec. WC ventilatie (zonder hysteresisch vertraging) afhankelijk van nachtklok
byte WCaan = 0;
unsigned long timer1 = 0;
byte klokventilatie = 0;
int buttonStateLCD = 1; // the current reading from the input pin
unsigned long lastDebounceTime = 0; // laatste keer de uitgang LCD pin was toggled
int debounceDelay = 200; // debounce voor knop LCD (200 milliseconden)
int timerLCD = 120; // tijdvertraging in sec. backlight LCD scherm
unsigned long timer5 = 0;
int paginateller = 0;
int timerData = 7000; // tijdvertraging in millisec. Laden seriele data
unsigned long timer6 = 0;

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Set the pins on LCD I2C address 0x27

DS3231 rtc(SDA, SCL); // Haal data van de DS3231 print via de SDA en SCL data lijn
Time t; // init tijd en datum

void setup()
{

// * set up van in- en uitgangen---------------------------------------------------------------------------------------

pinMode(PIRWC, INPUT);
pinMode(BUTTONLCD, INPUT);
pinMode(SV1, OUTPUT);
pinMode(SV2, OUTPUT);
pinMode(VenStand1, OUTPUT);
pinMode(VenStand2, OUTPUT);
pinMode(VenStand3, OUTPUT);
pinMode(TEMPVOCHT, INPUT);
pinMode(GATERADIATOR, OUTPUT);
pinMode(LED_LCDBacklight, OUTPUT);
pinMode(VERLICHTING1, OUTPUT);
pinMode(VERLICHTING2, OUTPUT);
pinMode(PUSHVENTILATIE, INPUT);
pinMode(DIMMERLICHT, INPUT);
pinMode(DC_IN, INPUT);

tempvloer(A3, 1); // leest opstartcode in
dht.begin();
lcd.begin(20,2); // start voor lcd for 20 chars en 2 lines
rtc.begin(); // init DS3132
// Om de tijd in te stellen: Unlock de volgende regels:
//rtc.setDOW(MONDAY); // Set Day-of-Week to SUNDAY
//rtc.setTime(9,11,00); // Set the time to 12:00:00 (24hr format + Wintertijd!!)
//rtc.setDate(20, 5, 2017); // Set the date to January 1st, 2014// start van DHT temp / vocht library

Serial.begin(9600); // start van seriele communcatie
wdt_enable(WDTO_2S); // watchdog start voor 2" na reset



}


void loop()
{
lees_data();
besturing_verwarming();
besturing_ventilatie();
besturing_verlichting();
lcd_laden();
serial_laden();
wdt_reset(); // als loop blijft hangen, dan reset arduino
}

void lees_data(void) // * inlezen van sensors (tijd - vocht/temperatuur - vloertemperatuur - temp print - spanning print - dimmer)
{

t = rtc.getTime(); // haal de data van de DS3231

if (t.mon > 3 && t.mon < 11) // klok op zomertijd tussen april en oktober
{
uur = t.hour + 1;
uurPlus = 1;
}
else
{
uur = t.hour;
uurPlus = 0;
}

HuidigeTijd = uur * 100 + t.min; // bereken huidige tijd als gewoon getal.

if (t.dow == 6 || t.dow == 7)
{
minDagTijd = 900;
minNachtTijd1 = 2300;
maxNachtTijd1 = 500;
maxNachtTijd2 = 600;
}
else
{
minDagTijd = 800;
minNachtTijd1 = 2300;
maxNachtTijd1 = 400;
maxNachtTijd2 = 500;
}

if (HuidigeTijd >= minDagTijd && HuidigeTijd <= maxDagTijd)
{
dagklok = 1;
}
else
{
dagklok = 0;
}

if (HuidigeTijd >= minNachtTijd1 || HuidigeTijd <= maxNachtTijd1)
{
nachtklok1 = 1;
}
else
{
nachtklok1 = 0;
}

if (HuidigeTijd >= minNachtTijd2 || HuidigeTijd <= maxNachtTijd2)
{
nachtklok2 = 1;
}
else
{
nachtklok2 = 0;
}

vloertemp = tempvloer(A3, 1); // zet de waarde uit de startcode in een integer

badkamertemp = dht.readTemperature(); // zet badkamer temperatuur in globale variabele "badkamer temperatuur"
badkamervocht = dht.readHumidity(); // zet vochtigheid badkamer in globale variabele "badkamer vochtigheid"

tempPrint = rtc.getTemp(); // zet temperatuur van print in globale variabele "temperatuur print"

UPrint = analogRead(DC_IN)*0.0046*3.7; // zet spanning vanaf gelijkrichter in globale variabele "spanning print"

int dim = analogRead(DIMMERLICHT); // omzetting van dimmeringang naar bruikbare waarde (0 - 255) voor LED verlichting
dimmerwaarde1 = map(dim, 0, 1023, 0, 230); // Spots plafond (230 = 12 Volt gem. uitsturing)
dimmerwaarde2 = map(dim, 0, 1023, 0, 20); // LED strip in Nis
}

void besturing_verwarming(void) // * besturing vloerverwarming + besturing radiator -------------------------------------- ----------------------------------------
{
if (dagklok == 1 || (nachtklok2 == 1 && HuidigeTijd <= minNachtTijd1))
{
vloerLaag();
}
else if (dagklok == 0 && nachtklok2 == 0)
{
vloerregeling();
}
else
{
vloeruit();
}


if (badkamertemp < 20) // sturing van klep verwarmingsradiator
{
digitalWrite(GATERADIATOR, HIGH);
}
else if (badkamertemp > 22)
{
digitalWrite(GATERADIATOR, LOW);
}

}

void vloeruit ()
{
digitalWrite(SV1, LOW); // Vloerverwarming uit
digitalWrite(SV2, LOW);
opwarmen = 1;
}

void vloerLaag ()
{
opwarmen = 1;
if (badkamertemp < 25 && vloertemp < 26)
{
digitalWrite(SV1, LOW); // 1/3 uitsturing, U effectief = 60 Volt
digitalWrite(SV2, HIGH);
}
else if (badkamertemp > 25 || vloertemp > 27)
{
digitalWrite(SV1, LOW); // Vloerverwarming uit
digitalWrite(SV2, LOW);
}
}

void vloerregeling()
{
if (badkamertemp < 25)
{
if (vloertemp < 25 || opwarmen == 1)
{
digitalWrite(SV1, HIGH); // 3/3 uitsturing, U effectief = 230 Volt
digitalWrite(SV2, HIGH);
}
else if (vloertemp > 25 && vloertemp < 27 && opwarmen == 0)
{
digitalWrite(SV1, HIGH); // 2/3 uitsturing, U effectief = 150 Volt
digitalWrite(SV2, LOW);
}
else if (vloertemp > 27 && vloertemp < 28 && opwarmen == 0)
{
digitalWrite(SV1, LOW); // 1/3 uitsturing, U effectief = 60 Volt
digitalWrite(SV2, HIGH);
}
else if (vloertemp > 28)
{
opwarmen = 0;
digitalWrite(SV1, LOW); // Vloerverwarming uit
digitalWrite(SV2, LOW);
}
}
else
{
digitalWrite(SV1, LOW); // Vloerverwarming uit
digitalWrite(SV2, LOW);
}
}
void besturing_ventilatie(void) //* besturing ventilatie badkamer & WC ------------------------------------------------------------------------------------------
{

if (nachtklok2 == 1)
{
timerWC = 120;
}
else
{
timerWC = 300;
}

if (digitalRead(PIRWC) == HIGH) // Bij detectie PIR in WC gaat kloktijd ventilatie WC aan.
{
timer1 = now() + timerWC;
WCaan = 1;
}
else if (now() >= timer1 || timer1 == 0)
{
timer1 = 0;
WCaan = 0;
}

if (nachtklok1 == 1 && badkamervocht < 80 && klokventilatie == 0)
{
VentUit();
}
else if (nachtklok1 == 0 && klokventilatie == 0 && WCaan == 0)
{
Vent1();
}
else if (klokventilatie == 0 && (WCaan == 1 || (badkamervocht > 82 && badkamervocht < 90)))
{
Vent2();
}
else if (klokventilatie == 0 && badkamervocht > 92)
{
Vent3();
}
else if (klokventilatie == 1)
{
Klokventilatie();
}

if (digitalRead(PUSHVENTILATIE) == HIGH)
{
klokventilatie = 1; // Bij bediening drukknop ventilatie gaat kloktijd ventilatie Badkamer aan.
}
}

void VentUit()
{
digitalWrite(VenStand1, HIGH);
digitalWrite(VenStand2, LOW);
digitalWrite(VenStand3, LOW);
Ventilatie0 = 1;
}

void Vent1()
{
digitalWrite(VenStand1, LOW);
digitalWrite(VenStand2, LOW);
digitalWrite(VenStand3, LOW);
Ventilatie1 = 1;
}

void Vent2()
{
digitalWrite(VenStand1, LOW);
if (nachtklok1 == 0 || klokventilatie == 1)
{
digitalWrite(VenStand2, HIGH);
}
else
{
digitalWrite(VenStand2, LOW);
}
digitalWrite(VenStand3, LOW);
Ventilatie2 = 1;
}

void Vent3()
{
digitalWrite(VenStand1, LOW);
digitalWrite(VenStand2, HIGH);
if (nachtklok1 == 0 && HuidigeTijd < 2130)
{
digitalWrite(VenStand3, HIGH);
}
else digitalWrite(VenStand3, LOW);
Ventilatie3 = 1;
}



void Klokventilatie ()
{

unsigned long TimerVentilatie = 0;
byte BKaan1 = 0;
byte BKaan2 = 0;
byte BKaan3 = 0;

if (digitalRead(PUSHVENTILATIE) == HIGH && klokventilatie == 1 && BKaan1 == 0 && BKaan2 == 0 && BKaan3 == 0)
{
BKaan1 = 1;
}
else if (BKaan1 == 1)
{
TimerVentilatie = now() + 300;
Vent2();
}
else if ((now() > TimerVentilatie) && BKaan1 == 1)
{
BKaan1 = 0;
BKaan2 = 1;
TimerVentilatie = now() + 300;
Vent3();
}
else if ((now() > TimerVentilatie) && BKaan2 == 1)
{
BKaan2 = 0;
BKaan3 = 1;
TimerVentilatie = now() + 480;
Vent2();
}
else if ((now() > TimerVentilatie) && BKaan3 == 1)
{
BKaan3 = 0;
TimerVentilatie = 0;
klokventilatie = 0;
}
}
void besturing_verlichting(void) // * besturing verlichting badkamer -----------------------------------------------------------------------------------------------------
{

analogWrite(VERLICHTING1, dimmerwaarde1);

analogWrite(VERLICHTING2, dimmerwaarde2);

}

void lcd_laden(void) // * besturing LCD scherm ---------------------------------------------------------------------------------------------------------------
{

int reading = digitalRead(BUTTONLCD);

if (reading != 1 && lastDebounceTime == 0) // reset the debouncing timer
{
lastDebounceTime = millis();
buttonStateLCD = 0;
paginateller++;
}

if (paginateller > 2)
{
paginateller = 0;
}

if ((millis() - lastDebounceTime) > debounceDelay)
{
if (reading != buttonStateLCD)
{
buttonStateLCD = reading;
lastDebounceTime = 0;
}
}

if (buttonStateLCD == 0) // backlight aan bij drukken, timer aan en paginateller +1
{
digitalWrite(LED_LCDBacklight, HIGH);
timer5 = now() + timerLCD;
}

if (digitalRead(LED_LCDBacklight) == HIGH)
{
LCDbesturing();
}

else if (now() >= timer5)
{
timer5 = 0;
digitalWrite(LED_LCDBacklight, LOW);
}
}
void LCDbesturing ()
{

int printdataLCD = 2000;
unsigned long TimerDataLCD = 0;

if (digitalRead(LED_LCDBacklight) == HIGH)
{
if (paginateller == 0) // pagina 1 van LCD scherm
{
if ((millis() - TimerDataLCD > printdataLCD) || buttonStateLCD == 0) // "laad" het scherm elke 2 seconden voor rustiger beeld
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("1, ");
lcd.print("vloer= ");
lcd.print(vloertemp);
lcd.print((char)223); // "graden" teken
lcd.print("C ");
lcd.setCursor(0,1);
lcd.print("vl.verw. ");
if (digitalRead(SV1) == HIGH && digitalRead(SV2) == HIGH)
{
lcd.print("max.aan");
}
else if (digitalRead(SV1) == HIGH && digitalRead(SV2) == HIGH && opwarmen == 1)
{
lcd.print("opwarmen");
}
else if (digitalRead(SV1) == HIGH && digitalRead(SV2) == LOW)
{
lcd.print("2/3 aan");
}
else if (digitalRead(SV1) == LOW && digitalRead(SV2) == HIGH)
{
lcd.print("1/3 aan");
}
else
{
lcd.print("uit");
}

TimerDataLCD = millis(); // set de timer voor volgende print op het scherm
}
}

if (paginateller == 1) // pagina 1 van LCD scherm
{
if ((millis() - TimerDataLCD > printdataLCD) || buttonStateLCD == 0) // "laad" het scherm elke 2 seconden voor rustiger beeld
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("2, "); // zet de kloktijd op het LCD Scherm
if (uur<10)
{
lcd.print("0");
}
lcd.print(uur, DEC);
lcd.print(":");
if (t.min<10)
{
lcd.print("0");
}
lcd.print(t.min, DEC);

if (uurPlus == 1)
{
lcd.print("+");
}
else
{
lcd.print(" ");
}
lcd.setCursor(10,0);
lcd.print("RV=");
lcd.print(badkamervocht, 0);
lcd.print("%");
lcd.setCursor(0,1);
if (Ventilatie1 == 1 && Ventilatie2 == 0 && Ventilatie3 == 0)
{
lcd.print("FAN 1");
}
else if (Ventilatie1 == 0 && Ventilatie2 == 1 && Ventilatie3 == 0)
{
lcd.print("FAN 2");
}
else if (Ventilatie1 == 0 && Ventilatie2 == 0 && Ventilatie3 == 1)
{
lcd.print("FAN 3");
}
else if (Ventilatie0 == 1 && nachtklok1 == 1)
{
lcd.print("FAN UIT (nacht)");
}
else
{
lcd.print(" ");
}
lcd.setCursor(6,1);

if (Ventilatie2 == 1 && WCaan == 1 && klokventilatie == 0)
{
lcd.print("WC");
}
else if (klokventilatie == 1)
{
lcd.print("DOUCHE");
}
else if (badkamervocht > 82 && WCaan == 0 && klokventilatie == 0)
{
lcd.print("VOCHT");
}
else
{
lcd.print(" ");
}
TimerDataLCD = millis(); // set de timer voor volgende print op het scherm
}
}

if (paginateller == 2)
{
if ((millis() - TimerDataLCD > printdataLCD) || buttonStateLCD == 0) // "laad" het scherm elke 2 seconden voor rustiger beeld
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print("3, ");
lcd.print("badk.= ");
lcd.print(badkamertemp, 1);
lcd.print((char)223); // "graden" teken
lcd.print("C ");
lcd.setCursor(0,1);
if (dimmerwaarde1 >= 220)
{
lcd.print("licht aan");
}
else if (dimmerwaarde1 < 220 && dimmerwaarde1 > 5)
{
lcd.print("licht gedimd");
}
else if (dimmerwaarde1 <= 5)
{
lcd.print("licht uit");
}
lcd.setCursor(14,1);
if (digitalRead(GATERADIATOR) == HIGH)
{
lcd.print("*");
}
else
{
lcd.print(" ");
}
TimerDataLCD = millis(); // set de timer voor volgende print op het scherm
}
}
}
}

void serial_laden(void) // Serial monitor ***********************------------------------------------------//
{

if (millis() - timer6 > timerData)
{
Serial.print(rtc.getDOWStr());
Serial.print(" ");
Serial.print(t.date, DEC);
Serial.print("-");
Serial.print(t.mon);
Serial.print("-");
Serial.print(t.year);
Serial.print(" -de tijd is: ");
if (uur<10)
{
Serial.print("0");
}
Serial.print(uur, DEC);
Serial.print(":");
if (t.min<10)
{
Serial.print("0");
}
Serial.print(t.min, DEC);
Serial.print(":");
if (t.sec<10)
{
Serial.print("0");
}
Serial.print(t.sec, DEC);
if (uurPlus == 1)
{
Serial.println(" (zomertijd) ");
}
else
{
Serial.println(" (wintertijd) ");
}
Serial.print("Dag van de week: ");
Serial.println(t.dow);
Serial.print("Start dagklok: ");
Serial.print(minDagTijd);
Serial.print(" Eind dagklok: ");
Serial.print(maxDagTijd);
if (dagklok == 1)
{
Serial.println(" dagklok is aan, ");
}
else
{
Serial.println(" dagklok is uit, ");
}
Serial.print("Start nachtklok 1: ");
Serial.print(minNachtTijd1);
Serial.print(" Eind nachtklok 1: ");
Serial.print(maxNachtTijd1);
if (nachtklok1 == 1)
{
Serial.println(" nachtklok 1 is aan, ");
}
else
{
Serial.println(" nachtklok 1 is uit, ");
}
Serial.print("Start nachtklok 2: ");
Serial.print(minNachtTijd2);
Serial.print(" Eind nachtklok 2: ");
Serial.print(maxNachtTijd2);
if (nachtklok2 == 1)
{
Serial.println("nachtklok 2 is aan, ");
}
else
{
Serial.println("nachtklok 2 is uit, ");
}
Serial.print("Luchtvochtigheid: ");
Serial.print(badkamervocht);
Serial.println("%");
Serial.print("Temperatuur: ");
Serial.println(badkamertemp);
Serial.print("Temperatuur vloer: ");
Serial.println(vloertemp);
Serial.print("Temperatuur print: ");
Serial.println(tempPrint);
Serial.print("12V =");
Serial.println(UPrint);
Serial.print("De ventilatie draait op: ");
if (Ventilatie1 == 1)
{
Serial.print("stand 1");
}
else if (Ventilatie2 == 1)
{
Serial.print("stand 2");
}
else if (Ventilatie3 == 1)
{
Serial.print("stand 3");
}
else
{
Serial.print("uit");
}
if (Ventilatie2 == 1 && WCaan == 1)
{
Serial.print(" (WC) ");
}
else
{
Serial.print(" ");
}

Serial.print(" timer WC = ");
Serial.println(timer1 - now());

Serial.print("vermogen vloerverwarming: ");
if (digitalRead(SV1) == HIGH)
{
Serial.print(" SV1 is hoog ");
}
else
{
Serial.print(" SV1 is laag ");
}
if (digitalRead(SV2) == HIGH)
{
Serial.println(" SV2 is hoog ");
}
else
{
Serial.println(" SV2 is laag ");
}
Serial.print("Opwarmen = ");
Serial.println(opwarmen);
if (digitalRead(GATERADIATOR) == HIGH)
{
Serial.println(" radiator badkamer is aan");
}
else
{
Serial.println(" radiator badkamer is uit");
}
Serial.print("dimlicht badkamer: ");
Serial.print(" dimmer 1 = ");
Serial.print(dimmerwaarde1);
Serial.print(" dimmer 2 = ");
Serial.println(dimmerwaarde2);
Serial.println("-------------------------------------------------------------------------");

timer6 = millis(); // set de timer voor volgende print op het scherm
}

}

Advertisement

Gebruikers-avatar
Berichten: 4828
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Badkamer klimaat

Berichtdoor nicoverduin » 27 Jul 2017, 15:40

Om geheugen te sparen kun je bij serial prints F() gebruiken. Dan wordt de teksten in het flash geheugen geplaatst

Verder kan er nog wel eea aan gesleuteld worden vwb. commentaar... waarom doe je iets, betekenis van variabelen etc.
En af en toe eens de CTRL-T functie gebruiken om de code te fatsoeneren.....

Dan krijg je dit:
cpp code
// Programma tbv badkamer & WC mei 2017//
// Bijgewerkt: 24 juli 2017 //

#include <avr/wdt.h>
#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Time.h>
#include <DS3231.h>
#include <OneWire.h>

// * aanwijzing van in en uitgangen:

#define PIRWC A2 // PIR WC melding
#define BUTTONLCD 13 // drukknop LCD scherm (backlight & scrollen)
#define SV1 2 // Stuursignaal 1 Vloerverwarming
#define SV2 3 // Stuursignaal 2 Vloerverwarming
#define VenStand1 4 // relais 1 tm 3 ventilatie
#define VenStand2 5 // " "
#define VenStand3 6 // " "
#define TEMPVOCHT 7 // ingang temperatuur/vocht DHT22 sensor
#define GATERADIATOR 8 // triac aansturing radiator
#define LED_LCDBacklight 9 // backlicht aansturing LCD scherm
#define VERLICHTING1 10 // aansturing LED spots plafond
#define VERLICHTING2 11 // aansturing LED strips nisverlichting
#define PUSHVENTILATIE 12 // drukknop voor ventilatie badkamer
#define TEMPVLOER A3 // ingang temperatuurvoeler vloerverwarming DS18B20
#define DIMMERLICHT A0 // ingang tbv dimmer verlichting badkamer
#define DC_IN A1 // spanning vanaf 12 volt gelijkrichter

#define DHTTYPE DHT22 // vocht/temp is een DHT 22 (AM2302), AM2321
DHT dht(TEMPVOCHT, DHTTYPE);

int16_t tempvloer(int x, byte start) // inlezen van DS18B20 voeler
{

OneWire ds(x);
byte i;
byte data[2];
int16_t result;
do {
ds.reset(); // reset de DS18B20 chip
ds.write(0xCC); // skip ROM van sensor (1 sensor)
ds.write(0xBE); // lees "scratchpad" geheugen van de sensor
for (i = 0; i < 2; i++)
data[i] = ds.read(); //
result = (data[1] << 8) | data[0];
result >>= 4;
if (data[1] & 128)
result |= 61440;
if (data[0] & 8)
++result;
ds.reset();
ds.write(0xCC);
ds.write(0x44, 1); // stuurt temperatuur data naar de Arduino
if (start)
delay(1000);
} while (start--);
return result;
}

// * aanwijzing van globale variabelen:

int vloertemp = 0;
double badkamertemp = 0;
double badkamervocht = 0;
double tempPrint = 0;
double UPrint = 0;
int HuidigeTijd = 0;
int uur = 0;
byte uurPlus = 0;
int minNachtTijd1 = 2200;
int maxNachtTijd1 = 0400;
int minNachtTijd2 = 2000;
int maxNachtTijd2 = 0500;
int minDagTijd = 800;
int maxDagTijd = 1700;
byte nachtklok1 = 0;
byte nachtklok2 = 0;
byte dagklok = 0;
byte dimmerwaarde1 = 0;
byte dimmerwaarde2 = 0;
int8_t opwarmen = 0;
int8_t Ventilatie0 = 0;
int8_t Ventilatie1 = 0;
int8_t Ventilatie2 = 0;
int8_t Ventilatie3 = 0;
int timerWC = 0; // tijdvertraging in sec. WC ventilatie (zonder hysteresisch vertraging) afhankelijk van nachtklok
byte WCaan = 0;
unsigned long timer1 = 0;
byte klokventilatie = 0;
int buttonStateLCD = 1; // the current reading from the input pin
unsigned long lastDebounceTime = 0; // laatste keer de uitgang LCD pin was toggled
int debounceDelay = 200; // debounce voor knop LCD (200 milliseconden)
int timerLCD = 120; // tijdvertraging in sec. backlight LCD scherm
unsigned long timer5 = 0;
int paginateller = 0;
int timerData = 7000; // tijdvertraging in millisec. Laden seriele data
unsigned long timer6 = 0;

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Set the pins on LCD I2C address 0x27

DS3231 rtc(SDA, SCL); // Haal data van de DS3231 print via de SDA en SCL data lijn
Time t; // init tijd en datum

void setup() {

// * set up van in- en uitgangen---------------------------------------------------------------------------------------

pinMode(PIRWC, INPUT);
pinMode(BUTTONLCD, INPUT);
pinMode(SV1, OUTPUT);
pinMode(SV2, OUTPUT);
pinMode(VenStand1, OUTPUT);
pinMode(VenStand2, OUTPUT);
pinMode(VenStand3, OUTPUT);
pinMode(TEMPVOCHT, INPUT);
pinMode(GATERADIATOR, OUTPUT);
pinMode(LED_LCDBacklight, OUTPUT);
pinMode(VERLICHTING1, OUTPUT);
pinMode(VERLICHTING2, OUTPUT);
pinMode(PUSHVENTILATIE, INPUT);
pinMode(DIMMERLICHT, INPUT);
pinMode(DC_IN, INPUT);

tempvloer(A3, 1); // leest opstartcode in
dht.begin();
lcd.begin(20, 2); // start voor lcd for 20 chars en 2 lines
rtc.begin(); // init DS3132
// Om de tijd in te stellen: Unlock de volgende regels:
//rtc.setDOW(MONDAY); // Set Day-of-Week to SUNDAY
//rtc.setTime(9,11,00); // Set the time to 12:00:00 (24hr format + Wintertijd!!)
//rtc.setDate(20, 5, 2017); // Set the date to January 1st, 2014// start van DHT temp / vocht library

Serial.begin(9600); // start van seriele communcatie
wdt_enable (WDTO_2S); // watchdog start voor 2" na reset

}

void loop() {
lees_data();
besturing_verwarming();
besturing_ventilatie();
besturing_verlichting();
lcd_laden();
serial_laden();
wdt_reset(); // als loop blijft hangen, dan reset arduino
}

void lees_data(void) // * inlezen van sensors (tijd - vocht/temperatuur - vloertemperatuur - temp print - spanning print - dimmer)
{

t = rtc.getTime(); // haal de data van de DS3231

if (t.mon > 3 && t.mon < 11) // klok op zomertijd tussen april en oktober
{
uur = t.hour + 1;
uurPlus = 1;
} else {
uur = t.hour;
uurPlus = 0;
}

HuidigeTijd = uur * 100 + t.min; // bereken huidige tijd als gewoon getal.

if (t.dow == 6 || t.dow == 7) {
minDagTijd = 900;
minNachtTijd1 = 2300;
maxNachtTijd1 = 500;
maxNachtTijd2 = 600;
} else {
minDagTijd = 800;
minNachtTijd1 = 2300;
maxNachtTijd1 = 400;
maxNachtTijd2 = 500;
}

if (HuidigeTijd >= minDagTijd && HuidigeTijd <= maxDagTijd) {
dagklok = 1;
} else {
dagklok = 0;
}

if (HuidigeTijd >= minNachtTijd1 || HuidigeTijd <= maxNachtTijd1) {
nachtklok1 = 1;
} else {
nachtklok1 = 0;
}

if (HuidigeTijd >= minNachtTijd2 || HuidigeTijd <= maxNachtTijd2) {
nachtklok2 = 1;
} else {
nachtklok2 = 0;
}

vloertemp = tempvloer(A3, 1); // zet de waarde uit de startcode in een integer

badkamertemp = dht.readTemperature(); // zet badkamer temperatuur in globale variabele "badkamer temperatuur"
badkamervocht = dht.readHumidity(); // zet vochtigheid badkamer in globale variabele "badkamer vochtigheid"

tempPrint = rtc.getTemp(); // zet temperatuur van print in globale variabele "temperatuur print"

UPrint = analogRead(DC_IN) * 0.0046 * 3.7; // zet spanning vanaf gelijkrichter in globale variabele "spanning print"

int dim = analogRead(DIMMERLICHT); // omzetting van dimmeringang naar bruikbare waarde (0 - 255) voor LED verlichting
dimmerwaarde1 = map(dim, 0, 1023, 0, 230); // Spots plafond (230 = 12 Volt gem. uitsturing)
dimmerwaarde2 = map(dim, 0, 1023, 0, 20); // LED strip in Nis
}

void besturing_verwarming(void) // * besturing vloerverwarming + besturing radiator -------------------------------------- ----------------------------------------
{
if (dagklok == 1 || (nachtklok2 == 1 && HuidigeTijd <= minNachtTijd1)) {
vloerLaag();
} else if (dagklok == 0 && nachtklok2 == 0) {
vloerregeling();
} else {
vloeruit();
}

if (badkamertemp < 20) // sturing van klep verwarmingsradiator
{
digitalWrite(GATERADIATOR, HIGH);
} else if (badkamertemp > 22) {
digitalWrite(GATERADIATOR, LOW);
}

}

void vloeruit() {
digitalWrite(SV1, LOW); // Vloerverwarming uit
digitalWrite(SV2, LOW);
opwarmen = 1;
}

void vloerLaag() {
opwarmen = 1;
if (badkamertemp < 25 && vloertemp < 26) {
digitalWrite(SV1, LOW); // 1/3 uitsturing, U effectief = 60 Volt
digitalWrite(SV2, HIGH);
} else if (badkamertemp > 25 || vloertemp > 27) {
digitalWrite(SV1, LOW); // Vloerverwarming uit
digitalWrite(SV2, LOW);
}
}

void vloerregeling() {
if (badkamertemp < 25) {
if (vloertemp < 25 || opwarmen == 1) {
digitalWrite(SV1, HIGH); // 3/3 uitsturing, U effectief = 230 Volt
digitalWrite(SV2, HIGH);
} else if (vloertemp > 25 && vloertemp < 27 && opwarmen == 0) {
digitalWrite(SV1, HIGH); // 2/3 uitsturing, U effectief = 150 Volt
digitalWrite(SV2, LOW);
} else if (vloertemp > 27 && vloertemp < 28 && opwarmen == 0) {
digitalWrite(SV1, LOW); // 1/3 uitsturing, U effectief = 60 Volt
digitalWrite(SV2, HIGH);
} else if (vloertemp > 28) {
opwarmen = 0;
digitalWrite(SV1, LOW); // Vloerverwarming uit
digitalWrite(SV2, LOW);
}
} else {
digitalWrite(SV1, LOW); // Vloerverwarming uit
digitalWrite(SV2, LOW);
}
}
void besturing_ventilatie(void) //* besturing ventilatie badkamer & WC ------------------------------------------------------------------------------------------
{

if (nachtklok2 == 1) {
timerWC = 120;
} else {
timerWC = 300;
}

if (digitalRead(PIRWC) == HIGH) // Bij detectie PIR in WC gaat kloktijd ventilatie WC aan.
{
timer1 = now() + timerWC;
WCaan = 1;
} else if (now() >= timer1 || timer1 == 0) {
timer1 = 0;
WCaan = 0;
}

if (nachtklok1 == 1 && badkamervocht < 80 && klokventilatie == 0) {
VentUit();
} else if (nachtklok1 == 0 && klokventilatie == 0 && WCaan == 0) {
Vent1();
} else if (klokventilatie == 0
&& (WCaan == 1 || (badkamervocht > 82 && badkamervocht < 90))) {
Vent2();
} else if (klokventilatie == 0 && badkamervocht > 92) {
Vent3();
} else if (klokventilatie == 1) {
Klokventilatie();
}

if (digitalRead(PUSHVENTILATIE) == HIGH) {
klokventilatie = 1; // Bij bediening drukknop ventilatie gaat kloktijd ventilatie Badkamer aan.
}
}

void VentUit() {
digitalWrite(VenStand1, HIGH);
digitalWrite(VenStand2, LOW);
digitalWrite(VenStand3, LOW);
Ventilatie0 = 1;
}

void Vent1() {
digitalWrite(VenStand1, LOW);
digitalWrite(VenStand2, LOW);
digitalWrite(VenStand3, LOW);
Ventilatie1 = 1;
}

void Vent2() {
digitalWrite(VenStand1, LOW);
if (nachtklok1 == 0 || klokventilatie == 1) {
digitalWrite(VenStand2, HIGH);
} else {
digitalWrite(VenStand2, LOW);
}
digitalWrite(VenStand3, LOW);
Ventilatie2 = 1;
}

void Vent3() {
digitalWrite(VenStand1, LOW);
digitalWrite(VenStand2, HIGH);
if (nachtklok1 == 0 && HuidigeTijd < 2130) {
digitalWrite(VenStand3, HIGH);
} else
digitalWrite(VenStand3, LOW);
Ventilatie3 = 1;
}

void Klokventilatie() {

unsigned long TimerVentilatie = 0;
byte BKaan1 = 0;
byte BKaan2 = 0;
byte BKaan3 = 0;

if (digitalRead(PUSHVENTILATIE) == HIGH && klokventilatie == 1
&& BKaan1 == 0 && BKaan2 == 0 && BKaan3 == 0) {
BKaan1 = 1;
} else if (BKaan1 == 1) {
TimerVentilatie = now() + 300;
Vent2();
} else if ((now() > TimerVentilatie) && BKaan1 == 1) {
BKaan1 = 0;
BKaan2 = 1;
TimerVentilatie = now() + 300;
Vent3();
} else if ((now() > TimerVentilatie) && BKaan2 == 1) {
BKaan2 = 0;
BKaan3 = 1;
TimerVentilatie = now() + 480;
Vent2();
} else if ((now() > TimerVentilatie) && BKaan3 == 1) {
BKaan3 = 0;
TimerVentilatie = 0;
klokventilatie = 0;
}
}
void besturing_verlichting(void) // * besturing verlichting badkamer -----------------------------------------------------------------------------------------------------
{

analogWrite(VERLICHTING1, dimmerwaarde1);

analogWrite(VERLICHTING2, dimmerwaarde2);

}

void lcd_laden(void) // * besturing LCD scherm ---------------------------------------------------------------------------------------------------------------
{

int reading = digitalRead(BUTTONLCD);

if (reading != 1 && lastDebounceTime == 0) // reset the debouncing timer
{
lastDebounceTime = millis();
buttonStateLCD = 0;
paginateller++;
}

if (paginateller > 2) {
paginateller = 0;
}

if ((millis() - lastDebounceTime) > debounceDelay) {
if (reading != buttonStateLCD) {
buttonStateLCD = reading;
lastDebounceTime = 0;
}
}

if (buttonStateLCD == 0) // backlight aan bij drukken, timer aan en paginateller +1
{
digitalWrite(LED_LCDBacklight, HIGH);
timer5 = now() + timerLCD;
}

if (digitalRead(LED_LCDBacklight) == HIGH) {
LCDbesturing();
}

else if (now() >= timer5) {
timer5 = 0;
digitalWrite(LED_LCDBacklight, LOW);
}
}
void LCDbesturing() {

int printdataLCD = 2000;
unsigned long TimerDataLCD = 0;

if (digitalRead(LED_LCDBacklight) == HIGH) {
if (paginateller == 0) // pagina 1 van LCD scherm
{
if ((millis() - TimerDataLCD > printdataLCD) || buttonStateLCD == 0) // "laad" het scherm elke 2 seconden voor rustiger beeld
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("1, ");
lcd.print("vloer= ");
lcd.print(vloertemp);
lcd.print((char) 223); // "graden" teken
lcd.print("C ");
lcd.setCursor(0, 1);
lcd.print("vl.verw. ");
if (digitalRead(SV1) == HIGH && digitalRead(SV2) == HIGH) {
lcd.print("max.aan");
} else if (digitalRead(SV1) == HIGH && digitalRead(SV2) == HIGH
&& opwarmen == 1) {
lcd.print("opwarmen");
} else if (digitalRead(SV1) == HIGH
&& digitalRead(SV2) == LOW) {
lcd.print("2/3 aan");
} else if (digitalRead(SV1) == LOW
&& digitalRead(SV2) == HIGH) {
lcd.print("1/3 aan");
} else {
lcd.print("uit");
}

TimerDataLCD = millis(); // set de timer voor volgende print op het scherm
}
}

if (paginateller == 1) // pagina 1 van LCD scherm
{
if ((millis() - TimerDataLCD > printdataLCD) || buttonStateLCD == 0) // "laad" het scherm elke 2 seconden voor rustiger beeld
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("2, "); // zet de kloktijd op het LCD Scherm
if (uur < 10) {
lcd.print("0");
}
lcd.print(uur, DEC);
lcd.print(":");
if (t.min < 10) {
lcd.print("0");
}
lcd.print(t.min, DEC);

if (uurPlus == 1) {
lcd.print("+");
} else {
lcd.print(" ");
}
lcd.setCursor(10, 0);
lcd.print("RV=");
lcd.print(badkamervocht, 0);
lcd.print("%");
lcd.setCursor(0, 1);
if (Ventilatie1 == 1 && Ventilatie2 == 0 && Ventilatie3 == 0) {
lcd.print("FAN 1");
} else if (Ventilatie1 == 0 && Ventilatie2 == 1
&& Ventilatie3 == 0) {
lcd.print("FAN 2");
} else if (Ventilatie1 == 0 && Ventilatie2 == 0
&& Ventilatie3 == 1) {
lcd.print("FAN 3");
} else if (Ventilatie0 == 1 && nachtklok1 == 1) {
lcd.print("FAN UIT (nacht)");
} else {
lcd.print(" ");
}
lcd.setCursor(6, 1);

if (Ventilatie2 == 1 && WCaan == 1 && klokventilatie == 0) {
lcd.print("WC");
} else if (klokventilatie == 1) {
lcd.print("DOUCHE");
} else if (badkamervocht > 82 && WCaan == 0
&& klokventilatie == 0) {
lcd.print("VOCHT");
} else {
lcd.print(" ");
}
TimerDataLCD = millis(); // set de timer voor volgende print op het scherm
}
}

if (paginateller == 2) {
if ((millis() - TimerDataLCD > printdataLCD) || buttonStateLCD == 0) // "laad" het scherm elke 2 seconden voor rustiger beeld
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("3, ");
lcd.print("badk.= ");
lcd.print(badkamertemp, 1);
lcd.print((char) 223); // "graden" teken
lcd.print("C ");
lcd.setCursor(0, 1);
if (dimmerwaarde1 >= 220) {
lcd.print("licht aan");
} else if (dimmerwaarde1 < 220 && dimmerwaarde1 > 5) {
lcd.print("licht gedimd");
} else if (dimmerwaarde1 <= 5) {
lcd.print("licht uit");
}
lcd.setCursor(14, 1);
if (digitalRead(GATERADIATOR) == HIGH) {
lcd.print("*");
} else {
lcd.print(" ");
}
TimerDataLCD = millis(); // set de timer voor volgende print op het scherm
}
}
}
}

void serial_laden(void) // Serial monitor ***********************------------------------------------------//
{

if (millis() - timer6 > timerData) {
Serial.print(rtc.getDOWStr());
Serial.print(" ");
Serial.print(t.date, DEC);
Serial.print("-");
Serial.print(t.mon);
Serial.print("-");
Serial.print(t.year);
Serial.print(" -de tijd is: ");
if (uur < 10) {
Serial.print("0");
}
Serial.print(uur, DEC);
Serial.print(":");
if (t.min < 10) {
Serial.print("0");
}
Serial.print(t.min, DEC);
Serial.print(":");
if (t.sec < 10) {
Serial.print("0");
}
Serial.print(t.sec, DEC);
if (uurPlus == 1) {
Serial.println(" (zomertijd) ");
} else {
Serial.println(" (wintertijd) ");
}
Serial.print("Dag van de week: ");
Serial.println(t.dow);
Serial.print("Start dagklok: ");
Serial.print(minDagTijd);
Serial.print(" Eind dagklok: ");
Serial.print(maxDagTijd);
if (dagklok == 1) {
Serial.println(" dagklok is aan, ");
} else {
Serial.println(" dagklok is uit, ");
}
Serial.print("Start nachtklok 1: ");
Serial.print(minNachtTijd1);
Serial.print(" Eind nachtklok 1: ");
Serial.print(maxNachtTijd1);
if (nachtklok1 == 1) {
Serial.println(" nachtklok 1 is aan, ");
} else {
Serial.println(" nachtklok 1 is uit, ");
}
Serial.print("Start nachtklok 2: ");
Serial.print(minNachtTijd2);
Serial.print(" Eind nachtklok 2: ");
Serial.print(maxNachtTijd2);
if (nachtklok2 == 1) {
Serial.println("nachtklok 2 is aan, ");
} else {
Serial.println("nachtklok 2 is uit, ");
}
Serial.print("Luchtvochtigheid: ");
Serial.print(badkamervocht);
Serial.println("%");
Serial.print("Temperatuur: ");
Serial.println(badkamertemp);
Serial.print("Temperatuur vloer: ");
Serial.println(vloertemp);
Serial.print("Temperatuur print: ");
Serial.println(tempPrint);
Serial.print("12V =");
Serial.println(UPrint);
Serial.print("De ventilatie draait op: ");
if (Ventilatie1 == 1) {
Serial.print("stand 1");
} else if (Ventilatie2 == 1) {
Serial.print("stand 2");
} else if (Ventilatie3 == 1) {
Serial.print("stand 3");
} else {
Serial.print("uit");
}
if (Ventilatie2 == 1 && WCaan == 1) {
Serial.print(" (WC) ");
} else {
Serial.print(" ");
}

Serial.print(" timer WC = ");
Serial.println(timer1 - now());

Serial.print("vermogen vloerverwarming: ");
if (digitalRead(SV1) == HIGH) {
Serial.print(" SV1 is hoog ");
} else {
Serial.print(" SV1 is laag ");
}
if (digitalRead(SV2) == HIGH) {
Serial.println(" SV2 is hoog ");
} else {
Serial.println(" SV2 is laag ");
}
Serial.print("Opwarmen = ");
Serial.println(opwarmen);
if (digitalRead(GATERADIATOR) == HIGH) {
Serial.println(" radiator badkamer is aan");
} else {
Serial.println(" radiator badkamer is uit");
}
Serial.print("dimlicht badkamer: ");
Serial.print(" dimmer 1 = ");
Serial.print(dimmerwaarde1);
Serial.print(" dimmer 2 = ");
Serial.println(dimmerwaarde2);
Serial.println(
"-------------------------------------------------------------------------");

timer6 = millis(); // set de timer voor volgende print op het scherm
}

}
Docent HBO Software Engineering, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Gebruikers-avatar
Berichten: 4828
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Badkamer klimaat

Berichtdoor nicoverduin » 27 Jul 2017, 16:26

De logica en gebrek aan beschrijving helpen niet echt om zomaar ff de code te ontcijferen zonder er erg veel energie in te steken....
Docent HBO Software Engineering, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Gebruikers-avatar
Berichten: 1738
Geregistreerd: 06 Aug 2016, 01:03

Re: Badkamer klimaat

Berichtdoor Koepel » 28 Jul 2017, 15:15

Wanneer je verteld welke libraries je gebruikt en waar je ze vandaan hebt, dan kan ik proberen het te compileren.
Welk Arduino board gebruik je en hoeveel dynamisch geheugen (sram) gebruik je volgens de compiler ? Ik schat dat je 200 à 300 byte vrij moet hebben. Je gebruikt geen String object, en je declareert geen grote arrays op de stack, maar ik weet niet wat de libraries allemaal doen.

Berichten: 11
Geregistreerd: 30 Jul 2015, 16:33

Re: Badkamer klimaat

Berichtdoor Sanderoni » 28 Jul 2017, 18:14

Beste Nico, bedankt voor je waardevolle tips. Een groot gedeelte van het geheugen werd inderdaad opgeslokt door de serial.print commando's. Na de (F( toevoeging heb ik in ieder geval weer voldoende geheugen :-)

Ik ga nog even aan de slag met het commentaar, dat vergt wat meer werk.

Maar is de uitvoering van de functie blokken goed op deze manier? :

Void loop()
{
besturing_ventilatie(); // functieblok besturing ventilatie wordt uitgevoerd in de loop
}

void besturing_ventilatie(void) // plaats van het functieblok met commando's

En dan weer hierbuiten functie blokken waarvan verwezen wordt in het besturing ventilatie blok

Gebruikers-avatar
Berichten: 4828
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Badkamer klimaat

Berichtdoor nicoverduin » 28 Jul 2017, 19:19

Op zich is er niets mis mee met een top-down decompositie. Efficienter maken komt later wel.
Docent HBO Software Engineering, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 2381
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Badkamer klimaat

Berichtdoor shooter » 29 Jul 2017, 10:35

klokventilatie is ook een variabele dus dat gaat niet goed.
verder al die serialprints achter elkaar, heeft tijd nodig, en dus is een delay hier wel beter.
maak een schema waar de aanroepen netjes instaan, en doe een monitor inbouwen (dus in je functies een tekst maken en die in een monitor laten printen, nu heb je alle routines en daarna een monitor, maar je kunt niet zien wat er gebeurt (ofwel welke functies aangeroepen worden etc.
zodat je weet wanneer welke aanroep gedaan wordt.
verkort je teksten: radiator badkamer is en dan het resultaat erachter dus " aan of " uit dat bespaart al 18 bytes , als voorbeeld.
zelfde voor lcd natuurlijk.
paul deelen
shooter@home.nl

Gebruikers-avatar
Berichten: 4828
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Badkamer klimaat

Berichtdoor nicoverduin » 29 Jul 2017, 12:09

De een begint met een hoofdletter de ander niet. Dus klokventilatie gaat wel goed.
Docent HBO Software Engineering, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Terug naar C code

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 1 gast