Hallo Forum,
ich bin hier neu angemeldet aber schon länger am "heimlich" mitlesen.
Seit ein paar Wochen beschäftige ich mich mit dem Arduino.
Meine Kenntnisse rund um das Thema Programmieren gehen gegen null. Aber das soll sich ändern.
Jetzt zu meinem Vorhaben:
Ich möchte im ersten Schritt die Temperaturen von 5 DS18B20 Sensoren auslesen und mit der Uhrzeit auf eine SD-Karte logen.
Neben dem Arduino UNO R3 und den 5 DS18B20 Sensoren verwende ich von Grove das Base Shield V2, das SD-Karten Shield V4 und die Echtzeituhr RTC.
Bisher habe ich erfolgreich den Sensoren Feste Adressen gegeben, die Uhr eingebaut, und die Temperaturen mit der Uhrzeit auf dem Seriellen Monitor ausgegeben. Auch die SD-Karte hat er erkannt.
Ich bekomm aber die Werte nicht auf die SD-Karte.
Den Sketch hab ich aus verschiedenen Teilen aus dem WWW zusammengestellt und angepasst.
Könnt ihr mir helfen das der Uno die Daten auf die SD-Karte schreibt?
Gruß Sascha
// https://www.reichelt.de/magazin/how-to/temperatur-log-arduino-uno-fortsetzung/
#include <OneWire.h>
#include <DallasTemperature.h>
#include <SPI.h>
#include <SD.h>
#include <Wire.h>
#include <DS1307.h>
#define ONE_WIRE_BUS 2
DS1307 clock;
unsigned long WRITE_INTERVAL = 60000; // 1 Minuten
unsigned long lastWrite = WRITE_INTERVAL;
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire); //Übergabe der OnewWire Referenz zum kommunizieren mit dem Sensor.
int sensorCount;
DeviceAddress Puffer_1 = { 0x28, 0xCE, 0x74, 0x54, 0x0B, 0x00, 0x00, 0xF7 };
DeviceAddress Puffer_2 = { 0x28, 0xE1, 0x39, 0x55, 0x0B, 0x00, 0x00, 0xEF };
DeviceAddress Puffer_3 = { 0x28, 0x36, 0xE5, 0x55, 0x0B, 0x00, 0x00, 0xD1 };
DeviceAddress Puffer_4 = { 0x28, 0xE2, 0x21, 0x55, 0x0B, 0x00, 0x00, 0xF4 };
DeviceAddress Puffer_5 = { 0x28, 0x89, 0xA7, 0x54, 0x0B, 0x00, 0x00, 0x17 };
void setup()
{
Serial.begin(9600);
clock.begin(); // Die Verbindung zur Uhr aufbauen
// clock.fillByYMD(2019,11, 05); // Die Zeit einstellen
// clock.fillByHMS(20, 19, 30);
// clock.fillDayOfWeek(TUE);
// clock.setTime();
sensors.begin();
sensors.setResolution(Puffer_1, 9); //9 - 12 steht für Auflösung
sensors.setResolution(Puffer_2, 9); // 9 = 0,5
sensors.setResolution(Puffer_3, 9); // 10 = 0,25
sensors.setResolution(Puffer_4, 9); // 11 = 0,125
sensors.setResolution(Puffer_5, 9); // 12 = 0,05
int selectedChip = 4; // SD Karte initialisieren
if (!SD.begin(selectedChip)) {
Serial.println("SD-Karte fehlt");
} else {
Serial.println("SD-Card initialisiert.");
}
Serial.print("Die Temperaturen des Pufferspeichers sind: \n\r");
}
void printTime(){
clock.getTime(); // Zeit vom Chip abfragen
Serial.print(clock.hour, DEC);
Serial.print(":");
Serial.print(clock.minute, DEC);
Serial.print(":");
Serial.print(clock.second, DEC);
Serial.print(" | ");
Serial.print(clock.dayOfMonth, DEC);
Serial.print(".");
Serial.print(clock.month, DEC);
Serial.print(".");
Serial.print(clock.year, DEC);
Serial.println();
}
void printTemperature(DeviceAddress deviceAddress)
{
float tempC = sensors.getTempC(deviceAddress);
if (tempC == -127.00) {
Serial.print("Fehler mit Sensor");
} else {
Serial.print(tempC);
Serial.print(" °C || ");
printTime();
}
}
void writeToSD(String line) {
File dataFile = SD.open("datalog.csv", FILE_WRITE);
if (dataFile) {
dataFile.println(line); // Auf die SD-Karte schreiben
dataFile.close();
Serial.println(line); // Zusätzlich auf serielle Schnittstelle schreiben zum Debuggen
}
else {
Serial.println("Fehler beim Öffnen der Datei");
}
}
void loop()
{
sensors.requestTemperatures();
Serial.print("Temperatur Puffer 1 ist: ");
printTemperature(Puffer_1);
Serial.print("\n\r");
Serial.print("Temperatur Puffer 2 ist: ");
printTemperature(Puffer_2);
Serial.print("\n\r");
Serial.print("Temperatur Puffer 3 ist: ");
printTemperature(Puffer_3);
Serial.print("\n\r");
Serial.print("Temperatur Puffer 4 ist: ");
printTemperature(Puffer_4);
Serial.print("\n\r");
Serial.print("Temperatur Puffer 5 ist: ");
printTemperature(Puffer_5);
Serial.print("\n\r\n\r");
delay(5000);
}