Delay ohne delay

Da dürfte dann so aussehen:

#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal.h>


#define ONE_WIRE_BUS 30  // Temperatursensor pin 30
LiquidCrystal lcd(22, 23, 24, 25, 26, 27, 28);
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

DeviceAddress Sensor[] = {{0x28, 0xCD, 0x9B, 0xDA, 0x03, 0x00, 0x00, 0xF2},
                          {0x28, 0x1F, 0xA3, 0xDA, 0x03, 0x00, 0x00, 0xE2},
                          {0x28, 0x2D, 0xB9, 0xDA, 0x03, 0x00, 0x00, 0xA0},
                          {0x28, 0x37, 0x88, 0xDA, 0x03, 0x00, 0x00, 0x7D}};

int backLight = 29;
uint8_t k[] = {31, 32, 33, 35};   //relais HIGH = Aus; LOW = An

uint8_t knopf1 = 34;
uint8_t buttonState = 0; //knopf
int buttonPushCounter = 0; 
uint8_t lastButtonState = 0;

uint32_t previousMillis = 0;
uint32_t interval = 31000;
uint32_t zeit = 31000;

int   mpxPin =  5; //drucksensor
int   mpx;
float pkPa;

uint8_t ledPin = 9; // (kemo)
uint8_t fade;
uint8_t status;

void setup() {
  pinMode(backLight, OUTPUT);
  digitalWrite(backLight, HIGH);
  lcd.begin(20, 4);
  sensors.begin();
  uint8_t i;
  for (i = 0; i < 4; i++) {
    pinMode(k[i], OUTPUT);
    digitalWrite(k[i], HIGH);
  }
  pinMode(knopf1, INPUT);
  
  int status=0;
}

void loop(){
  sensors.requestTemperatures();

  uint8_t i;
  for (i = 0; i < 4; i++) {
    lcd.setCursor(0, i);
    lcd.print("T");
    lcd.print(i+1, DEC);
    lcd.print(":");
    if (sensors.isConnected(Sensor[i])) {
      lcd.print(sensors.getTempC(Sensor[i]));
      lcd.print("C");
    } else {
      lcd.print("AUS   ");
    }
  }
  
  mpx = analogRead(mpxPin);
  pkPa = (mpx/1023.0-0.04)/0.0018;
  lcd.setCursor(10, 0);
  lcd.print(pkPa);
  lcd.print("mb   ");
   
  lcd.setCursor(10, 1);
  lcd.print(fade); 
    
  buttonState = digitalRead(knopf1);
  if (buttonState != lastButtonState && buttonState == HIGH) {
    buttonPushCounter++; 
  }
  lastButtonState = buttonState;
  if (buttonPushCounter % 2 == 0 && status == 0) {
    digitalWrite(k1, HIGH);
  } else {
    programm1();
  }
}

void programm1() { 
  static uint32_t previousMillis = 0;
  static uint32_t thresholdMillis = 0;
  if (sensors.getTempC(Sensor[0]) >= 25.8 && status == 0) {
    digitalWrite(k[0], HIGH);
    status = 1;
    previousMillis = millis();
  } else if (status == 1 && millis() - previousMillis > 60000L) {
    digitalWrite(k[1], LOW);
    digitalWrite(k[2], LOW);
    digitalWrite(k[3], LOW);
    fade = 0;
    analogWrite(ledPin, fade);
    previousMillis = millis();
    status = 2;
  } else if (status == 2 && millis() - previousMillis > 30) {
    previousMillis = millis();
    analogWrite(ledPin, ++fade);
    if (fade >= 51) {
		status = 3;
	}
  } else if (status == 3 && millis() - previousMillis > 120000L) {
    previousMillis = millis();
    analogWrite(ledPin, ++fade);
    status = 4;
  } else if (status == 4 && millis() - previousMillis > 30) {
    previousMillis = millis();
    analogWrite(ledPin ++fade);
    if (fade >= 102) {
      status = 5;
    }
  } else if (status == 5 && millis() - previousMillis > 180000L) {
    previousMillis = millis();
    analogWrite(ledPin, ++fade);
    status = 6;
  } else if (status == 6 && millis() - previousMillis > 30) {
    previousMillis = millis();
    analogWrite(ledPin ++fade);
    if (fade >= 153) {
      status = 7;
    }
  } else if (status == 7 && millis() - previousMillis > 240000L) {
    previousMillis = millis();
    analogWrite(ledPin, ++fade);
    status = 8;
  } else if (status == 8 && millis() - previousMillis > 30) {
    previousMillis = millis();
    analogWrite(ledPin ++fade);
    if (fade >= 255) {
      status = 9;
    }
  }
  if (sensors.getTempC(Sensor[0]) >= 99.0 && thresholdMillis == 0) {
    digitalWrite(k[1], HIGH);
  } else if (thresholdMillis && millis() - thresholdMillis > 300000L) {
    digitalWrite(k[2], HIGH);
    digitalWrite(k[3], HIGH);
    analogWrite(ledPin, 0);
    thresholdMillis = 0;
    previousMillis = 0;
    status = 0;
  }   
}

