Nun stehe ich vor dem nächsten Problem:
//===============================================================================================// Bibliotheken einbinden
//===============================================================================================#include <SD.h>
#include <Time.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <SPI.h>
#include <Ethernet.h>
#include <EthernetUdp.h>
//===============================================================================================// Deklarationen
//===============================================================================================// für SD-Karte ------------------------------------------------------------------------------------
const int CS_Mega = 53; // PIN 53 Slave Select für Mega
const int CS_SD = 4; // PIN 4 Slave Select für SD
const int CS_Eth = 10; // PIN 10 Slave Select für Ethernet
File myFile; // Objekte vom Typ File erzeugen
String strDateiname; // für Funktion NeueDatendateiErzeugen
char arDateiname[13]; // für Funktion NeueDatendateiErzeugen, 8.3 lang
String strDatumUhrzeit; // für Funktion DatUhrzeit
// für One-Wire Temperatursensoren ----------------------------------------------------------------------
byte OneWirePin; // variiert bei mehreren Bussen
int AnzahlSensoren; // dto. Anzahl Sensoren
#define ONE_WIRE_BUS OneWirePin // Hier ist der Sensorbus angeschl.
OneWire oneWire(ONE_WIRE_BUS); // Objekte vom Typ oneWire erzeugen
DallasTemperature sensors(&oneWire); // Anbindung an die Dallas-Lib
DeviceAddress tempSensorID; // Adressspeicher
typedef struct Sensor { // Definition das Sensor-Arrays
DeviceAddress address; // Sensor-ID
char* name; // Klarname
float sollwert; // Solltemperatur
} Sensor;
//===============================================================================================// setup
//===============================================================================================void setup() {
// start USB/Serielle
Serial.begin(9600);
// ............
// SD-KARTE starten
digitalWrite(CS_SD, LOW); // SD ein
Serial.print("Initialisierung der SD Karte ... ");
if (!SD.begin(CS_SD)) {
Serial.println("SD geht nicht");
return; // raus aus der Funktion
} // Ende if SD
Serial.println("OK\n"); // Funktion geht weiter
// config.sys auslesen, Auflösung und Messzyklus berechnen
// configAuswerten(); // Funktion holt Daten aus config.txt von SD
// Temperatursensoren ======================================================
// DALLAS TEMPERATURE Library starten
sensors.begin();
// -----------------------------------------------
OneWirePin = 2; // variiert bei mehreren Bussen
AnzahlSensoren = 3; // dto. Anzahl Sensoren
// -------------------------------------------------
// Sensor-Array erzeugen
Sensor sensorList[] = { // address, name, sollwert (mit Punkt)
{ {0x10, 0x8B, 0xCD, 0x4D, 0x02, 0x08, 0x00, 0x63}, "Links", 25.0 },
{ {0x10, 0x64, 0x1F, 0xAD, 0x02, 0x08, 0x00, 0xFA}, "Mitte", 24.8 },
{ {0x10, 0x6B, 0x48, 0x90, 0x02, 0x08, 0x00, 0xCF}, "Rechts", 24.5 } };
// Spannungsversorgung am Bus ermitteln
Serial.print("Parasitaere Versorgung ist ... ");
if (sensors.isParasitePowerMode()) Serial.println("aktiv");
else Serial.println("inaktiv");
// Anzahl der vorhandenen Sensoren suchen und mit AnzahlSensoren vergleichen
Serial.print("Sensorsuche ... ");
int temp = sensors.getDeviceCount(); // gibt die wirkliche Anzahl an
if (temp = AnzahlSensoren) {
Serial.print("Anzahl Sensoren = ");
Serial.print(temp);
Serial.println(", ist OK");
}
else if(temp < AnzahlSensoren) {
Serial.print("Es fehlen ");
Serial.print(AnzahlSensoren - temp);
Serial.println(" Sensoren");
}
else {
Serial.print("Es sind ");
Serial.print(temp - AnzahlSensoren);
Serial.println(" Sensoren zu viel!");
}
Serial.println("");
NeueDatendateiErzeugen(); // Funktion erzeugt lfd.Namen der Ausgabedatei
Serial.println("Aktuell: " + strDateiname + "\n");
for (int i = 0; i < AnzahlSensoren; i++) {
Serial.print(sensorList[i].name);
Serial.print(" ");
Serial.print(" ");
float tempS = sensorList[i].sollwert;
Serial.print(tempS);
Serial.print(" ");
float tempC = sensors.getTempC(sensorList[i].address);
Serial.print(tempC);
int tempR = sensors.getResolution(sensorList[i].address);
Serial.print(" ");
Serial.println(tempR);
}
} // Ende Setup-Funktion
//===============================================================================================// loop
//===============================================================================================void loop() {}// Ende Loop-Funktion
//===============================================================================================// Funktionen
//===============================================================================================String NeueDatendateiErzeugen () { // Aufruf in Setup
// das Dateiformat ist 8.3
// der Dateiname soll folgenden Aufbau haben:
// Jahr, Monat und Tag je 2-stellig, lfd-Nr 2-stellig
Serial.print("NeueDatendateiErzeugen beginnt ... ");
time_t t = now(); // damit alle folgenden Formeln die gleiche Zeit verwenden
strDateiname = String(year(t)); // Jahr 4-stellig
strDateiname = strDateiname.substring(2); // Jahr 2-stellig
if ( month(t) < 10 ) strDateiname += '0'; // Monat
strDateiname += String(month(t));
if ( day(t) < 10 ) strDateiname += '0'; // Tag
strDateiname += String(day(t));
for (byte i = 0; i <= 9; i++){ // lfd Nr erzeugen mit i und j
String strZwischen_i = strDateiname + i;
for (byte j = 0; j <= 9; j++){
String strZwischen_j = strZwischen_i + j + ".dat";
// prüfen, ob Datei existiert, wenn ja, nächste lfd Nr, wenn nein, Datei erzeugen
// an SD.exists muss Array übergeben werden
// deshalb zuerst Dateiname-String in Array umwandeln
strZwischen_j.toCharArray(arDateiname, sizeof(arDateiname));
if (!SD.exists(arDateiname)) { // Datei existiert nicht, also erzeugen
// Serial.println("Datei " + strZwischen_j + " existiert nicht");
// neue Datei öffnen Tabellenkopf einfügen und wieder schließen
myFile = SD.open(arDateiname, FILE_WRITE); // Datei wird erzeugt, wenn nicht vorhanden
// -------------------------------------------------------------------------------------------------
myFile.print("Sensor-ID;"); // Anfang Zeile 1: Sensor-ID
Serial.print("Sensor-ID ");
for (int i = 0; i < AnzahlSensoren; i++) {
for (int j = 0; j < 8; j++) {
int tempA = Sensor sensorList[i].address[j];
myFile.print(tempA, HEX);
Serial.print(tempA, HEX);
}
myFile.print(";");
Serial.print(" ");
}
myFile.println("");
Serial.println(""); // Ende Zeile 1: Sensor-ID
// ------------ Tabellenkopf einfügen
// -------------------------------------------------------------------------------------------------
myFile.close();
strDateiname = strZwischen_j;
// Serial.println("Datei " + strDateiname + " erzeugt");
return strDateiname;
} // Ende if SD.exists
// else { // Datei existiert, also nächste Nr
// Serial.println("Datei " + strZwischen_j + " existiert!");
// } // Ende else SD.exists
} // Ende for j
} // Ende for i
} // Ende Funktion NeueDatendateiErzeugen
===============================================================================================
In der Funktion NeueDatendateiErzeugen () wird mir immer angezeigt, dass sensorList nicht bekannt ist.
Wie muss ich sensorList deklarieren, damit es funktioniert?
HILFE!
Gruß Gerd