Files
templog/templog.ino
T
2026-09-13 20:07:41 +02:00

85 lines
1.7 KiB
Arduino

#include <OneWire.h>
#include <DallasTemperature.h>
#include <U8g2lib.h>
#include <SD.h>
#define ONE_WIRE_BUS D4
#define PIN_CS D8
#define STATUS_OK 0
#define STATUS_SD_INIT_FAILED 1
#define STATUS_SD_WRITE_FAILED 2
#define ODD 1
#define EVEN 2
OneWire oneWire( ONE_WIRE_BUS );
DallasTemperature DS18B20( &oneWire );
U8G2_SSD1306_128X64_NONAME_F_HW_I2C display(U8G2_R0);
int status = STATUS_OK;
int oddEvenLoop = ODD;
void setup() {
Serial.begin(115200);
DS18B20.begin();
display.begin();
if (!SD.begin(PIN_CS)) {
status = STATUS_SD_INIT_FAILED;
}
}
void loop() {
char tempStr[6];
long uptimeSec = millis() / 1000;
DS18B20.requestTemperatures();
float tempFl = DS18B20.getTempCByIndex(0);
dtostrf(tempFl, 4, 1, tempStr);
Serial.print(uptimeSec);
Serial.print(": ");
Serial.println(tempStr);
display.clearBuffer();
display.setFont(u8g2_font_fub11_tf);
switch(status) {
case STATUS_SD_INIT_FAILED:
display.drawStr(0, 11, "SD init failed");
break;
case STATUS_SD_WRITE_FAILED:
display.drawStr(0, 11, "SD write failed");
break;
case STATUS_OK:
default:
if (oddEvenLoop == ODD) {
display.drawStr(0, 11, "Temperatur *");
oddEvenLoop = EVEN;
} else {
display.drawStr(0, 11, "Temperatur #");
oddEvenLoop = ODD;
}
}
display.setFont(u8g2_font_fub42_tn);
display.drawStr(8, 63, tempStr);
display.sendBuffer();
if (status != STATUS_SD_INIT_FAILED) {
File fd = SD.open("temp.csv", FILE_WRITE);
if (fd) {
fd.print(uptimeSec);
fd.print(";");
fd.println(tempStr);
fd.close();
status = STATUS_OK;
} else {
status = STATUS_SD_WRITE_FAILED;
}
}
delay(5000);
}