Also erstmal vielen Dank für deine Mühe, da kann ich mir einiges abschauen.
Ich sitze schon Wochen an diesem sketch und du hast das so schnell hingekriegt. Wow!
Beim start von programm1 geht k[0] nicht an ,aber das habe ich korigiert.
Meine einziges probleme sind :der letzte teil wenn 30°C erreicht werden, denn geht k[1] aus ,aber nach 5 min gehen k[2] und k[3] nicht aus.
Und fade brauch relativ lang um den PWM wert zu erhöhen. Kann man das nicht etwas beschleunigen, sodass der PWM wert schneller steigt?
Und denn wollt ich fragen ob du mir erklären was es mit diesem "uint8_t" aufsich hat. Was bewirkt es?

Mfg

strohhirn

Sollte hier korrigiert sein:

#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal.h>


#define ONE_WIRE_BUS 30  // Temperatursensor pin 30
#define FADE_DELAY 30 // Verzögerung beim Faden
LiquidCrystal lcd(22, 23, 24, 25, 26, 27, 28);
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

DeviceAddress Sensor[] = {{0x28, 0xCD, 0x9B, 0xDA, 0x03, 0x00, 0x00, 0xF2},
                          {0x28, 0x1F, 0xA3, 0xDA, 0x03, 0x00, 0x00, 0xE2},
                          {0x28, 0x2D, 0xB9, 0xDA, 0x03, 0x00, 0x00, 0xA0},
                          {0x28, 0x37, 0x88, 0xDA, 0x03, 0x00, 0x00, 0x7D}};

int backLight = 29;
uint8_t k[] = {31, 32, 33, 35};   //relais HIGH = Aus; LOW = An

uint8_t knopf1 = 34;
uint8_t buttonState = 0; //knopf
int buttonPushCounter = 0; 
uint8_t lastButtonState = 0;

uint32_t previousMillis = 0;
uint32_t interval = 31000;
uint32_t zeit = 31000;

int   mpxPin =  5; //drucksensor
int   mpx;
float pkPa;

uint8_t ledPin = 9; // (kemo)
uint8_t fade;
uint8_t status;

void setup() {
  pinMode(backLight, OUTPUT);
  digitalWrite(backLight, HIGH);
  lcd.begin(20, 4);
  sensors.begin();
  uint8_t i;
  for (i = 0; i < 4; i++) {
    pinMode(k[i], OUTPUT);
    digitalWrite(k[i], HIGH);
  }
  pinMode(knopf1, INPUT);
  
  int status=0;
}

void loop(){
  sensors.requestTemperatures();

  uint8_t i;
  for (i = 0; i < 4; i++) {
    lcd.setCursor(0, i);
    lcd.print("T");
    lcd.print(i+1, DEC);
    lcd.print(":");
    if (sensors.isConnected(Sensor[i])) {
      lcd.print(sensors.getTempC(Sensor[i]));
      lcd.print("C");
    } else {
      lcd.print("AUS   ");
    }
  }
  
  mpx = analogRead(mpxPin);
  pkPa = (mpx/1023.0-0.04)/0.0018;
  lcd.setCursor(10, 0);
  lcd.print(pkPa);
  lcd.print("mb   ");
   
  lcd.setCursor(10, 1);
  lcd.print(fade); 
    
  buttonState = digitalRead(knopf1);
  if (buttonState != lastButtonState && buttonState == HIGH) {
    buttonPushCounter++; 
  }
  lastButtonState = buttonState;
  if (buttonPushCounter % 2 == 0 && status == 0) {
    digitalWrite(k[0], HIGH);
  } else {
    programm1();
  }
}

