Ich kann nur sagen, das es auch hier nicht geht.
Zwei Standorte - gleiches Ergebnis.

Dafür mein Code noch mit der internen LED versehen, kommentiert und der Öffnungsmechanismus auf Basis des angezogenen Magneten verriegelt.
const byte fusstaster = 3; // Auslösekontakt
const byte magnet = 4;
enum {an, aus}; // zur Verwendung negierter bool Werte
unsigned long lastmillis = 0; // Merker für interne Zeit
unsigned long aufzeit = 1000UL * 10; // Anzugzeit des Magneten
unsigned long startzeit = 0; // später variable Zeit wann geöffnet wird
bool lastfuss = aus; // Merker ob ausgelöst
void setup()
{
Serial.begin(115200);
Serial.println(F("Start..."));
pinMode(fusstaster, INPUT_PULLUP); // Auslöser wird nach GND beschaltet
pinMode(magnet, OUTPUT);
digitalWrite(magnet, aus); // Grundstellung
randomSeed(analogRead(0)); // Grundlage Zufallszahlen
}
void loop()
{
if (digitalRead(magnet) == aus) // Wenn Magnet nicht aktiviert...
{
if ((digitalRead(fusstaster) == an) // ... und der Auslöser aktivert ...
&& (lastfuss == aus)) // ... und vorher nicht aktiviert
{
lastfuss = an; // Merke Aktivierung
lastmillis = millis(); // merke Jetzt Zeit
startzeit = random(1000, 3000); // Zufallszahl zwischen 1 und 3 Sek
}
if ((millis() - lastmillis >= startzeit) // Wenn Startzeit erreicht...
&& (magnet == aus)) // und nicht ausgelöst
{
digitalWrite(magnet, an); // auslösen
digitalWrite(LED_BUILTIN, HIGH) // anzeige mit onBoardLED
lastmillis = millis(); // Zeit merken
}
} // Ende "Wenn Magnet nicht aktiviert"
if ((millis() - lastmillis >= aufzeit)// Öffnungszeit abgelaufen...
&& (digitalRead(magnet) == an)) // ... und Magnet an
{
digitalWrite(magnet, aus); // Magnet aus
digitalWrite(LED_BUILTIN, LOW); // LED aus
lastfuss = false; // Merker löschen
}
}
Ich fände es interressant zu erfahren, warum Du Dich so auf ein - offensichtlich nicht nur durch mich - nicht erreichbares Ding versteifst und Deinen Code dahinter versteckst.
Na dann - @lukasmb ist hoffentlich nicht verschreckt.