Hallo Leute,
ich bin neu hier im Forum und versuche, mein Problem mit eurer Hilfe zu lösen.
Ich bin dabei einen Datenlogger für Helligkeitswerte über einen größeren Zeitpunkt zu bauen.
Nutzen möchte ich dafür den BH1750, Arduino UNO und den Datenlogger für Arduino UNO.
Zunächst habe ich dieDatum und Uhrzeit RTC mit einen separaten Programm eingestellt.
Im Seriellen Monitor konnte ich das Ergebnis darstellen. bis dahin hat alles funktioniert.
Wenn ich jetzt jedoch meinen Script kompeliere und hochlade funktioniert die Ermittlung der Helligkeitsmessung, wie gewünscht; die RTC liefert jedoch nir krytische Werte (z.B. 165.165.2165165:165).
Das Ansprechen der RTC geschieht in der gleichen Art und Weise, wie beim Stellen.
Worin könnte mein Fehler liegen?
Mit freundlichen Grüßen
Walter
Hier mein Script:
#include <SD.h>
#include "RTClib.h"
#include <BH1750.h>
const int chipSelect = 10; //10 is default by shield, but normally on Pin 4
int interval = 10; //Log to SD Card every 5 seconds
String timestring;
String Datastring;
String mvalue = "";
long mvalue0;
int Anzahl = 0;
int lux;
BH1750 lightMeter;
RTC_DS1307 rtc;
void setup()
{
while (!Serial);
Serial.begin(9600);
lightMeter.begin();
if (!SD.begin(chipSelect))
{
return;
}
if (! rtc.begin())
{
Serial.println("No RTC found");
while (1);
}
if (! rtc.isrunning())
{
Serial.println("RTC is not configured");
}
}
void loop()
{
// Ertmittlung der aktuellen Zeit aus RTC---------------
DateTime now = rtc.now();
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(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
//Ende----------------------------------------------------
//Ermittlung der Messwerte--------------------------------
lux = lightMeter.readLightLevel();
Serial.print("Licht: ");
Serial.print(lux);
Serial.println(" lx (Lux)");
mvalue0=lux;
//Ende----------------------------------------------------
//---------------------------------------------<Long Werte in String umwandeln>-----------------------------
int i = 3;
char fstr[10];
char mvalue[40];
dtostrf(mvalue0, 5, 2, fstr);
sprintf(mvalue, fstr, i);
Serial.print("Messwert: ");
Serial.println(mvalue);
//------------------------------------------------<Ende der Umwandlung>-------------------------------------
//----------------------------------------------<Werte auf die SD card schreiben>---------------------------
if (Anzahl == 0) //Überschrift
{
DateTime now = rtc.now();
Datastring = "";
Datastring = now.day();
Datastring += ".";
Datastring += now.month();
Datastring += ".";
Datastring += now.year();
Serial.print(Datastring);
timestring = "";
timestring += now.hour();
timestring += ": ";
timestring += now.minute();
Serial.print(timestring);
String dataString = Datastring; // Überschrift Datum
File dataFile = SD.open("datalog.txt", FILE_WRITE);
if (dataFile)
{
Serial.print("Zeit");
Serial.print(timestring);
Serial.print("Datum ");
Serial.println(dataString);
dataFile.println(dataString);
dataFile.println("--------------------------");
dataFile.println(" Zeit , Helligkeit , Anzahl der");
dataFile.println(" (Lux) Messwerte ");
dataFile.print(timestring);
dataFile.print("; ");
dataFile.print(mvalue);
dataFile.print("; ");
dataFile.println(String(Anzahl));
dataFile.close();
}
}
else if (Anzahl > 0) // keine Überschrift, nur Werte
{
DateTime now = rtc.now();
timestring = "";
timestring += now.hour();
timestring += ": ";
timestring += now.minute();
Anzahl = Anzahl + 1;
String dataString = mvalue;
File dataFile = SD.open("datalog.txt", FILE_WRITE);
if (dataFile)
{
Serial.print("Zeit");
Serial.print(timestring);
Serial.print("Datum ");
Serial.println(dataString);
dataFile.print(timestring);
dataFile.print("; ");
dataFile.print(mvalue);
dataFile.print("; ");
dataFile.println(String(Anzahl));
dataFile.close();
}
Anzahl=Anzahl+1;
}
// ---------------------------------------------<Ende schreiben auf SD>------------------------------------
delay(60000); //Messwerte aller 1 min
}
Setze Deinen Code bitte in Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).
Dann ist er auch auf mobilen Geräten besser lesbar.
Das kannst Du auch noch nachträglich ändern.
Außerdem entferne bitte die unnötigen Leerzeilem und formatiere den Code ordentlich (+T in der IDE hilft Dir dabei).
Wenn Du eine RTC verwendest, warum machst Du die Minute nicht damit, sondern mit delay?
Hallo Thomy, es gibt viele Wege, um nach Rom zu gelangen. Voraussetzung ist, dass es Brücken gibt. um über die Flüsse zu gelangen. Deinen Hinweis auf die Leerzeilen habe ich berücksichtigt und auch neu automatisch Formatiert. Leider geht dabei auch ein wenig Übersichtlichkeit verloren. Ebenfalls habe ich Deinen Hinweis bez. delay() überdacht und werde ihn warscheinlich auch realisieren. Delay() war ganz einfach der schnellere Weg für mich.
Kannst Du auch etwas zu meinen Problem sagen?
Hier noch einmal der Script:
#include <SD.h>
#include "RTClib.h"
#include <BH1750.h>
const int chipSelect = 10; //10 is default by shield, but normally on Pin 4
int interval = 10; //Log to SD Card every 5 seconds
String timestring;
String Datastring;
String mvalue = "";
long mvalue0;
int Anzahl = 0;
int lux;
BH1750 lightMeter;
RTC_DS1307 rtc;
void setup()
{
while (!Serial);
Serial.begin(9600);
lightMeter.begin();
if (!SD.begin(chipSelect))
{
return;
}
if (! rtc.begin())
{
Serial.println("No RTC found");
while (1);
}
if (! rtc.isrunning())
{
Serial.println("RTC is not configured");
}
}
void loop()
{
// Ertmittlung der aktuellen Zeit aus RTC---------------
DateTime now = rtc.now();
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(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
//Ende----------------------------------------------------
//Ermittlung der Messwerte--------------------------------
lux = lightMeter.readLightLevel();
Serial.print("Licht: ");
Serial.print(lux);
Serial.println(" lx (Lux)");
mvalue0 = lux;
//---------------------------------------------<Long Werte in String umwandeln>-----------------------------
int i = 3;
char fstr[10];
char mvalue[40];
dtostrf(mvalue0, 5, 2, fstr);
sprintf(mvalue, fstr, i);
Serial.print("Messwert: ");
Serial.println(mvalue);
//----------------------------------------------<Werte auf die SD card schreiben>---------------------------
if (Anzahl == 0) // dann Überschrift------------------------------------------------------------------------
{
DateTime now = rtc.now();
Datastring = "";
Datastring = now.day();
Datastring += ".";
Datastring += now.month();
Datastring += ".";
Datastring += now.year();
Serial.print(Datastring);
timestring = "";
timestring += now.hour();
timestring += ": ";
timestring += now.minute();
Serial.print(timestring);
String dataString = Datastring; // Überschrift Datum
File dataFile = SD.open("datalog.txt", FILE_WRITE);
if (dataFile)
{
Serial.print("Zeit");
Serial.print(timestring);
Serial.print("Datum ");
Serial.println(dataString);
dataFile.println(dataString);
dataFile.println("--------------------------");
dataFile.println(" Zeit , Helligkeit , Anzahl der");
dataFile.println(" (Lux) Messwerte ");
dataFile.print(timestring);
dataFile.print("; ");
dataFile.print(mvalue);
dataFile.print("; ");
dataFile.println(String(Anzahl));
dataFile.close();
}
}
else if (Anzahl > 0) // keine Überschrift, nur Werte
{
DateTime now = rtc.now();
timestring = "";
timestring += now.hour();
timestring += ": ";
timestring += now.minute();
Anzahl = Anzahl + 1;
String dataString = mvalue;
File dataFile = SD.open("datalog.txt", FILE_WRITE);
if (dataFile)
{
Serial.print("Zeit");
Serial.print(timestring);
Serial.print("Datum ");
Serial.println(dataString);
dataFile.print(timestring);
dataFile.print("; ");
dataFile.print(mvalue);
dataFile.print("; ");
dataFile.println(String(Anzahl));
dataFile.close();
}
Anzahl = Anzahl + 1;
}
// ---------------------------------------------<Ende schreiben auf SD>------------------------------------
delay(60000); //Messwerte aller 1 min
}
Du solltest Dir meinen Beitrag #1 nochmal genau durchlesen. So wird das mit den Codetags nichts.
Außerdem sollst Du korrigieren und nicht allen neu posten.
Warum postest du den Sketch doppelt ?
Du bist doch nur darum gebeten worden, den Sketch in Code-Tags zu setzen.
Das kannst du auch mit dem vorhandenen nachträglich machen.
Die Beschreibung wie das geht, wurde dir doch auch mitgeteilt.
Hallo Leute,
langsam,langsam, ich bin neu hier und kann nicht von 0 auf 100 beim ersten Beitrag realisieren.
Also nehmt bitte etwas Rücksicht darauf.
Also werde ich dann versuchen, Mr. Google zu belästigen.
Ich wünsche euch alles Gute, bleibt gesund und wenn Ihr eine Frage habt, dann hoffe ich, dass Euch genauso geholfen wird, wie mir.
LG Walter
WaRo54:
Hallo Leute,
langsam,langsam, ich bin neu hier und kann nicht von 0 auf 100 beim ersten Beitrag realisieren.
Also nehmt bitte etwas Rücksicht darauf.
Also werde ich dann versuchen, Mr. Google zu belästigen.
Ich wünsche euch alles Gute, bleibt gesund und wenn Ihr eine Frage habt, dann hoffe ich, dass Euch genauso geholfen wird, wie mir.
LG Walter
Hallo Leut,
wenn du dir nicht helfen lassen willst, ist es ganz allein dein Problem.
Wie sollen wir helfen, wenn nicht einmal dein Sketch richtig zu lesen ist ?
Du musst einfach nur lesen, was dir geschrieben wird und alles ist gut.