void programm1() { 
  static uint32_t previousMillis = 0;
  static uint32_t thresholdMillis = 0;
  if (sensors.getTempC(Sensor[0]) >= 25.8 && status == 0) {
    digitalWrite(k[0], HIGH);
    status = 1;
    previousMillis = millis();
  } else if (status == 1 && millis() - previousMillis > 60000L) {
    digitalWrite(k[1], LOW);
    digitalWrite(k[2], LOW);
    digitalWrite(k[3], LOW);
    fade = 0;
    analogWrite(ledPin, fade);
    previousMillis = millis();
    status = 2;
  } else if (status == 2 && millis() - previousMillis > FADE_DELAY) {
    previousMillis = millis();
    analogWrite(ledPin, ++fade);
    if (fade >= 51) {
		status = 3;
	}
  } else if (status == 3 && millis() - previousMillis > 120000L) {
    previousMillis = millis();
    analogWrite(ledPin, ++fade);
    status = 4;
  } else if (status == 4 && millis() - previousMillis > FADE_DELAY) {
    previousMillis = millis();
    analogWrite(ledPin, ++fade);
    if (fade >= 102) {
      status = 5;
    }
  } else if (status == 5 && millis() - previousMillis > 180000L) {
    previousMillis = millis();
    analogWrite(ledPin, ++fade);
    status = 6;
  } else if (status == 6 && millis() - previousMillis > FADE_DELAY) {
    previousMillis = millis();
    analogWrite(ledPin, ++fade);
    if (fade >= 153) {
      status = 7;
    }
  } else if (status == 7 && millis() - previousMillis > 240000L) {
    previousMillis = millis();
    analogWrite(ledPin, ++fade);
    status = 8;
  } else if (status == 8 && millis() - previousMillis > FADE_DELAY) {
    previousMillis = millis();
    analogWrite(ledPin, ++fade);
    if (fade >= 255) {
      status = 9;
    }
  }
  if (sensors.getTempC(Sensor[0]) >= 99.0 && thresholdMillis == 0) {
    digitalWrite(k[1], HIGH);
    thresholdMillis = millis();
  } else if (thresholdMillis && millis() - thresholdMillis > 300000L) {
    digitalWrite(k[2], HIGH);
    digitalWrite(k[3], HIGH);
    analogWrite(ledPin, 0);
    thresholdMillis = 0;
    previousMillis = 0;
    status = 0;
  }   
}

Kann man das nicht etwas beschleunigen, sodass der PWM wert schneller steigt?

Du kannst jetzt den Wert von FADE_DELAY anpassen. Kleinere Werte ergeben eine höhere Geschwindigkeit.

Und denn wollt ich fragen ob du mir erklären was es mit diesem "uint8_t" aufsich hat. Was bewirkt es?

Es ist eine sinnvollere Typ-Deklaration als "unsigned char" für ein Byte.

Edit: added some missing commas in the code.

Hallo wieder,
Ich war leider lange nicht mehr online.
Das ende funktioniert jetzt, aber welchen wert soll ich verändern um das faden zu verschnellern?
Wenn es "#define FADE_DELAY 30 // Verzögerung beim Faden" ist den klappt es schon mal nicht.
Oder welcher wert soll verändert werden ?

Mfg

strohhirn

Doch es ist FADE_DELAY, wenn Du das auf 3 runtersetzt, sollte das Faden ca. 10 Mal schneller sein.

Ich hatte noch einen Kopierfehler ausgemacht, da fehlten einige Kommas, habe ich korrigiert.

Wenn ich es auf 3 runtersetze denn steigt der PW; wert um 1 pro sekunde.
Der Wert soll aber innerhalb von einer oder mehreren sekunden von 0 auf 51 steigen können.
So wie im folgenden beispiel:

for(int fade = 0 ; fade <= 51; fade +=1) { 
    analogWrite(ledPin, fade);             
    delay(30);     
  }

Ich habe wahrscheinlich das Problem gefunden. Die OneWire-Sensoren wurden bei jedem Durchgang ausgelesen, aber da Du sie im Parasite-Mode betreibst (Speisung über Daten-Leitung), wird jedes Mal fast eine Sekunde gewartet, bis der Wert gelesen wird, womit die kurzen Wartezeiten weiter unten nie zum Tragen kamen. Ich habe das jetzt so geändert, dass die Sensoren nur jede Sekunde ausgelesen werden und das Auslesen verzögert wird, wenn die LEDs faden.
Wenn Du die Taster auch während des Auslesens der Sensoren betätigen können willst, musst Du die Sensoren mit einer separaten Versorgungsspannung ausrüsten (3-Draht-Modus).

