Всем здравствуйте! Ув. Единомышленники!!! Нужна помощь в виде небольшой, я так думаю, строчке кода. Итак: чтобы при каком-то событии (напр. нажали кнопку) на одном из выходов появился высокий или низкий, не суть, уровень, но!!! нужно чтобы сигнал провисел некоторое время (напр. 5 сек) и вернулся в исходное состояние , самостоятельно, без участия кнопки, т.е. как задержать программно сигнал на нужное время. Спасибо, если кто-то поможет!!!
Самый прсотеший вариант. Код (Text): digitalWrite(pin, HIGH); delay(1000); digitalWrite(pin, LOW); В delay() передается время задержки в микросекундах 1 сек = 1000 микросек. Важный момент, в момент выполнения delay() выполнение программы остановится.
Сорри, немного не так объяснил - жмём на кнопку (не отпускаем!!!) на выходе должна висеть "1" n-сек (кнопка нажата!!!)
Код (Text): #define PIN_BTN 2 #define PIN_OUT 3 #define TIMEOUT 5000 long int time_button_pressed = 0; int output_state = 0; void setup() { pinMode(PIN_BTN, INPUT); pinMode(PIN_OUT, OUTPUT); digitalWrite(PIN_OUT, LOW); } void loop() { if (output_state) { if ((millis()-time_button_pressed) > TIMEOUT) { output_state = 0; digitalWrite(PIN_OUT, LOW); } } else { if (digitalRead(PIN_BTN)) { time_button_pressed = millis(); output_state = 1; digitalWrite(PIN_OUT, HIGH); } } }
Ув. Unixon! С кодом разобрался, возможно ли вместо кнопки прикрутить на вход делитель и реализовать этот же код таким образом, чтобы допустим при напр. >2.5V на выходах были "1" и "0", а при <2.5V - "0" и "1" соответствено (напряжения условно)