ds18d20 mills

algemene C code
Berichten: 27
Geregistreerd: 06 Sep 2017, 23:51

ds18d20 mills

Berichtdoor robmulder » 14 Sep 2019, 23:53

// Importeer de vereiste bibliotheken
# include < OneWire.h >
# include < DallasTemperature.h >

float temp = 0,0 ; // variabele om temperatuur in op te slaan (float is getal met komma)
int oneWireBus = 12 ; // 1-draads pin
OneWire oneWire (oneWireBus); // 1-draads instantie op de OneWireBus pin
DallasTemperature sensoren (en oneWire); // geef de instantie van de oneWire bus door aan de DallasTemperature


const int Light = 13;
int schemer = 0;
const unsigned long Vertraging = 5000; // tijdvertraging in milliseconden (testen)
unsigned long timer1 = 0;
unsigned long timer2 = 0;

void setup() {
//Wire.begin();
Serial.begin(9600);
pinMode(Light, OUTPUT);

}

void loop() {


temp = sensors.getTempCByIndex(oneWireBus); // read the value from the sensor
Serial.println(sensorValue); //prints the values coming from the sensor on the screen

Serial.print("schemer=");
Serial.println(schemer);
Serial.print("timer1=");
Serial.println(timer1);

if (temp < 40 && schemer == 0) { // Bij schemer zakt waarde onder de 700, zo niet timer1 nog uit.
if (timer1 != 0) { // Kijkt of timer1 waarde > 0 heeft, zo niet timer "aan"
if ((millis() - timer1) > Vertraging) { // Zo ja, timer loopt en na 120 seconden (test = 5) wordt schemer "1"
schemer = 1; // het is schemer
timer1 = 0; // timer werk is klaar
}
} else {
timer1 = millis(); // timer aanzetten (timer1 wordt huidige tijd)
}
}

if (temp > 45 && schemer == 1) { // Bij dageraad stijgt waarde boven de 750, zo niet timer2 nog uit.
if (timer2 != 0) { // Kijkt of timer2 waarde > 0 heeft, zo niet timer "aan"
if ((millis() - timer2) > Vertraging) { // Zo ja, timer loopt en na 120 seconden (test = 5) wordt schemer "0"
schemer = 0; // schemer is voorbij
timer2 = 0; // en de timer is ook klaar
}
} else {
timer2 = millis(); // timer aanzetten (timer2 wordt huidige tijd)
}
}

if (schemer == 1) {
digitalWrite(Light,HIGH );
}

else {
digitalWrite(Light, LOW);
}

}

Advertisement

Berichten: 27
Geregistreerd: 06 Sep 2017, 23:51

Re: ds18d20 mills

Berichtdoor robmulder » 14 Sep 2019, 23:57

vergat nog de vraag .
het is de bedoeling , dat een d18d20 de aanvoer temperatuur meet van mijn cv , en als deze boven of onder een warde komt de vloer verwarming in of uitschakelt .
om de pomp niet telken te laten uit en aan gaan tijdens het schakel moment wil ik een vertraging inbouwen (hysteresis)
ik zit te klooien met de gebruikende variabelen .
kan iemand mij op weg helpen

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

Re: ds18d20 mills

Berichtdoor Koepel » 15 Sep 2019, 04:30

Er vallen een paar dingen op:

1)
Zorg dat de tekst van de code netjes is. Kijk naar het inspringen, de '{' en '}' en nieuwe regels. Druk in de Arduino IDE eens op Ctrl+T.

2)
Wanneer je een sketch op dit forum zet, zou je dan je sketch tussen code-tags willen zetten ? Met de knop "Code" krijg je die code-tags.

3)
Je variabele 'Light' is een pin nummer. Je kunt dat duidelijk maken door die variabele 'lightPin' of zo iets te noemen.

4)
Je variabele 'schemer' is 0 of 1. In de C++ taal is daar een variabele voor: bool. Die is 'true' of 'false'. Als later alles werkt, dan kun je eens een 'bool' variabele proberen.

5)
Ik blijf graag dicht bij de algemene voorbeelden. Je gebruikt de namen 'timer1' en 'timer2', maar het BlinkWithoutDelay voorbeeld heeft 'previousMillis' (https://www.arduino.cc/en/tutorial/BlinkWithoutDelay).

6)
Ook voor de DallasTemperature library is het beter om dicht bij de voorbeelden te blijven. Dit is een voorbeeld: https://github.com/milesburton/Arduino-Temperature-Control-Library/blob/master/examples/Simple/Simple.pde. Zie je het verschil met wat jij doet ?
Waarom staat hier "en" : DallasTemperature sensoren (en oneWire) ?
Waarom gebruik je het object "sensoren" niet ?
Waar is jouw "requestTemperatures" ?
Waarom kies je "oneWireBus" voor de parameter bij "getTempCByIndex" ?
Waar komt de variabele "sensorValue" vandaan ?
Waarom laat je de temperatuur van de DS18B20 sensor niet in de seriele monitor zien ?

7)
Is het goed dat ik het gebruik van millis() een "software timer" noem ?
Je gebruikt 'timer1' en 'timer2' zowel voor de millis() waarde, maar ook om die software timer uit te zetten door het een waarde nul te geven. Dat zie ik vaker in voorbeelden, maar dat doe ik nooit. Dat zijn twee verschillende dingen die niet samen gaan in één en dezelfde variabele.

8)
Je variabele 'schemer' vind ik verwarrend. Is dat een variabele die bijhoudt of de pomp aan of uit is ? Een 'pump_state' ?

9)
Hysteresis is het verschil aanbrengen tussen de temperatuur van aan- en uitzetten. Dat heb je al in je sketch.
Een tijdvertraging toevoegen kan op meerdere manieren.
Je kunt iedere 5 minuten kijken hoe de temperatuur is (eenvoudig).
Je kunt na het aan- of uitzetten even een tijdje niets doen (moeilijker).

Tip: Begin eerst eens om de temperatuur in de seriële monitor te laten zien. Zorg dat de tekst van de sketch er netjes uitziet, en kijk wat "code-tags" zijn.

Terug naar C code

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 8 gasten