#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal.h>


#define ONE_WIRE_BUS 30  // Temperatursensor pin 30
#define FADE_DELAY 30 // Verzögerung beim Faden
LiquidCrystal lcd(22, 23, 24, 25, 26, 27, 28);
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

DeviceAddress Sensor[] = {{0x28, 0xCD, 0x9B, 0xDA, 0x03, 0x00, 0x00, 0xF2},
                          {0x28, 0x1F, 0xA3, 0xDA, 0x03, 0x00, 0x00, 0xE2},
                          {0x28, 0x2D, 0xB9, 0xDA, 0x03, 0x00, 0x00, 0xA0},
                          {0x28, 0x37, 0x88, 0xDA, 0x03, 0x00, 0x00, 0x7D}};

int backLight = 29;
uint8_t k[] = {31, 32, 33, 35};   //relais HIGH = Aus; LOW = An

uint8_t knopf1 = 34;
uint8_t buttonState = 0; //knopf
int buttonPushCounter = 0; 
uint8_t lastButtonState = 0;

uint32_t previousMillis = 0;
uint32_t interval = 31000;
uint32_t zeit = 31000;

int   mpxPin =  5; //drucksensor
int   mpx;
float pkPa;

uint8_t ledPin = 9; // (kemo)
uint8_t fade;
uint8_t status;
uint32_t nextSensorMillis = 0;

void setup() {
  pinMode(backLight, OUTPUT);
  digitalWrite(backLight, HIGH);
  lcd.begin(20, 4);
  sensors.begin();
  uint8_t i;
  for (i = 0; i < 4; i++) {
    pinMode(k[i], OUTPUT);
    digitalWrite(k[i], HIGH);
  }
  pinMode(knopf1, INPUT);
  
  int status=0;
}

void loop(){
  if (millis() > nextSensorMillis) {
    nextSensorMillis = millis() + 1000;
    sensors.requestTemperatures();

    uint8_t i;
    for (i = 0; i < 4; i++) {
      lcd.setCursor(0, i);
      lcd.print("T");
      lcd.print(i+1, DEC);
      lcd.print(":");
      if (sensors.isConnected(Sensor[i])) {
        lcd.print(sensors.getTempC(Sensor[i]));
        lcd.print("C");
      } else {
        lcd.print("AUS   ");
      }
    }
  
    mpx = analogRead(mpxPin);
    pkPa = (mpx/1023.0-0.04)/0.0018;
    lcd.setCursor(10, 0);
    lcd.print(pkPa);
    lcd.print("mb   ");
   
    lcd.setCursor(10, 1);
    lcd.print(fade);
  }
    
  buttonState = digitalRead(knopf1);
  if (buttonState != lastButtonState && buttonState == HIGH) {
    buttonPushCounter++; 
  }
  lastButtonState = buttonState;
  if (buttonPushCounter % 2 == 0 && status == 0) {
    digitalWrite(k[0], HIGH);
  } else {
    programm1();
  }
}

