Hallo allerseits,
ich muss mich schon wieder an Euch wenden, ich bin dabei mir einen Temperatur-Logger zu basteln.
Hardware steht und funktioniert in einzelnen Sketchen.
Was ich nur nicht verstehe, wie ich Daten auf der SD Karte speichere (in Log.txt) um die dann später Visuell darzustellen.
In der Log.txt sollen die Daten wie folgt auf tauchen:
Datum Uhrzeit Temperatur
16.4.2012 20:02 24.50°C
Kann mir jemand den Code dafür zeigen und vieleicht erklären ?
Hier mein Sketch bis jetzt ( bitte nicht meckern, der ist total unübersichtlich, aber funktioniert...)
#include <SD.h>
#include <SPI.h>
#include <Ethernet.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
#include "RTClib.h"
#define ONE_WIRE_BUS 6
RTC_DS1307 RTC;
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress outsideThermometer = { 0x28, 0x65, 0x35, 0xC3, 0x03, 0x00, 0x00, 0x35 };
//LED blinkt jede Minute für 5sekunden
int ledPIN = 5; // LED liegt am (digitalen) Pin 5
long previousMillis = 0;
long previousLEDmillis = 0;
long LogInterval = 30000; // Zeit LED AUS (60000 = 1 min)
long ledInterval = 10000; // Zeit LED AN (10000 = 10 sec)
boolean ledON = false;
// Ethernet EInrichten
byte mac[] = { 0xDE, 0xAD, 0xED, 0xEF, 0xFE, 0xBE };
byte ip[] = { 192, 168, 178, 216 };
byte gateway[] = { 192, 168, 178, 1 };
byte subnet[] = { 255, 255, 255, 0 };
EthernetServer server(80);
// SD Card
const int chipSelect = 9; // CS is pin 9
void setup(void)
{
Ethernet.begin(mac, ip); // initialize the ethernet device, mac, ip);
server.begin(); // start listening for clients
// Setzt den ledPin (Pin 5) als Ausgang
pinMode(ledPIN, OUTPUT);
// start serial port
Serial.begin(57600);
Serial.print("Pruefe ob SD Card vorhanden...");
// make sure that the default chip select pin is set to
// output, even if you don't use it:
pinMode(9, OUTPUT);
// see if the card is present and can be initialized:
if (!SD.begin(chipSelect)) {
Serial.println("Card failed, or not present");
// don't do anything more:
return;
}
Serial.println("Karte vorhanden und initialisiert.");
Wire.begin();
RTC.begin();
if (! RTC.isrunning()) {
Serial.println("RTC is NOT running!");
RTC.adjust(DateTime(__DATE__, __TIME__));
}
// Start up the library
sensors.begin(); DEC;
sensors.setResolution(outsideThermometer, 9);
}
void printTemperature(DeviceAddress deviceAddress)
{
float tempC = sensors.getTempC(deviceAddress);
if (tempC == -127.00) {
Serial.print("Error getting temperature");
} else {
Serial.print(tempC);
}
}
void loop(void)
{
DateTime now = RTC.now();
delay(10000);
Serial.print(now.day(), DEC);
Serial.print('.');
Serial.print(now.month(), DEC);
Serial.print('.');
Serial.print(now.year(), DEC);
Serial.print(' ');
Serial.print(now.hour(), DEC);
Serial.print(':');
if (now.minute()<10)
{
Serial.print("0");
}
Serial.print(now.minute(), DEC);
Serial.print(' ');
sensors.requestTemperatures();
float tempoutsideThermometer = sensors.getTempC(outsideThermometer);
printTemperature(outsideThermometer);
Serial.print(char(176)); // Gibt das ° Grad-Zeichen aus
Serial.print("C");
Serial.println();
// Ausgabe auf Website
EthernetClient client = server.available();
if (client) {
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
client.println("<html><head>");
client.println("<meta http-equiv='refresh' content='10'>");
client.println("<title>Arduino Webserver</title>");
client.println("</head>");
client.println("<body>");
//---Überschrift---
client.println("
<hr />");
client.println("<h1><div align='center'>Arduino Webserver powered by Cetax</div></h1>");
client.println("<hr />
");
//---Überschrift---
client.println("Die Temperatur betraegt ");
client.println("<h2>");
client.println(tempoutsideThermometer);
client.println("°C");
client.println("</h2>");
client.println("</BODY></HTML>");
delay(10);
client.stop();//close the connection with the client
}
//LED Loop
unsigned long currentMillis = millis();
unsigned long currentLEDmillis = millis();
if (ledON) {
if(currentLEDmillis - previousMillis > ledInterval) {
previousLEDmillis = currentLEDmillis;
ledON = false;
digitalWrite(ledPIN, LOW);
}
}
if(currentMillis - previousMillis > LogInterval) {
previousMillis = currentMillis;
currentLEDmillis = 0;
digitalWrite(ledPIN, HIGH);
ledON = true;
}
}
Einpaar Beispiel habe ich schon gelesen, aber ich verstehe nicht wie ich es für meinen Temperatur-Logger
umsetze :~
z.B.: Data-Logger Shield for Arduino
Vielen Dank für Eure Hilfe...