Помогите разобраться в двух входах
- Войдите на сайт для отправки комментариев
Вс, 27/05/2018 - 20:05
Добрый день всем.
С ардуиной всего пару дней так что не судите строго.
Включение реле 1,2 при сработке двух датчиков одновременно, если сработал только один датчик то включить реле 3,4. Все вроде работает но датчик 1 срабатывает очень быстро, а второй через время. Как сделать чтобы датчик ждал когда сработает считыватель.
int flag=0;
const int prx_pin2 = 2;
const int prx_pin3 = 3;
const int led_pin6 = 6;
const int led_pin5 = 5;
const int led_pin12 = 12;
const int led_pin4 = 4;
byte v;
byte v1;
void setup()
{
pinMode(prx_pin2, INPUT_PULLUP);
pinMode(prx_pin3, INPUT_PULLUP);
pinMode(led_pin4, OUTPUT);
pinMode(led_pin5, OUTPUT);
pinMode(led_pin6, OUTPUT);
pinMode(led_pin12, OUTPUT);
}
void loop() {
v1 = digitalRead( prx_pin3 ); // датчик
v = digitalRead( prx_pin2 ); // считыватель
if (v == LOW&&v1 == HIGH)
{
//delay(1000);
digitalWrite( led_pin6, HIGH );
digitalWrite( led_pin5, HIGH );
digitalWrite( led_pin4, HIGH );
//delay(2000);
flag=1;
}
else
if( v != LOW&&v1 == LOW)
{
delay(5000);
digitalWrite( led_pin12, HIGH );
digitalWrite( led_pin5, HIGH );
delay(2000);
flag=1;
}
if( v == HIGH&&flag==1)
{
flag=0;
digitalWrite( led_pin5, LOW );
flag=0;
digitalWrite( led_pin6, LOW );
flag=0;
digitalWrite( led_pin12, LOW );
flag=0;
digitalWrite( led_pin4, LOW );
}
}
Убрать Delay`и, там же перед включением пауза в 5 секунд стоит. Вместо делай используйте millis() , смотрите "штатный" пример использования blink without delay
то пауза в 5 сек все правильно стоит. Это для второго алгоритма.
Мне бы первый до ума довести.
мне нужно когда датчики оба выдают LOW.
Т.е. первое условие. У меня датчик срабатывает сразу, а считыватель через где то 1 сек.
И условие не соблюдается. И через 5 сек срабатывает алгоритм 2.
А там в первом условии LOW и v и v1. И когда они равны, то выполнять условие иначе алгоритм 2.
sergeidd2018, вы эту тему читали. Говорят что помогает в общении на этом форуме.http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii
...мне нужно когда датчики оба выдают LOW.
Т.е. первое условие....
В первом условии вроде if (v == LOW&&v1 == HIGH), нипанятна...
Все сделал как надо:)
Подскажите по теме, что нужно дописать в программе.
Спасибо.
В датчиках LOW обозначает сработку? у led_pin HIGH означает - включение релюшки?
led_pin5 присутствует и в первом и во втором условии - так задумано?
flag=0 в третьем условии достаточно один раз сбросить.
ПС: А если не так, то попытайтесь внятно описать техническую задачу.
Да в датчиках LOW это сработка.
HIGH - включение релюшки. 5 реле тоже так нужно.
У меня проблема с первым условием. Датчик уже включился, а считыватель опаздывает. Поэтому не проходит первое условие. Нужна задержка после срабатывания датчика. Чтобы считыватель успевал подавать сигнал со своего реле.
на сколько считыватель должен опаздать что было норм, а на сколько опаздать что уже поздно?
"Даже немножечко чайная ложечка это уже хорошо":)
После сработки датчика нужно 1-2 секунды "подождать" сигнал от считывателя. Пока это так, а там методом тыка:).
работа устройсва такова:
Карточка системы доступа падает в контейнер. Друг напротив друга расположены датчик припятствия и считыватель карточки. Датчик срабатывает сразу, считыватель пока отдаст команду своему контроллеру, пока прийдет ответ от реле проходит время. Если сработать все по отдельности алгоритм работает.
Ну я показал как делать задержку. flag срабатывает с задержкой в 1 сек.
Датчик уже включился, а считыватель опаздывает. Поэтому не проходит первое условие. Нужна задержка после срабатывания датчика. Чтобы считыватель успевал подавать сигнал со своего реле.
Сейчас нет завершения команды? Все включилось и все
А флаг один в программе может быть или несколько.
Программа которую Вы любезно предоставили не завершается, все реле включаются и всё.
нет заверщающего алгоритма.
Или я что то не так делаю.
Вы получили тот алгоритм который сами и составили. И если программа не делает что-то завершающее, то потому что это завершающее вы и не составили.
Или вы думаете, что если задача выполнится, то МК остановится и обесточится.
Просто на моей программе все после отработки алгоритма переходит в начальные установки.
А Ваш скопировал все срабатывает, но не выключаеся.
А без флага никак не добавить задержку?
в скетче 4 условия - которое из них первое, а какое второе?
И еще - не уверен. что это корень проблемы, но как минимум в условии
(flag && !sens1 && millis() - past >= time1sec)
надо бы расставить скобки вокпуг операндов
В такой компановке первые два условия отрабатывают четко. Но если нет сигнала от считывателя условия 4 и 5 не срабатывают.
Помогите уже голова пухнет.
А кодом можно:)
Что совсем не то.
Устройство через две секунды включает само реле на 20 сек и все.
Извините что вмешиваюсь. Я не совсем понял задачу поэтому выкладываю два варианта Вашего последнего кода попробуйте
Добрый вечер.
Работа устройства такова:
Карточка системы доступа падает в контейнер. Друг напротив друга расположены датчик припятствия и считыватель карточки. Датчик срабатывает сразу, считыватель пока отдаст команду своему контроллеру, пока прийдет ответ от реле проходит время. Если сработать все по отдельности алгоритм работает.
Если падает карточка прописанная в контроллере имеем два входящих сигнала. Срабатывают три реле.
Этот алгоритм я сделал он работает.
Но если падает карточка не прописаная, то срабатывает только датчик припятсвия и устройство должно включить два реле.
Этот алгорит не проход. А если и проходит то без первого.
Датчик припятсвия работает через реле, т.е. вход D3 коротится на землю.
Ваш код первый алгорит делает правильно, а потом просто включает остальное реле и все.
sergeidd2018. Человек 1- может пройти без карточки 2- может пройти по неправильной карточке 3 может пройти по правильной карточке .4 человек тупо торчать перед датчиком препятствия. Система после этого покажет эти 4 варианта. Но сколько надо времени что бы система вернулась в состояние дежурства??
Вариатна только два.
Это устройство забирает карту у человека.
Если она правильная (прописанная в контроллере), то турникет откроется. Карточка падает в корзину, загарается зеленая лампа.
Если карточка не правильная (или вообще проездной от метро:) ), то карточка просто падает в корзину и горит красная лампочка.
У меня сейчас я бросаю подряд почти сразу (это при правильной карте). То что на данный момент работает.
Получается сейчас программа не отрабатывает else.
Уточнение:
1- сработал датчик - ждем правильность ключа и если ключ правильный срабатывает 3 реле(это вроде работает)
2-сработал датчик - ждем правильность ключа !сколько ждем? и если ключ не правильный сработает 2 реле.
Все упираетсе в вопрос сколько ждем?
Первый датчик (припятсвия срабатывает всегда)
1. Сработал датчик припятсвия и есть сигнал от считывателя - срабатывают 3 реле.
2. Сработал датчик припятсвия, но нет сигнала от считывателя - срабатывают 2 реле.
В программе я поставил 5 секунд после сработки датчика припятствия сбросить карточку в корзину.
Эта часть тоже работает, но отдельно от первой:)
Попробуйте так, я поставил секунду можете добавить
Этот код работает все как нужно. Единстве датчик припятсвия в первом алгоритме срабатывает очень быстро и переходит ко второму алгоритму не успев дождаться сигнала от считывателя.
А если дать сигнал от считывателя, а потом закрыть датчик припятсвия все работает как нужно.
Имется ввиду мой код
Попрубуйте код из 34 поста
Вопрос 1, а почему реле после отработки алгоритма не преходят в начальное сотояние?
И работа второй части не правильна. Я бросаю карточку и датчик переходит в состояние LOW и должно произойти действие, а тут пока не убрать карточку с датчика действие не проходит.
Посмотрите внимательно 36 строка (// flag = 0;) должна быть закоментированая
Вот так должен возвращаться
Все уже возвращается.
Вот только работа второй части не правильна. Я бросаю карточку и датчик переходит в состояние LOW и должно произойти действие, а тут пока не убрать карточку с датчика действие не проходит.
Проверяем
Спасибо. работает. Задежку только добавил в 5 секунд когда считыватель не в сработке.