void programm1() { 
  static uint32_t nextMillis = 0;
  static uint32_t thresholdMillis = 0;
  if (sensors.getTempC(Sensor[0]) >= 25.8 && status == 0) {
    digitalWrite(k[0], HIGH);
    status = 1;
    nextMillis = millis() + 60000L;
  } else if (status == 1 && millis() > nextMillis) {
    digitalWrite(k[1], LOW);
    digitalWrite(k[2], LOW);
    digitalWrite(k[3], LOW);
    fade = 0;
    analogWrite(ledPin, fade);
    nextMillis += FADE_DELAY;
    status = 2;
  } else if (status == 2 && millis() > nextMillis) {
    nextMillis += FADE_DELAY;
    analogWrite(ledPin, ++fade);
    if (fade >= 51) {
		status = 3;
		nextMillis = millis() + 120000L;
	}
  } else if (status == 3 && millis() > nextMillis) {
    nextMillis += FADE_DELAY;
    nextSensorMillis = millis() + FADE_DELAY << 4;
    analogWrite(ledPin, ++fade);
    status = 4;
  } else if (status == 4 && millis() > nextMillis) {
    nextMillis += FADE_DELAY
    analogWrite(ledPin, ++fade);
    if (fade >= 102) {
      status = 5;
      nextMillis = millis() + 180000L;
    }
  } else if (status == 5 && millis() > nextMillis) {
    nextMillis += FADE_DELAY;
    nextSensorMillis = millis() + FADE_DELAY << 4;
    analogWrite(ledPin, ++fade);
    status = 6;
  } else if (status == 6 && millis() > nextMillis) {
    nextMillis += FADE_DELAY;
    analogWrite(ledPin, ++fade);
    if (fade >= 153) {
      status = 7;
      nextMillis = millis() + 240000L;
    }
  } else if (status == 7 && millis() > nextMillis) {
    nextMillis += FADE_DELAY;
    nextSensorMillis = millis() + FADE_DELAY << 4;
    analogWrite(ledPin, ++fade);
    status = 8;
  } else if (status == 8 && millis() > nextMillis) {
    nextMillis += FADE_DELAY;
    analogWrite(ledPin, ++fade);
    if (fade >= 255) {
      status = 9;
    }
  }
  if (sensors.getTempC(Sensor[0]) >= 99.0 && thresholdMillis == 0) {
    digitalWrite(k[1], HIGH);
    thresholdMillis = millis() + 300000L;
  } else if (thresholdMillis && millis() > thresholdMillis) {
    digitalWrite(k[2], HIGH);
    digitalWrite(k[3], HIGH);
    analogWrite(ledPin, 0);
    thresholdMillis = 0;
    nextMillis = 0;
    status = 0;
  }   
}

Das der knopf während des prozesses nicht funktioniert ist mir auch aufgefallen.
Aber das neue programm funktioniert auch nicht.
Während des faden und warten beim faden aktualisiert sich das display nicht mehr.
Ich verzweifel langsam, nichts klappt perfekt. :frowning:
Aber danke das du mir hilfst.

Während des faden und warten beim faden aktualisiert sich das display nicht mehr.

Das habe ich ja beschrieben und Dir auch den Grund genannt. Hast Du die Sensoren denn schon mit einer Versorgungsspannung ausgerüstet?

Achso also ich muss die One wire sensoren mit einer versorgungsspannung ausstatten damit alles funtioniert.
Und was ist mit dem mpx Luftdrucksensor braucht der auch sowas.
(Außerdem spinnt der mpx irgendwie, erzeigt grundlos 16 mb an, vor ein paar monaten hat er immer 0.04 oder 0.00 mb angezeit.)

Was ist jetzt genau mit einer seperaten Versorgungsspannung geleint?
Könnte ich zum beispiel anstatt der arduino stromversorgung die One-wire sensoren an eine 5V batterie anschließen?

Die DS18B20-Temperatursensoren sind mit 3 Anschlüssen ausgestattet: einer ist für GND (Masse), einer ist die Datenleitung (die im Parasite-Mode auch zur Stromversorung genutzt wird) und der letzte ist die Spannungsversorgung (5V). Wie Deine Sensoren aussehen (z.B. wasserdichtes Gehäuse), weiss ich nicht, ich schätze, dass Du eine Dokumentation zu ihnen hast. Wenn Du den 5V-Anschluss an den 5V-Pin des Arduinos gehängt hast, sollte die Bibliothek automatisch erkennen, dass der Parasite-Mode nicht mehr nötig ist und die Resultate praktisch verzögerungsfrei zurückliefern.
Die Stromversorgung kann gut vom Arduino kommen, sie sollte auf jeden Fall nicht von einer Batterie kommen (unstabile Spannung).

Hier mal eine Fritzing datei wie ich es angeschlossen habe.
Was soll ich daran ändern?

Ende.fzz (12.5 KB)

Ich nehme mal an, dass die TMP36-Sensoren Platzhalter für die DS18B20 sind. Dann sind diese korrekt angeschlossen. Kannst Du mal testen, was der folgende Code (innerhalb setup()) ausgibt?

Serial.println(sensors.isParasitePowerMode() ? "Parasite mode" : "Wire powered");

Wenn die Bibliothek den falschen Mode erkennt, wird sie warten, egal ob der Sensor eigentlich sofort Daten liefern könnte.

Ich hab jetzt einfach den code in das aktuelle programm eingefügt, bei setup, und den serielen monitor geöffnet, der " Wire powered" angezeigt hat.
Und ,ja, die TMP36-Sensoren sind platzhalter

Wenn Du die aktuelle Version der DallasTemperatue-Bibliothek (372Beta) einsetzt, dann könnte der folgende Code funktionieren:

#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal.h>


