Jest prosty sposób. Po wykryciu, że przycisk został wciśnięty włączasz przekaźnik, pchasz delaya, który będzie wykonywał opóźnienie o te 20s, a następnie wyłączasz przekaźnik.
Przykładowo:
(oczywiscie piny i porty możesz zamienić na odpowiadające twoim połączeniom albo skorzystać z makr opisanych w rozdziale o LCD)
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Oczywiście założyłem, że przekaźnik włączasz, podając stan wysoki na port - w przeciwnym razie należałoby zamienić kolejność instukcji wystawiających jedynkę i zero logiczne na port)
Pytanie brzmi, czy uC ma wykonywać jeszcze jakieś działania, czy tylko sterować przekaźnikiem? Bo jeśli miałby robić jeszcze coś, to moim zdaniem najlepiej będzie zastosować tzw. Timer programowy, o którym Mirek szerzej pisał w rozdziale "Wstęp do systemów czasu rzeczywistego".
Ale jeśli ma być jak najprostsze choć wcale nie eleganckie rozwiązanie to tak jak pisałem - wykrycie + delay