Cześć,
W najprostszej wersji możesz stworzyć funkcję, która będzie uruchamiać się przy każdym wykonaniu głównej pętli loop i ta dodatkowa funkcja będzie sprawdzać czy przycisk ma określony stan i czy spełniony jest warunek wyłączenia diody.
Poniżej znajdziesz kod. Za każdym razem gdy przycisk jest wciśnięty na dłużej niż 5 sekund to wyjście zmienia swój stan na przeciwny do poprzedniego stanu.
int in_pin = 2;
int out_pin = 13;
void setup() {
pinMode(out_pin, OUTPUT);
pinMode(in_pin, INPUT);
digitalWrite(out_pin, HIGH);
}
void loop() {
sprawdz_stan_wejscia();
}
void sprawdz_stan_wejscia(){
static double start = 0;
double koniec = millis();
int stan_wejscia;
int stan_wyjscia;
stan_wejscia = digitalRead(inPin);
if (stan_wejscia == 1){
if (koniec - start > 5000){
stan_wyjscia = !digitalRead(outPin);
digitalWrite(outPin, stan_wyjscia);
start = koniec;
}
}
else{
start = koniec;
}
}
W tym rozwiązaniu wyjście zmieni swój stan tylko wtedy gdy przycisk będzie wciśnięty na dłużej niż 5 sekund. Dokładność czasowa tego rozwiązania jest zależna od tego, ile kodu, ile poleceń będziesz mieć w pętli głównej loop.
Pozdrawiam