задержка включения реле от кнопки
- Войдите на сайт для отправки комментариев
Пт, 09/11/2018 - 21:06
Парни, помогайте.
надо скетч. опишу проблему.
надо управлять реле по сигналу с инфракрасного датчика E80-В50NK.
у него в режиме наличия припятствия появляется 0, а при отсутствии 1.
нужно чтобы при появлении 0 на входе пин2, на выходе пин13 с задержкой 40 секунд включалось реле.
то есть, пока на входе 1, на выходе 0. появляется на входе 0, на выходе через 40 сек появляется 1 и пропадает когда на входе опять появится 1. и так по кругу. помогите кто знает. плиз)))
Код на брейнфаке устроит?
#18
да я в ардуино новенький.
что с ним делать и как я думаю еще неделю потрачу.
спасибо Вини))), но тоже пока глубоко не вникал. позже конечно надо поизучать, но сейчас горит. надо хрень одну запустить.
Библиотека TimingRelay с это пробовал, работает норм, но проблема в том, что датчик входной имеет 1 на выходе в спокойном состоянии. думаю инвертер поставлю если не соображу как инвертнуть.
как я думаю еще неделю потрачу.
Оптимист ;-)
вот этот поправил, но он иногда срабатывает раньше.
да))). я настырный
Автомат с двумя состояниями A и B. В одном вывод 0 в другом 1 . Переход A-> B если 40 секунд 0. Переход B->A если появилась 1. И все.
qwone, я смотрю вы спец в этом вопросе. не посмотрите, как можно поправить скетч с TimingRelay библиотекой?
надо вход кнопки инвертировать.
TimingRelay не пользуюсь из-за не надобности
туго пока для меня это. мне проще на триггере спаять. проблема в том что время может менятся по заданию, и каждый раз перепаивать кондер, или крутить потенциометр.... тоже не айс.
TimingRelay не пользуюсь из-за не надобности
подожду. может еще кто придет сюда, подсабит.
то есть, пока на входе 1, на выходе 0. появляется на входе 0, на выходе через 40 сек появляется 1 и пропадает когда на входе опять появится 1. и так по кругу. помогите кто знает. плиз)))
это говнокод, на основе "вашего" стыриного кода
int LED = 13; int BUTTON = 2; void setup() { pinMode(LED, OUTPUT); pinMode(BUTTON, INPUT); digitalWrite(LED, LOW); // выключаем реле } void loop() { if ( digitalRead(BUTTON) == LOW ) // на входе 0? { // да delay(40000); // ждем 40 секунд digitalWrite(LED, HIGH); // включаем реле } else { // нет digitalWrite(LED, LOW); // выключаем реле } }спасибо. только когда 1 появляется на входе выдержка времени столько же по времени идеть. а надо чтоб сразу пропадала.
пока на входе 1, на выходе 0. появляется на входе 0, на выходе через 40 сек появляется 1 и пропадает ТОЛЬКО ТОГДА, когда на входе опять появится 1. если сразу 1 на входе, то и на выходе 0. короче, датчик сработал и если он не отключается в течении 40 сек, тогда вкл реле и оно висит пока датчик не откл.
спасибо. только когда 1 появляется на входе выдержка времени столько же по времени идеть. а надо чтоб сразу пропадала.
надо сразу четко описывать весь алгоритм.
и я написал что это говнокод, не учитывающий дребезг и блокирующийся на 40 сек.
ситуация. подходит клиент к лотку, и если он стоит более 40 секунд включается камера. ушел, выключается и ждет следующего. если раньше ушел, тогда она не включается (камера).
думал понятно будет. аим сорри.
с библиотекой норм работает, только ускоглазые при срабатывание датчика решили 0 сделать.
лишних схем паять не охота. можно конечно 2 резистора и оптопару, и все это дело инвертнуть. как самое простое.
int LED = 13; int BUTTON = 2; void setup() { pinMode(LED, OUTPUT); pinMode(BUTTON, INPUT); digitalWrite(LED, LOW); // выключаем реле } void loop() { if ( digitalRead(BUTTON) == LOW ) // клиент приперся ? { // да delay(40000); // ждем 40 секунд if ( digitalRead(BUTTON) == LOW ) // клиент на месте ? { digitalWrite(LED, HIGH); // включаем реле } } else { // нет digitalWrite(LED, LOW); // выключаем реле } } }26 строка похоже лишняя.
да
нее, руку от датчика убираешь, он еще это же время держит реле.
вкл ардуино, реле молчит, подносишь руку через время заданое включается, убираешь руку и оно еще столькоже времени сработанно.
да так и будет ....
опять ник то не говорил, что убрал руку реле выключилось...
я ушел...
это я описал как ваш скетч работает
ок. спасибо за участие)))
это я описал как ваш скетч работает
спасибо ! :)
Better Call Qwone.
так вам спасибо, мне то за что)
Better Call Qwone.
Не проверял
/**/ const byte BtnPin =/*пин*/ 2; bool btn, OldBtn; const byte LedPin =/*пин*/ 13; unsigned long past; const unsigned long time40s = 40000000; /*40 секунд*/ /*состояние циф автомата A и B*/ enum state_t {sA = 0, sB} state; //-------------------------------------------- void setup() { pinMode(BtnPin, INPUT); OldBtn = digitalRead(BtnPin); pinMode(LedPin, OUTPUT); state = sA; digitalWrite(LedPin, LOW); // выключаем реле } void loop() { OldBtn = btn; btn = digitalRead(BtnPin); if (state == sB && btn == 1) { state = sA; digitalWrite(LedPin, LOW); // выключаем реле } if (state == sA && btn == 0 && OldBtn == 1 ) { past = millis(); } if (state == sA && millis() - past >= time40s) { state == sB; digitalWrite(LedPin, HIGH); // включаем реле } } /*Скетч использует 1118 байт (3%) памяти устройства. Всего доступно 30720 байт. Глобальные переменные используют 17 байт (0%) динамической памяти, оставляя 2031 байт для локальных переменных. Максимум: 2048 байт. */щас проверим))). спасибо
Зря от брейнфака откалася :(
че то вообще тишина. ничего не переключается
еще бы знать как им вообще работать. он на ассемблер похож.
Не проверял
Так суть квоновских постов не инсталляция, а перфоманс.
так я же новенький у вас, не знаю. на путь истиный направьте.
он на ассемблер похож.
Как Валуев на Загитову (типа, оба спортсмены).
http://arduino.ru/forum/programmirovanie/razrabotka-sketchei-na-yazyke-b...
а как залить его в ардуино?
BrainFuck
кажется понял. надо установить библиотеку BrainFuck?
кажется понял. надо установить библиотеку BrainFuck?
Да нет, терзают меня смутные сомнения, что датчик на букву Х, но не подумайте, что хороший.
И еще - библиотеки это зло, пока Вы их не поняли. Пишите проще - там замкнулось - там разомкнулось. И главное - не используйте delite()
он на ассемблер похож.
Как Валуев на Загитову (типа, оба спортсмены).
http://arduino.ru/forum/programmirovanie/razrabotka-sketchei-na-yazyke-b...
кажется понял. надо установить библиотеку BrainFuck?
Да нет, терзают меня смутные сомнения, что датчик на букву Х, но не подумайте, что хороший.
И еще - библиотеки это зло, пока Вы их не поняли. Пишите проще - там замкнулось - там разомкнулось. И главное - не используйте delite()
я специалист в звуке, в электронике и от скуки на все руки. а вот программирование от меня далеко. да и время столько нет на изучение. был бы помоложе, наверное занялся бы изучением.
Поправил на 1 секунду
/**/ const byte BtnPin =/*пин*/ 2; bool btn, OldBtn; const byte LedPin =/*пин*/ 13; unsigned long past; const unsigned long time1s = 1000; /*1 секунд*/ /*состояние циф автомата A и B*/ enum state_t {sA = 0, sB} state; //-------------------------------------------- void setup() { pinMode(BtnPin, INPUT_PULLUP); btn = digitalRead(BtnPin); pinMode(LedPin, OUTPUT); state = sA; digitalWrite(LedPin, LOW); // выключаем реле } void loop() { OldBtn = btn; btn = digitalRead(BtnPin); if (state == sB && btn) { state = sA; digitalWrite(LedPin, LOW); // выключаем реле } if (state == sA && !btn) { if (OldBtn) past = millis(); if (millis() - past >= time1s) { state = sB; digitalWrite(LedPin, HIGH); // включаем реле } } } /*Скетч использует 1118 байт (3%) памяти устройства. Всего доступно 30720 байт. Глобальные переменные используют 17 байт (0%) динамической памяти, оставляя 2031 байт для локальных переменных. Максимум: 2048 байт. */