Vielen Dank für eure Hilfe! Die Teile sind mittlerweile gekommen und direkt verbaut worden. Es funktioniert fast alles einwandfrei. Leider nur fast
Ich bräuchte noch mal kurze eure Hilfe. In einem Bereich, wenn er grün ist, möchte ich das der Wert jede Minute nur gespeichert wird.
Wie folgt bin ich das ganze angeganen:
Erst habe ich folgendes definiert:
unsigned long WRITE_INTERVAL = 60000; // 1 Minuten
unsigned long lastWrite = WRITE_INTERVAL;
In lastWrite wird die letzte Aktualisierung gespeichert.
Im Loop-Bereich befindet sich folgender Code:
void loop() {
//RGB auf 0 stellen
pixels.clear();
//RTC Daten aktualisieren
now = rtc.now();
showDate();
showDay();
showTime();
//Mikrofon einstellen
int lautstaerke = analogRead(mikrofon); // Lautstärke einlesen
float wert = lautstaerke;
Serial.println(wert);
if (wert >= grenze_rot) { // Für hohe Lautstärke
for (int i = 0; i < NUMPIXELS; i++) {
pixels.setPixelColor(i, pixels.Color(255, 0, 0));
pixels.show();
}
//SD Karte beschreiben
String line = String(now.day()) + "." + String(now.month()) + "." + String(now.year()) + "-" + String(now.hour()) + ":" + String(now.minute()) + ";" + "rot";
writeToSD(line);
tone(A1, 100);
delay(dauer); //Warten
noTone(A1);
}
else if (wert > grenze_gelb) { //Für mittlere Lautstärke ...
for (int i = 0; i < NUMPIXELS; i++) {
pixels.setPixelColor(i, pixels.Color(255, 255, 0));
pixels.show();
}
String line = String(now.day()) + "." + String(now.month()) + "." + String(now.year()) + "-" + String(now.hour()) + ":" + String(now.minute()) + ";" + "gelb";
writeToSD(line);
delay(dauer); //Warten
}
else {
for (int i = 0; i < NUMPIXELS; i++) {
pixels.setPixelColor(i, pixels.Color(0, 255, 0));
pixels.show();
}
if (millis() - lastWrite > WRITE_INTERVAL) {
String line = String(now.day()) + "." + String(now.month()) + "." + String(now.year()) + "-" + String(now.hour()) + ":" + String(now.minute()) + ";" + "gruen";
writeToSD(line);
lastWrite = millis();
}
}
}
Der untere Teil (nach dem else) schreibt dennoch jede Sekunde einen Eintrag auf die SD Karte.
if (millis() - lastWrite > WRITE_INTERVAL) {
String line = String(now.day()) + "." + String(now.month()) + "." + String(now.year()) + "-" + String(now.hour()) + ":" + String(now.minute()) + ";" + "gruen";
writeToSD(line);
lastWrite = millis();
}
Dabei sollte er mit Hilfe der Funktion "millis()" und der if-Abfrage nur jede Minute auf die SD Karte schreiben.
Hat jemand von euch einen Tipp für mich? Und vielen Dank für eure Hilfe!
Grüße und schönen Sonntag
Sascha