#define ONE_WIRE_BUS 30  // Temperatursensor pin 30
#define FADE_DELAY 30 // Verzögerung beim Faden
LiquidCrystal lcd(22, 23, 24, 25, 26, 27, 28);
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

DeviceAddress Sensor[] = {{0x28, 0xCD, 0x9B, 0xDA, 0x03, 0x00, 0x00, 0xF2},
                          {0x28, 0x1F, 0xA3, 0xDA, 0x03, 0x00, 0x00, 0xE2},
                          {0x28, 0x2D, 0xB9, 0xDA, 0x03, 0x00, 0x00, 0xA0},
                          {0x28, 0x37, 0x88, 0xDA, 0x03, 0x00, 0x00, 0x7D}};

int backLight = 29;
uint8_t k[] = {31, 32, 33, 35};   //relais HIGH = Aus; LOW = An

uint8_t knopf1 = 34;
uint8_t buttonState = 0; //knopf
int buttonPushCounter = 0; 
uint8_t lastButtonState = 0;

uint32_t previousMillis = 0;
uint32_t interval = 31000;
uint32_t zeit = 31000;

int   mpxPin =  5; //drucksensor
int   mpx;
float pkPa;

uint8_t ledPin = 9; // (kemo)
uint8_t fade;
uint8_t status;

void setup() {
  pinMode(backLight, OUTPUT);
  digitalWrite(backLight, HIGH);
  lcd.begin(20, 4);
  sensors.begin();
  uint8_t i;
  for (i = 0; i < 4; i++) {
    pinMode(k[i], OUTPUT);
    digitalWrite(k[i], HIGH);
  }
  pinMode(knopf1, INPUT);
  
  status=0;
  sensors.setWaitForConversion(false);
  sensors.requestTemperatures();
}

void loop(){
  // check if conversion is done
  if (oneWire.read_bit()) {

    uint8_t i;
    for (i = 0; i < 4; i++) {
      lcd.setCursor(0, i);
      lcd.print("T");
      lcd.print(i+1, DEC);
      lcd.print(":");
      if (sensors.isConnected(Sensor[i])) {
        lcd.print(sensors.getTempC(Sensor[i]));
        lcd.print("C");
      } else {
        lcd.print("AUS   ");
      }
    }
    // start next conversion
    sensors.requestTemperatures();
  
    mpx = analogRead(mpxPin);
    pkPa = (mpx/1023.0-0.04)/0.0018;
    lcd.setCursor(10, 0);
    lcd.print(pkPa);
    lcd.print("mb   ");
  }
    
  buttonState = digitalRead(knopf1);
  if (buttonState != lastButtonState && buttonState == HIGH) {
    buttonPushCounter++; 
  }
  lastButtonState = buttonState;
  if (buttonPushCounter % 2 == 0 && status == 0) {
    digitalWrite(k[0], HIGH);
  } else {
    programm1();
  }
}

void programm1() { 
  static uint32_t nextMillis = 0;
  static uint32_t thresholdMillis = 0;
  if (sensors.getTempC(Sensor[0]) >= 25.8 && status == 0) {
    digitalWrite(k[0], HIGH);
    status = 1;
    nextMillis = millis() + 60000L;
  } else if (status == 1 && millis() > nextMillis) {
    digitalWrite(k[1], LOW);
    digitalWrite(k[2], LOW);
    digitalWrite(k[3], LOW);
    fade = 0;
    analogWrite(ledPin, fade);
    nextMillis += FADE_DELAY;
    status = 2;
  } else if (status == 2 && millis() > nextMillis) {
    nextMillis += FADE_DELAY;
    analogWrite(ledPin, ++fade);
    if (fade >= 51) {
		status = 3;
		nextMillis = millis() + 120000L;
	}
  } else if (status == 3 && millis() > nextMillis) {
    nextMillis += FADE_DELAY;
    analogWrite(ledPin, ++fade);
    status = 4;
  } else if (status == 4 && millis() > nextMillis) {
    nextMillis += FADE_DELAY;
    analogWrite(ledPin, ++fade);
    if (fade >= 102) {
      status = 5;
      nextMillis = millis() + 180000L;
    }
  } else if (status == 5 && millis() > nextMillis) {
    nextMillis += FADE_DELAY;
    analogWrite(ledPin, ++fade);
    status = 6;
  } else if (status == 6 && millis() > nextMillis) {
    nextMillis += FADE_DELAY;
    analogWrite(ledPin, ++fade);
    if (fade >= 153) {
      status = 7;
      nextMillis = millis() + 240000L;
    }
  } else if (status == 7 && millis() > nextMillis) {
    nextMillis += FADE_DELAY;
    analogWrite(ledPin, ++fade);
    status = 8;
  } else if (status == 8 && millis() > nextMillis) {
    nextMillis += FADE_DELAY;
    analogWrite(ledPin, ++fade);
    if (fade >= 255) {
      status = 9;
    }
  }
  if (sensors.getTempC(Sensor[0]) >= 99.0 && thresholdMillis == 0) {
    digitalWrite(k[1], HIGH);
    thresholdMillis = millis() + 300000L;
  } else if (thresholdMillis && millis() > thresholdMillis) {
    digitalWrite(k[2], HIGH);
    digitalWrite(k[3], HIGH);
    analogWrite(ledPin, 0);
    thresholdMillis = 0;
    nextMillis = 0;
    status = 0;
  }   
}

