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"?