Формирователь одиночных импульсов
- Войдите на сайт для отправки комментариев
Всем привет! Пытаюсь собрать формирователь одиночных импульсов на Ардуино. Уровень в программировании – «Начальный», в стадии «неделю назад начал изучение».
В схемотехнике – не плохо. Задача: один и тот же вход (2), и один и тот же выход (13).
На входе возможны 2 состояния: непрерывный «0» или непрерывная «1». Скетч считывает состояние входа и при поступлении «0» выдает один импульс длительностью 6с, при смене состояния входа на «1» выдает один импульс 4с.
В чем проблема: у меня никак не получается остановить выдачу импульсов. Много вариантов перепробовал и, либо компилятор не могу уговорить, либо не та функция и т. д.
Похожий пример пока не нащел. С уважением приму любую подсказку или помощь по той теме.
Скетч, который удалось запустить:
const int trigger = 2; //Pin2 as trigger pin. const int output = 13; //Pin3 as Output pin. int TimeSt = 4000; //Preset time delay. int TimeSp = 6000; void setup() { pinMode(output, OUTPUT); pinMode(trigger, INPUT); } void loop() { if (digitalRead(trigger) == HIGH) { digitalWrite(output, HIGH); delay(TimeSt); digitalWrite(output, LOW); delay(6000); } else { digitalWrite(output, HIGH); delay(TimeSp); digitalWrite(output, LOW); delay(6000); } }Надо отлавливать изменение !
void loop() { static byte lastState = digitalRead(trigger); byte temp = digitalRead(trigger); if (temp != lastState) { lastState = temp; if (temp == HIGH) { digitalWrite(output, HIGH); delay(TimeSt); digitalWrite(output, LOW); delay(6000); } else { digitalWrite(output, HIGH); delay(TimeSp); digitalWrite(output, LOW); delay(6000); } } }А если состояние входа поменяется раньше, чем закончится импульс?
А если состояние входа поменяется раньше, чем закончится импульс?
Тогда используй прерывание. Если оно уместно в данной задаче...
Это был вопрос больше к ТС, чтобы он точнее сформулировал ТЗ.
Упс, не глянул на ник... ))
[quote=Pyotr]
А если состояние входа поменяется раньше, чем закончится импульс?
В реальной схеме это мало вероятно, а, также, дальнейшая обработка сигнала любые непонятки переведет в "стоп".
V258, Вы Гений! Ваш скетч работает именно так, как и требуется. Огромное спасибо, удачи! Самостоятельно я бы еще очень долго добирался до такого решения, а может быть, и бросил это дело. Теперь оптимизма прибавилось...
Это ваш скетч с небольшим дополнением. Как вам выше и посоветовали - нужно отслеживать не уровень сигнала, а изменение уровня. Ничего гениального там нет, советую разобраться и вникнуть. Пригодится на будущее.