Hallo zusammen,
ich habe folgenden sketch, welcher den Arbeitsspeicher auszureizen scheint. Ich habe keine Erfahrung im programmieren, aber ich bin mir sicher, dass man hier viel Speicher sparen könnte, wenn man nicht alles so oft wiederholen würde. Ich bin jedoch ratlos und viele ergoogelte Sachen verstehe ich schlicht weg nicht.
Hier mein sketch:
#include <DHT.h> // include library
#include <SPI.h>
#include <SD.h>
#include <Wire.h> // Wire Bibliothek einbinden
#include <LiquidCrystal_I2C.h>
#include "RTClib.h"
const int lightRelay = 12;
const int rainRelay = 11;
const int fanRelay = 8;
const int chipSelect = 10;
const int DHTPIN = 7;
float h = 0, t = 0;
int maxTemp = 28;
int coolTemp = 26;
int minHum = 80;
LiquidCrystal_I2C lcd(0x27, 16, 2);
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);// Initialize DHT sensor
RTC_DS1307 rtc;
File myFile;
char dateBuffer[12];
char sensBuffer[10];
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
lcd.init(); //Im Setup wird der LCD gestartet
lcd.backlight();
if (! rtc.begin()) {
Serial.println("No RTC"); //Could not fint RTC
Serial.flush();
abort();
}
if (! rtc.isrunning()) {
Serial.println("RTC off, set the time");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
//rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
Serial.print("Initializing SD card...");
if (!SD.begin(chipSelect)) {
Serial.println("initialization failed!");
while (1);
}
Serial.println("initialization done.");
if (SD.exists("terralog.txt")) {
Serial.println("terralog.txt exists.");
} else {
Serial.println("terralog.txt doesn't exist.");
Serial.println("Creating terraaaaa.txt");
myFile = SD.open("terralog.txt", FILE_WRITE);
myFile.close();
if (SD.exists("terralog.txt")) {
Serial.println("terralog.txt was successfully created.");
} else {
Serial.println("File creation failed.");
}
}
pinMode(fanRelay, OUTPUT);
dht.begin();
Serial.println("date,time,temperature,humidity,fanState,rainState,sun1State");
}
void loop() {
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
lcd.setCursor(0, 0);//Hier wird die Position des ersten Zeichens festgelegt. In diesem Fall bedeutet (0,0) das erste Zeichen in der ersten Zeile.
lcd.print("Temp: ");
lcd.print(t);
lcd.setCursor(0, 1);// In diesem Fall bedeutet (0,1) das erste Zeichen in der zweiten Zeile.
lcd.print("Hum: ");
lcd.print(h);
DateTime time = rtc.now();
sprintf(dateBuffer, "%02u-%02u-%04u", time.day(), time.month(), time.year());
Serial.print(dateBuffer);
Serial.print(",");
sprintf(dateBuffer, "%02u:%02u:%02u", time.hour(), time.minute(), time.second());
Serial.print(dateBuffer);
Serial.print(",");
Serial.print(t);
Serial.print(",");
Serial.print(h);
Serial.print(",");
File myFile = SD.open("terralog.txt", FILE_WRITE);
if (myFile) {
sprintf(dateBuffer, "%02u-%02u-%04u", time.day(), time.month(), time.year());
myFile.print(dateBuffer);
myFile.print(",");
sprintf(dateBuffer, "%02u:%02u:%02u", time.hour(), time.minute(), time.second());
myFile.print(dateBuffer);
myFile.print(",");
myFile.print(t);
myFile.print(",");
myFile.print(h);
myFile.print(",");
myFile.close();
}
else {
Serial.println("error opening terralog.txt");
}
if (t >= maxTemp) { // && a == LOW
digitalWrite(fanRelay, HIGH);
Serial.print("1");
File myFile = SD.open("terralog.txt", FILE_WRITE);
myFile.print("1");
myFile.close();
}
else if (t < maxTemp && t >= coolTemp) {
Serial.print("1");
File myFile = SD.open("terralog.txt", FILE_WRITE);
myFile.print("1");
myFile.close();
}
else if (t < coolTemp) {
digitalWrite(fanRelay, LOW);
Serial.print("0");
File myFile = SD.open("terralog.txt", FILE_WRITE);
myFile.print("0");
myFile.close();
}
Serial.print(",");
if (h < minHum) {
digitalWrite(rainRelay, HIGH);
Serial.print("1");
File myFile = SD.open("terralog.txt", FILE_WRITE);
myFile.print("1");
myFile.close();
}
else if (h >= minHum) {
digitalWrite(rainRelay, LOW);
Serial.print("0");
File myFile = SD.open("terralog.txt", FILE_WRITE);
myFile.print("0");
myFile.close();
}
Serial.println();
delay(1000);
}
Viele Grüße und Schönen Sonntag euch allen!