in anderen Worten:
millis() ist sozusagen deine System-Uhrzeit.
in previousMillis merkst du dir wann du die LED eingeschalten hast.
wenn die aktuelle Uhrzeit [wieder aus millis()] minus der gemerkten Einschaltuhrzeit größer ist als deine Wunschlaufzeit, dann schaltest die LED wieder ab.
Damit der zweite If nicht immer erfüllt ist und permanent die LED abgeschaltet wird, prüfst du einfach auch ab ob die LED überhaupt noch läuft.
Und vorsicht, previousMillis sollte unsigned sein, millis() hat keine Vorzeichen
kompiliert, aber ungeprüft:
const int buttonPin = 12;
const int ledPin = 2;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT);
}
void loop() {
static uint32_t previousMillis = 0; // du brauchst eine unsigned integer Variable mit 32bit/4Byte, weil millis() auch so groß werden kann.
if (digitalRead(buttonPin) == HIGH) {
digitalWrite(ledPin, HIGH);
previousMillis = millis(); // Einschaltzeit "merken"
}
if (millis() - previousMillis > 60 * 1000UL && digitalRead(ledPin) == HIGH) // wenn Zeit abgelaufen und die LED leuchtet
{
digitalWrite(ledPin, LOW);
}
}
wenn das klappt, gibst bescheid, dann bauen wir das noch leicht um, sodass du mit den anderen Sachen nicht Troubles bekommst.