hallo zusammen,
ich weiß es ist ca der 1000 Thread zu dem Thema Zeitschaltuhr, aber trotz meiner Suche komme ich leider nicht weiter. Ich vermute es handelt sich um einen ganz doofe einfachen Fehler, aber da fehlt wir leider noch die Übersicht für.
Ausgangssituation ist ein Temperatur-, Feuchtigkeit- und Helligkeitslogger. Dieser soll quasi als "Lebenszeichen" mit jedem Durchgang zwei LED abwechselt an und aus schalten. Das Klappt auch alles. Damit Nachts das Teil nicht nervt sollen die LEDs dann aus gehen bzw. bleiben. Die Uhrzeit wird aus einer RTC bezogen.
Das aus schalten klappt aber irgendwie nicht so wirklich. Scheinbar ist es so, das es dann klappt wenn der Arduino Strom bekommt wenn die LEDs aus sein sollen, aber wenn er quasi in die "Auszeit" rein läuft klappt es nicht zuverlässig. Vielleicht kann einer von auch mal über den Code schauen und mir sagen wo ich den Deckfehler habe.
Vielen Dank vorab!
Jan
/*
The circuit:
* SD card attached to SPI bus as follows:
** MOSI - pin 11
** MISO - pin 12
** SCK - pin 13
** CS - pin 4 (for MKRZero SD: SDCARD_SS_PIN)
*
* Sensor DHT22 an Pin2
* Sensor DHT11 an Pin8
*
* Uhr: SCL an A5 und SDA an A4
*
* Diagnose LED an 5 rot, 6 und 7
* 7 Störung, Rest Laufindikatoren
* LED wird in der Nacht abgeschaltet
*/
#include <SPI.h>
#include <SD.h>
#include "DHT.h"
#include <Wire.h>
#include "RTClib.h"
RTC_DS3231 rtc;
//Defintion wo und welcher Temperatursensor benutzt wird
DHT dht(2,DHT22);
DHT dht2(8,DHT11);;
const int chipSelect = 4;
//Counter für Anzahl der Durchläufe
int i=0;
//Helligkeitsensor
int lightPin = 0;
void setup() {
// Open serial communications:
Serial.begin(9600);
delay(2000);
//Sensor starten
dht.begin();
Serial.println("Sensor starten");
//L-LED setup
pinMode (7, OUTPUT); //Rot Störung
pinMode (6, OUTPUT); //Gelb
pinMode (5, OUTPUT); //Grün
////SD-Card in Betrieb nehmen/////////////
Serial.print("Initializing SD card...");
// see if the card is present and can be initialized:
if (!SD.begin(chipSelect)) {
Serial.println("Card failed, or not present");
digitalWrite(7,HIGH);
// don't do anything more:
return;
}
Serial.println("card initialized.");
//Uhr initialisieren
rtc.begin();
if (rtc.lostPower()) {
Serial.println("RTC lost power, lets set the time!");
digitalWrite(7,HIGH);
delay(5000);
// following line sets the RTC to the date & time this sketch was compiled
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
}
void loop() {
///////////////Defintion der Variablen////////////////////////////////////
delay(2000);
String dataStringT;
String dataStringH;
float t=dht.readTemperature();
long h=dht.readHumidity();
float t2=dht2.readTemperature();
long h2=dht2.readHumidity();
dataStringT=String(t);
dataStringH=String(h);
int helligkeit=analogRead(lightPin);
DateTime now = rtc.now();
/////////////////////Datei Log als CSV //////////////////////////////////
File dataFile = SD.open("datalog.csv", FILE_WRITE);
//Durchläufe zählen und L-LED schalten
i++;
Serial.print("Durchlauf: ");
Serial.println(i);
//Uhrzeit bestimmen, LED zwischen 7 und 21Uhr anschalten
long zeitvb = now.hour();
bool indikator;
if(zeitvb>=6&&zeitvb<21){
Serial.println("Licht an");
if(i%2==0){
digitalWrite(5,HIGH);
digitalWrite(6,LOW);
indikator=true;
}
else{
digitalWrite(5,LOW);
digitalWrite(6,HIGH);
indikator=true;
}
}
else{
digitalWrite(5,LOW);
digitalWrite(6,LOW);
Serial.println("Licht aus");
indikator=false;
}
// if the file is available, write to it:
if (dataFile) {
//Uhrzeit auf SD-Karte schreiben
dataFile.print(now.day());
dataFile.print(".");
dataFile.print(now.month());
dataFile.print(".");
dataFile.print(now.year());
dataFile.print(" ");
dataFile.print(now.hour(), DEC);
dataFile.print(":");
dataFile.print(now.minute(), DEC);
dataFile.print(":");
dataFile.print(now.second(), DEC);
dataFile.print(" ; ");
//Durchlaufsnummer auf SD-Karte schreiben
dataFile.print("Durchlauf; ");
dataFile.print(i);
dataFile.print(" ; ");
//Temperatur und Luftfeuchtigkeit auf SD-Karte schreiben
dataFile.print("Temperatur DHT22; ");
dataFile.print(dataStringT);
dataFile.print(" ; ");
dataFile.print("Temperatur DHT8; ");
dataFile.print(String(t2));
dataFile.print(" ; ");
dataFile.print("Luftfeuchtigkeit DHT22; ");
dataFile.print(dataStringH);
dataFile.print(" ; ");
dataFile.print("Luftfeuchtigkeit DHT11; ");
dataFile.print(String(h2));
dataFile.print(" ; ");
dataFile.print("Helligkeit; ");
dataFile.print(helligkeit);
dataFile.print(" ; ");
dataFile.println(indikator);
//Datei schließen
dataFile.close();
// print to the serial port too:
//Uhrzeit auf Serialport ausgeben
Serial.print(now.day());
Serial.print(".");
Serial.print(now.month());
Serial.print(".");
Serial.print(now.year());
Serial.print(" ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.println(now.second(), DEC);
//Daten auf Serialport ausgeben
Serial.print("Temperatur DHT22: ");
Serial.print(dataStringT);
Serial.println(" °C");
Serial.print("Luftfeuchtigkeit DHT22: ");
Serial.print(dataStringH);
Serial.println(" %");
//innen
Serial.print("Temperatur DHT8: ");
Serial.print(String(t2));
Serial.println(" °C");
Serial.print("Luftfeuchtigkeit DHT8: ");
Serial.print(String(h2));
Serial.println(" %");
Serial.print("Helligkeit: ");
Serial.println(helligkeit);
//Leerzeile einfügen
Serial.println("");
}
// if the file isn't open, pop up an error:
else {
Serial.println("error opening datalog.csv");
digitalWrite(7,HIGH);
}
delay(60000);
//delay(10000);
}