25-05-2019, 23:14
(25-05-2019, 22:06)kaczakat napisał(a): Załóżmy, że ma coś świecić 100s, czyli w momencie gdy uruchamiasz program deklarujesz zmienną dlugSwiecenia, po starcie ma wartość 0.
Wprowadzasz warunek, gdy dlugSwiecenia>0 to załączasz świecenie.
Co sekundę w trakcie działania programu zmniejszasz zmienną if(dlugSwiecenia>0) dlugSwiecenia--.
Gdy pir wykryje ruch ustawiasz zmienną dlugSwiecenia=100.
Jeśli ma działać niezależnie od przycisku to w warunku załączenia świecenia ma być warunek LUB od tej drugiej opcji. Stan przycisku zapisujesz do drugiej zmiennej, np. "przycisk", gdy włączony to przycisk=1, gdy wyłączony to 0.
if(dlugSwiecenia OR przycisk) zaświeć; - to zadziała gdy zmienna dlugSwiecenia LUB przycisk jest różne od 0.
Jak chcesz odwrócić wartości zmiennej przycisk to potem wstawiasz jej odwrotność do warunku:
if(dlugSwiecenia OR !przycisk) zaświeć - gdy ma świecić gdy przycisk ==0;
Jak zmierzyć upływ 1s masz podane w przykładzie blinkWithoutDelay, zamiast zmieniać stan led po prostu robisz to co ma się wydarzyć gdy minie sekunda.
Dziękuję za odpowiedź. Bardzo ciekawe podejście ale mam jedno pytanie: czy zapisanie w ten sposób nie spowoduje, że światło przestanie świecić po określonym czasie od załączenia czujki? Bo chodzi o to, żeby światło przestało świecić po określonym czasie od wyłączenia czujki.