Erstmal vielen Dank für die Unterstützung hier.
Ich glaube ich bin gut vorangekommen, zumindest habe ich viel gelernt. Leider reicht es noch nicht ganz, aber ich hoffe der Rest lässt sich auch noch klären.
Du zeigst nicht den gesamten Code!
Das habe ich mich nich getraut, das war noch übelstes Durcheinander.
Möchte ich aber jetzt nachholen und euch um eine Art Review bitten. Die Antworten aber bitte für Anfänger verständlich.
Den Artikel zur Initialisierungsliste habe ich noch nicht verstanden; der Beispielcode hat mir da eher weitergeholfen.
#define macht nicht was du denkst.
Nach meinem Stand ersetzt der Präprozessor in diesem Beispiel beim Compilieren überall TEMPERATURE_PRECISION durch 10.
Stimmt da etwas nicht daran?
Habe das aber flexibler gestaltet.
Test(const byte pin) : oneWire(pin), sensor(&oneWire)
Auf soeine Idee wäre ich nie gekommen; ich hätte gar nicht vermutet das das geht.
Hier mein aktueller Zwischenstand:
flTSensorBaum.h
/*
Auswerten der DS1820 Sensoren und berichten
Vorausssetzung Sensoren Adresse in folgender Form:
DeviceAddress TA[2] = {
{ 0x28, 0x5F, 0x6A, 0xD7, 0x04, 0x00, 0x00, 0x16 }, // Heizung Rücklauf Heizkreis
{ 0x28, 0xC8, 0x68, 0xD2, 0x03, 0x00, 0x00, 0x6C }, // Heizung Rücklauf gesamt
};
*/
#ifndef __flTSensorBaum__
#define __flTSensorBaum__
#include <Arduino.h>
#include <OneWire.h>
#include <DallasTemperature.h>
class flTSensorBaum {
private:
byte _ONE_WIRE_BUS;
int _GeraeteID;
DeviceAddress _TA[];
byte AnzSen;
byte _Temperature_Precision = 11; // 9 - 12 bit
const unsigned int _TempConvertZeit = 800; // Millisekunden Zeit für die Konvertierung; DS1820 Sensoren benötigen; normalerweise 750 Millisekunden
unsigned long _warteInterval = 60000 - _TempConvertZeit; // Messintervall 60000 -> 1 mal pro Min
unsigned long _timestamp;
byte _messStatus = 0;
unsigned int _AnzTempSensoren; // int da in array verwendet
float* TempA = 0;
float* lTempA = 0;
float _TempDiff; // Zwischenergebnis
float _MinTempDiff = 0.25; // Mindesttemperaturdifferenz, damit eine Übertragung stattfindet
OneWire oneWireA;
DallasTemperature sensorsA;
public:
flTSensorBaum (byte ONE_WIRE_BUS, int GeraeteID, DeviceAddress TA[], byte AnzSen);
void TempMelden(); // Auswerten der DS1820 Sensoren und berichten
// Setter
void setTemperature_Precision(byte Temperature_Precision); // Sucht die vorhandenen Sensoren, gibt deren Adressen aus und setzt Messgenauigkeit neu
void setTempIntervall(unsigned long TempIntervall) ;
void setMinTempDiff(float MinTempDiff) ;
void JetztLesen(); // zusätzliches Lesen der Temperatursensoren
void printAddress(DeviceAddress deviceAddress); // Funktion zur Ausgabe der SensorAddresse
};
#endif