-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathBME280.ino
99 lines (89 loc) · 3.44 KB
/
BME280.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
// Konfiguration Temperatursensor
Adafruit_BME280 bme; // Verbindung ueber I2C
float calckompensation = 0; // Aufheizkompensation. Parameter kommen über Display
void initBME280() {
#ifdef DEBUG_BME280
Serial.println(F("Temperatursensor BME280 intialisiert"));
#endif
if (!bme.begin(0x77, &Wire)) {
#ifdef DEBUG_BME280
Serial.println(F("Kann keinen BME280 sensor finden!"));
#endif
//while (1); **Absturz wegen SW-Watchdog**
}
#ifdef DEBUG_BME280
Serial.println("-- Wetter Station --");
Serial.println("forced mode, 1x Temperatur / 1x Feuchtigkeit / Druck aus / Filter aus");
#endif
bme.setSampling(Adafruit_BME280::MODE_FORCED,
Adafruit_BME280::SAMPLING_X1, // Temperatur
Adafruit_BME280::SAMPLING_NONE, // Druck
Adafruit_BME280::SAMPLING_X1, // Feuchtigkeit
Adafruit_BME280::FILTER_OFF ); // Filter
}
void readBME280() {
#ifdef DEBUG_BME280
Serial.println(F("Temperatursensor BME280 auslesen"));
#endif
//Berechnung der Kompensation abzüglich der Starterwärmung
//Abholen des Offsets vom Display zur Kompensation
char cTemperatur [20];
memset(cTemperatur, 0, sizeof(cTemperatur));
NexTemperatur.getText(cTemperatur, sizeof(cTemperatur));
float kompensation = atof (cTemperatur);
//Abholen der Aufheizzeit vom Display zur Kompensation
char cZeit [20];
memset(cZeit, 0, sizeof(cZeit));
NexZeit.getText(cZeit, sizeof(cZeit));
long timekompensation = atof (cZeit) * 60 * 1000;
if (timekompensation <= 0) {
calckompensation = kompensation;
}
else {
//Berechnung der Aufheizkompensation BME280
if (calckompensation < kompensation) {
calckompensation = calckompensation + (kompensation / (timekompensation / ms30000));
#ifdef DEBUG_BME280
Serial.print(F("Offset in Crad von Display = "));
Serial.print(kompensation);
Serial.print(F(" / Zeit für Kompensation = "));
Serial.println(timekompensation);
Serial.print(F("kalkulierte Temperaturkompensation um= "));
Serial.println(calckompensation);
#endif
}
}
bme.takeForcedMeasurement();
#ifdef DEBUG_BME280
Serial.print("Temperatur = ");
Serial.print(bme.readTemperature());
Serial.print(" C / ");
Serial.print("Temperatur kompensiert = ");
Serial.print(bme.readTemperature() - calckompensation);
Serial.println(" C");
//Serial.print("Druck = ");
//Serial.print(bme.readPressure() / 100.0F);
//Serial.println(" hPa");
Serial.print("Feuchtigkeit = ");
Serial.print(bme.readHumidity());
Serial.println(" %");
#endif
// Umwandlung Float in Char zur Anzeige von Fließpunktkomma auf Nextion
char cTemp[4];
char cFeuchtigkeit[4];
//char cDruck[4];
dtostrf(bme.readHumidity(), 1, 1, cFeuchtigkeit); // 1 Stelle hinter dem Komma
dtostrf((bme.readTemperature() - calckompensation), 1, 1, cTemp); // 1 Stelle hinter dem Komma (inklusive Kompensation)
//dtostrf(bme.readPressure() / 100.0F,0,0,cDruck); // keine Stelle hinter dem Komma
//BME280
NexText Temp = NexText(N_Seite, 30, "Startseite.Temp");
NexText Humity = NexText(N_Seite, 31, "Startseite.Humity");
//NexText Druck = NexText(N_Seite, 3, "Startseite.Druck");
// Ausgabe auf Nextion Display
Humity.setText(cFeuchtigkeit);
Temp.setText(cTemp);
//Druck.setText(cDruck);
#ifdef DEBUG_BME280
Serial.println("BME280 beendet");
#endif
}