Hier wird die im Datenblatt beschriebene Möglichkeit ausgenutzt, Read-Slots abzusetzen, nachdem der Convert T-Befehl gesendet wurde. Es sollte erst eine 1 zurückkommen, wenn die Konversion abgeschlossen ist. Damit wird die maximal mögliche Anzahl der Temperatur-Lesungen vorgenommen, ohne die restliche Ausführung merklich zu bremsen.

Sollte obiges Programm nicht wie gewollt funktionieren, kannst Du mal versuchen, die Zeile

  if (oneWire.read_bit()) {

durch

  if (sensors.isConversionAvailable(0)) {

zu ersetzen. Das könnte gehen (ist der von der Bibliothek gewählte Weg), ist aber deutlich langsamer (ca. 10ms anstatt 100us) als die erste Variante und widerspricht dem Datenblatt.

Ich habe jetzt mal die bibliothek aktualisiert und das neu programm ausprobiert.
Das faden geht geht jetzt wirklich schneller und die anzeige aktualisiert sich auch, aber den knopf kann ich nur zum anschalten benutzen nicht zum ausschalten während des programmes.
Wenn ich die verzögerung beim faden auf 3 stelle denn braucht es 8 sek um von 0 auf 51 zu faden, diese 8 sek verschieben aber auf dauer alles.
Währe es nicht möglich einfach folgendes einzufügen:

for(int fade = 51 ; fade <= 102; fade +=1) { 
    analogWrite(ledPin, fade);             
    delay(30);    
  }

Das dauert nur 1 sek.
Desweitern wird der fadewert zum schluss nicht auf 0 gesetzt.
Verzei mir bitte meine pingeligkeit.
Ich danke dir für deine Arbeit und weiß deine Mühe zu schätzen.

Das dauert nur 1 sek.

Das dauert zum einen über 1.5s, zum anderen wird dann wieder alles gestoppt.

Ich habe jetzt mal die bibliothek aktualisiert und das neu programm ausprobiert.

Welche Version? Diejenige von mir oder die angepasste mit der Bibliotheksfunktion?

aber den knopf kann ich nur zum anschalten benutzen nicht zum ausschalten während des programmes

Davon wusste ich nichts. Was soll denn ausgeschaltet werden? Alles, also eine Art Reset-Knopf? Vergiss nicht, wir wissen immer noch nicht, wozu das alles dienen soll.

Wenn ich die verzögerung beim faden auf 3 stelle denn braucht es 8 sek um von 0 auf 51 zu faden, diese 8 sek verschieben aber auf dauer alles.

Das ist so, ist aber auch sehr seltsam. Wir müssten jetzt herausfinden, was soviel Zeit braucht.
Versuche mal, die loop()-Funktion durch diese hier auszutauschen:

void loop(){
  // check if conversion is done
  static uint32_t sensorTime = millis() + 200;
  if (millis() > sensorTime && oneWire.read_bit()) {

    uint8_t i;
    sensorTime += 200;
    for (i = 0; i < 4; i++) {
      lcd.setCursor(0, i);
      lcd.print("T");
      lcd.print(i+1, DEC);
      lcd.print(":");
      if (sensors.isConnected(Sensor[i])) {
        lcd.print(sensors.getTempC(Sensor[i]));
        lcd.print("C");
      } else {
        lcd.print("AUS   ");
      }
    }
    // start next conversion
    sensors.requestTemperatures();
  
    mpx = analogRead(mpxPin);
    pkPa = (mpx/1023.0-0.04)/0.0018;
    lcd.setCursor(10, 0);
    lcd.print(pkPa);
    lcd.print("mb   ");
  }
    
  buttonState = digitalRead(knopf1);
  if (buttonState != lastButtonState && buttonState == HIGH) {
    buttonPushCounter++; 
  }
  lastButtonState = buttonState;
  if (buttonPushCounter % 2 == 0 && status == 0) {
    digitalWrite(k[0], HIGH);
  } else {
    programm1();
  }
}

Dadurch wird die Temperatur höchstens alle 0.2s ermittelt, selbst wenn eine höhere Rate möglich wäre. Das sollte die Fades deutlich beschleunigen und trotzdem einen häufigen Update des Displays ermöglichen.

Desweitern wird der fadewert zum schluss nicht auf 0 gesetzt.

Das wird er doch auch bei der meiner Lösung nicht. Oder verstehe ich da auch etwas falsch?

Ich habe jetzt die aktuelle version der DallasTemperatue-Bibliothek : 372Beta
Ich hatte das programm mit dem code "if (oneWire.read_bit()) {" benutzt.
Mit dem neuen programm geht das auf jedenfall schon deutlich schneller , nur noch 3,6 sek um von 0 auf 51 zu kommen, das ist aber immerboch ziemlich viel.
Verzeihung fals ich etwas noch nicht erwähnt habe.
Ich möchte den knopf als an und ausschalt knopf für das programm1 benutzen. d.h. der knopf soll beim drücken während des proggrammes1 als eine art reset knopf fungieren.
Und wenn das programm1 am ende ist soll das programm1 resetet werden (also auch fade auf 0) und verlassen werden, so das ich es wiederverwenden kann wenn ich den knopf drücke.
Eigentlich wollte ich das programm auch an einer beliebigen stelle pausieren und fortsetzen können, aber das wurde mir als unmöglich erklärt, deswegen habe ich mir das erst mal aus dem kopf geschlagen.

Und wenn das programm1 am ende ist soll das programm1 resetet werden (also auch fade auf 0) und verlassen werden, so das ich es wiederverwenden kann wenn ich den knopf drücke.

Definiere "am Ende ist". Ist das gleich Status 9 erreicht? Vergiss nicht, die Routine programm1 wird jetzt mehrere zehntausend Mal durchlaufen, bevor Status 9 erreicht ist.

Mit dem neuen programm geht das auf jedenfall schon deutlich schneller , nur noch 3,6 sek um von 0 auf 51 zu kommen, das ist aber immerboch ziemlich viel.

Mit der Änderung aus dem letzten Post?

Hier die Version von loop(), die den Knopf als Status-Reset walten lässt.

void loop(){
  // check if conversion is done
  static uint32_t sensorTime = millis() + 200;
  if (millis() > sensorTime && oneWire.read_bit()) {

    uint8_t i;
    sensorTime += 200;
    for (i = 0; i < 4; i++) {
      lcd.setCursor(0, i);
      lcd.print("T");
      lcd.print(i+1, DEC);
      lcd.print(":");
      if (sensors.isConnected(Sensor[i])) {
        lcd.print(sensors.getTempC(Sensor[i]));
        lcd.print("C");
      } else {
        lcd.print("AUS   ");
      }
    }
    // start next conversion
    sensors.requestTemperatures();
  
    mpx = analogRead(mpxPin);
    pkPa = (mpx/1023.0-0.04)/0.0018;
    lcd.setCursor(10, 0);
    lcd.print(pkPa);
    lcd.print("mb   ");
  }
    
  buttonState = digitalRead(knopf1);
  if (buttonState != lastButtonState && buttonState == HIGH) {
    buttonPushCounter++; 
  }
  lastButtonState = buttonState;
  if (buttonPushCounter % 2 == 0) {
    status = 0;
    analogWrite(ledPin, 0);
    digitalWrite(k[0], HIGH);
  } else {
    programm1();
  }
}

Eigentlich wollte ich das programm auch an einer beliebigen stelle pausieren und fortsetzen können, aber das wurde mir als unmöglich erklärt, deswegen habe ich mir das erst mal aus dem kopf geschlagen.

Mit der jetzigen Struktur sollte das eigentlich problemlos möglich sein. Definiere aber bitte, was Du unter pausieren verstehst. Was genau soll pausieren? Der ganze Sketch? Nur der Status der Subroutine "programm1"?