Ich habe einmal den loop-Teil des Codes hier eingestellt und habe den Datum/Uhrzeit Teil entfernt.
void loop()
{
//Sensoren abfragen
sensors.begin();
numSensors = sensors.getDeviceCount(); // Anzahl der angeschlossenen Sensoren in numSensors speichern
sensors.requestTemperatures();
temp0 = sensors.getTempC(sensor10);
temp1 = sensors.getTempC(sensor1);
temp2 = sensors.getTempC(sensor2);
temp3 = sensors.getTempC(sensor3);
temp4 = sensors.getTempC(sensor4);
temp5 = sensors.getTempC(sensor5);
temp6 = sensors.getTempC(sensor6);
temp7 = sensors.getTempC(sensor7);
temp8 = sensors.getTempC(sensor8);
temp9 = sensors.getTempC(sensor9);
if(numSensors > 0 && status == 0) // Es wurde mindestens 1 Sensor gefunden
{
status = 1;
lcd.clear();
lcd.begin(16, 2);
lcd.print(numSensors);
lcd.print( "Temp.-Sensoren");
lcd.setCursor(0, 1);
lcd.print("gefunden.");
lcd.noCursor();
nextMillis = millis() + 3000L; // next state in 1 min
}
else if(numSensors == 0 && status == 0 && millis() > nextMillis) {
status = 1;
lcd.clear();
lcd.begin(16, 2);
lcd.print("Keine Temp.Sen-");
lcd.setCursor(0, 1);
lcd.print("soren gefunden.");
lcd.noCursor();
nextMillis = millis() + 3000L; // next state in 2 min
}
else if (status == 1 && millis() > nextMillis) {
status = 2;
}
else if (status == 2 && temp1 == -127.00 && millis() > nextMillis){
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("Fehler Sensor01");
if (status == 2 && millis() > nextMillis) {
status = 3;
nextMillis = millis() + 3000L; // next state in 2 min
}
}
if (status == 2 && temp1 != -127.00 && millis() > nextMillis) {
lcd.clear();
lcd.begin(16, 2);
lcd.print("01:");
lcd.setCursor(3, 0);
lcd.print(temp1);
lcd.setCursor(7, 0);
lcd.print((char)223); // degree symbol
lcd.print("C");
status = 3;
nextMillis = millis() + 3000L;
}
if (status == 3 && temp2 == -127.00 && millis() > nextMillis){
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("Fehler Sensor02");
status = 4;
nextMillis = millis() + 3000L;
}
else if (status == 3 && temp2 != -127.00 && millis() > nextMillis) {
lcd.clear();
lcd.begin(16, 2);
lcd.print("02:");
lcd.setCursor(3, 0);
lcd.print(temp2);
lcd.setCursor(7, 0);
lcd.print((char)223); // degree symbol
lcd.print("C");
status = 4;
nextMillis = millis() + 3000L;
}
if (status == 4 && temp3 == -127.00 && millis() > nextMillis) {
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("Fehler Sensor03");
status = 5;
nextMillis = millis() + 3000L;
}
else if (status == 4 && temp2 != -127.00 && millis() > nextMillis) {
lcd.clear();
lcd.begin(16, 2);
lcd.print("03:");
lcd.setCursor(3, 0);
lcd.print(temp3);
lcd.setCursor(7, 0);
lcd.print((char)223); // degree symbol
lcd.print("C");
status = 5;
nextMillis = millis() + 3000L;
}
if (status == 5 && temp4 == -127.00 && millis() > nextMillis) {
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("Fehler Sensor04");
status = 6;
nextMillis = millis() + 3000L;
}
else if (status == 5 && temp4 != -127.00 && millis() > nextMillis) {
lcd.clear();
lcd.begin(16, 2);
lcd.print("04:");
lcd.setCursor(3, 0);
lcd.print(temp4);
lcd.setCursor(7, 0);
lcd.print((char)223); // degree symbol
lcd.print("C");
status = 6;
nextMillis = millis() + 3000L;
}
if (status == 6 && temp5 == -127.00 && millis() > nextMillis) {
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("Fehler Sensor05");
status = 7;
nextMillis = millis() + 3000L;
}
else if (status == 6 && temp5 != -127.00 && millis() > nextMillis) {
lcd.clear();
lcd.begin(16, 2);
lcd.print("05:");
lcd.setCursor(3, 0);
lcd.print(temp5);
lcd.setCursor(7, 0);
lcd.print((char)223); // degree symbol
lcd.print("C");
status = 7;
nextMillis = millis() + 3000L;
//-----------------------------------------------------------------------------------------------------------------
// hier wurde der Code um 5 Temperatur Anzeige-Funktionen gekürzt, weil es sonst beim posting in //dieser Code-Box wieder zu einer Fehlermeldung (max. 9000 Zeichen) gekommen wäre.
//-----------------------------------------------------------------------------------------------------------------
}
Serial.print("FanOut: "); // Werte über RS232 Port ausgeben
Serial.println(fanOut);
aktuelleTemp = max(temp0, temp1);
aktuelleTemp = max(aktuelleTemp, temp2);
aktuelleTemp = max(aktuelleTemp, temp3);
aktuelleTemp = max(aktuelleTemp, temp4);
aktuelleTemp = max(aktuelleTemp, temp5);
aktuelleTemp = max(aktuelleTemp, temp6);
aktuelleTemp = max(aktuelleTemp, temp7);
aktuelleTemp = max(aktuelleTemp, temp8);
aktuelleTemp = max(aktuelleTemp, temp9);
// Lüftergeschwindigkeit über den Temperaturbereich einstellen
// TMin->0% PWM | TMax->100% PWM
fanSpeed = map(aktuelleTemp, tMin, tMax, 95, 255);
// Wenn der PWM Wert unter den van FanMin fällt, schält der Lüfter ab
if (fanSpeed < fanMin)
{
fanSpeed = 0;
fanOut = 1;
}
// Hysterese
if (fanOut == 1)
{
fanSpeed = 0;
}
if(aktuelleTemp >= 50)
{
if(fanOut == 1)
{
fanOut = 0;
analogWrite(fanPin,255);//überwindet die Trägheit beim Anlauf der Lüfter bei kleinen Drehzahlen
delay(500);
}
}
// PWM Wert auf 255 begerenzen
if (fanSpeed > 255)
{
fanSpeed = 255;
}
analogWrite(fanPin, fanSpeed);
// Lüftergeschwindigkeit über den Seriellen Monitor ausgeben
if (status == 7 && millis() > nextMillis) {
lcd.begin(16, 2);
lcd.print("L""\xF5""fterspeed: "); // Werte über RS232 Port ausgeben
lcd.setCursor(12, 0);
lcd.print(fanSpeed);
status = 8;
nextMillis = millis() + 3000L;
}
else if (status == 8 && millis() > nextMillis) {
status = 9;
status = 0;
aktMillis = millis();
if (aktMillis - fadeMillis >= fadeZeit) {
fadeMillis = aktMillis;
switch (status) {
case 0:
if (r < 255) {
r++;
} else {
farbenFestlegen(status = 1);
}
break;
case 1:
if (b > 0) {
b--;
} else {
farbenFestlegen(status = 2);
}
break;
case 2:
if (g < 255) {
g++;
} else {
farbenFestlegen(status = 3);
}
break;
case 3:
if (r > 0) {
r--;
} else {
farbenFestlegen(status = 4);
}
break;
case 4:
if (b < 255) {
b++;
} else {
farbenFestlegen(status = 5);
}
break;
case 5:
if (g > 0) {
g--;
} else {
farbenFestlegen(status = 0);
}
break;
}
Driver.begin();
Driver.SetColor(r, g, b);
Driver.end();
}
}
}
Das Problem besteht immer noch. Es kann also nicht nur an der "while(u <= 10)" + "delay(500)" Funktion liegen.
Gruß Jens