#include //SD Card Bibliothek //#include //Bibliothek zum zugriff auf die SPI Schnittstelle des Arduinos #include #include #include #include #include const int oneWireBus = 2; //Anschluss 2=Bus für Sensoren am Arduino const int chipSelect = 10; OneWire oneWire(oneWireBus); DallasTemperature sensors(&oneWire); float tempSensor1, tempSensor2, tempSensor3; uint8_t sensor1[8] = { 0x28, 0xAA, 0x72, 0x77, 0x40, 0x14, 0x01, 0xF5 };//DS18B20: 28 AA 72 77 40 14 01 F5 uint8_t sensor2[8] = { 0x28, 0xCC, 0x32, 0x07, 0xD6, 0x01, 0x3C, 0x6C }; uint8_t sensor3[8] = { 0x28, 0xCC, 0x32, 0x07, 0xD6, 0x03, 0x3C, 0x6C }; File outFile; // Die Datei welche geschrieben bzw. gelesen werden soll int pinCS = 53; // Chip Select Pin 10 auf dem Arduino Uno String filename = "temptime.txt"; //Dateiname der zu lesenden bzw. schreibenden Datei int val; int dat = (sensors.getTempCByIndex(0)); int index = 0; tmElements_t tm; void setup() { Serial.begin(9600); //Serielle Kommunikation mit 9600 Baud beginnen pinMode(pinCS, OUTPUT); if (SD.begin()){ //Wenn die SD Card initialisiert werden konnte dann.... Serial.println("SD Karte konnte erfolgreich geladen werden!"); //Ausgabe des Textes auf der Seriellen Schnittstelle } else { //Dieser Block wird ausgeführt wenn die SD Card nicht initialisiert werden konnte. Serial.println("SD Karte konnte NICHT erfolgreich geladen werden!"); //Ausgabe des Textes auf der Seriellen Schnittstelle Serial.println("---Programm wird beendet!"); //Ausgabe des Textes auf der Seriellen Schnittstelle return; //vorzeitiges beenden der setup Methode } } //Diese Methode wird nur benötigt wenn KEINE Batterie eingelegt ist. //void configureDS1307(){ //Von der Kompilierungszeit das Datum und die Uhrzeit auslesen //if (getDate(__DATE__) && getTime(__TIME__)) { //Die gelesenen Werte auf die RTC schreiben //RTC.write(tm); //} //} String getTimestamp(){ tmElements_t tm; String timestamp = "-error-"; //Meldung wenn die Zeit nicht gelesen werden konnte. if (RTC.read(tm)) { //Lesen der aktuellen Zeit timestamp = ""; timestamp += get2digits(tm.Day); //Tag timestamp += "."; timestamp += get2digits(tm.Month); //Monat timestamp += "."; timestamp += get2digits(tmYearToCalendar(tm.Year)); //Jahr timestamp += " "; timestamp += get2digits(tm.Hour); //Stunde timestamp += ":"; timestamp += get2digits(tm.Minute); //Minute timestamp += ":"; timestamp += get2digits(tm.Second); //Sekunde } delay(1000); Serial.println(timestamp); Serial.println("Temp Sensor 1: " + String(sensors.getTempCByIndex(0))); Serial.println("Temp Sensor 2: " + String(sensors.getTempCByIndex(1))); Serial.println("Temp Sensor 3: " + String(sensors.getTempCByIndex(2))); return timestamp; } //Die Funktion liefert einen String Wert zurück welcher bei Zahlen = 0 && number < 10) { val += "0"; } val += String(number); return val; } //Parsen der Uhrzeit bool getTime(const char *str) { int Hour, Min, Sec; if (sscanf(str, "%d:%d:%d", &Hour, &Min, &Sec) != 3) return false; tm.Hour = Hour; tm.Minute = Min; tm.Second = Sec; return true; } void writeContent(int temp){ outFile = SD.open(filename, FILE_WRITE); //Öffnet bzw. erzeugt die Datei im Modus schreibend if (outFile) { //Wenn die Datei existiert dann... //outFile.print(++index); //outFile.print(" ------ "); //outFile.print("Temperatur Sensor1,"); //outFile.print(temp); outFile.print(","); outFile.print(getTimestamp()); outFile.println(" -- "); outFile.print(" Sensor 1: " + String(sensors.getTempCByIndex(0))); outFile.print(" Sensor 2: " + String(sensors.getTempCByIndex(1))); outFile.print(" Sensor 3: " + String(sensors.getTempCByIndex(2))); outFile.print(" Datum / Zeit "); outFile.close(); //Schließen der Datei (Dieses ist wichtig da sonst beim beenden des Sketches dies Daten verloren gehen können.) } else { //Dieser Block wird ausgeführt wenn die Datei nicht erzeugt werden konnte. Serial.println("Fehler beim öffnen der Datei test.txt"); //Ausgabe des Textes auf der Seriellen Schnittstelle } } int readTemperatur(){ } void loop() { sensors.requestTemperatures(); tempSensor1 = sensors.getTempC(sensor1); // Gets the Sensor 1 values tempSensor2 = sensors.getTempC(sensor2); // Gets the Sensor 2 values tempSensor3 = sensors.getTempC(sensor3); // Gets the Sensor 2 values int tempSensor2 = readTemperatur(); writeContent(tempSensor2); delay(60000); // Zeitintervall der Speicherung }