Помогите разобраться в двух входах
- Войдите на сайт для отправки комментариев
Вс, 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), нипанятна...
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 == LOW) { //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 ); } }Все сделал как надо:)
Подскажите по теме, что нужно дописать в программе.
Спасибо.
В датчиках LOW обозначает сработку? у led_pin HIGH означает - включение релюшки?
led_pin5 присутствует и в первом и во втором условии - так задумано?
flag=0 в третьем условии достаточно один раз сбросить.
/**/ const int sens1Pin =/*пин*/2;// считыватель const int sens2Pin =/*пин*/3;// датчик const int led1Pin =/*пин*/ 6; const int led2Pin =/*пин*/ 12; const int led3Pin =/*пин*/ 5; const int led4Pin =/*пин*/ 4; bool led1, led2, led3, led4; //------main()----------------------------- void setup() { pinMode(sens1Pin, INPUT_PULLUP); pinMode(sens2Pin, INPUT_PULLUP); pinMode(led1Pin, OUTPUT); digitalWrite(led1Pin, led1 = LOW ); pinMode(led2Pin, OUTPUT); digitalWrite(led2Pin, led2 = LOW ); pinMode(led3Pin, OUTPUT); digitalWrite(led3Pin, led3 = LOW ); pinMode(led4Pin, OUTPUT); digitalWrite(led4Pin, led4 = LOW ); } void loop() { bool sens1 = digitalRead(sens1Pin ); // считыватель bool sens2 = digitalRead(sens2Pin ); // датчик /*Включение реле 1,2 при сработке двух датчиков одновременно*/ if (!sens1 && !sens2) { digitalWrite(led1Pin, led1 = HIGH ); digitalWrite(led2Pin, led2 = HIGH ); } /*если сработал только один датчик то включить реле 3,4.*/ if (sens1 && !sens2) { digitalWrite(led3Pin, led3 = HIGH ); digitalWrite(led4Pin, led4 = HIGH ); } } /**/ПС: А если не так, то попытайтесь внятно описать техническую задачу.
Да в датчиках LOW это сработка.
HIGH - включение релюшки. 5 реле тоже так нужно.
У меня проблема с первым условием. Датчик уже включился, а считыватель опаздывает. Поэтому не проходит первое условие. Нужна задержка после срабатывания датчика. Чтобы считыватель успевал подавать сигнал со своего реле.
на сколько считыватель должен опаздать что было норм, а на сколько опаздать что уже поздно?
/**/ const int sens1Pin =/*пин*/2;// считыватель const unsigned long time1sec = 1000; unsigned long past; bool flag = 1; const int sens2Pin =/*пин*/3;// датчик const int led1Pin =/*пин*/ 6; const int led2Pin =/*пин*/ 12; const int led3Pin =/*пин*/ 5; const int led4Pin =/*пин*/ 4; bool led1, led2, led3, led4; //------main()----------------------------- void setup() { pinMode(sens1Pin, INPUT_PULLUP); past = millis(); pinMode(sens2Pin, INPUT_PULLUP); pinMode(led1Pin, OUTPUT); digitalWrite(led1Pin, led1 = LOW ); pinMode(led2Pin, OUTPUT); digitalWrite(led2Pin, led2 = LOW ); pinMode(led3Pin, OUTPUT); digitalWrite(led3Pin, led3 = LOW ); pinMode(led4Pin, OUTPUT); digitalWrite(led4Pin, led4 = LOW ); } void loop() { bool sens1 = digitalRead(sens1Pin ); // считыватель if (flag && !sens1 && millis() - past >= time1sec) { flag = 0; } bool sens2 = digitalRead(sens2Pin ); // датчик /*Включение реле 1,2 при сработке двух датчиков одновременно*/ if (!flag && !sens2) { digitalWrite(led1Pin, led1 = HIGH ); digitalWrite(led2Pin, led2 = HIGH ); } /*если сработал только один датчик то включить реле 3,4.*/ if (flag && !sens2) { digitalWrite(led3Pin, led3 = HIGH ); digitalWrite(led4Pin, led4 = HIGH ); } } /**/"Даже немножечко чайная ложечка это уже хорошо":)
После сработки датчика нужно 1-2 секунды "подождать" сигнал от считывателя. Пока это так, а там методом тыка:).
работа устройсва такова:
Карточка системы доступа падает в контейнер. Друг напротив друга расположены датчик припятствия и считыватель карточки. Датчик срабатывает сразу, считыватель пока отдаст команду своему контроллеру, пока прийдет ответ от реле проходит время. Если сработать все по отдельности алгоритм работает.
Ну я показал как делать задержку. flag срабатывает с задержкой в 1 сек.
/**/ const int sens1Pin =/*пин*/2;// считыватель const unsigned long time1sec = 1000; unsigned long past; bool flag = 1; const int sens2Pin =/*пин*/3;// датчик const int led1Pin =/*пин*/ 6; const int led2Pin =/*пин*/ 12; const int led3Pin =/*пин*/ 5; const int led4Pin =/*пин*/ 4; //------main()----------------------------- void setup() { pinMode(sens1Pin, INPUT_PULLUP); past = millis(); pinMode(sens2Pin, INPUT_PULLUP); pinMode(led1Pin, OUTPUT); digitalWrite(led1Pin, LOW ); pinMode(led2Pin, OUTPUT); digitalWrite(led2Pin, LOW ); pinMode(led3Pin, OUTPUT); digitalWrite(led3Pin, LOW ); pinMode(led4Pin, OUTPUT); digitalWrite(led4Pin, LOW ); } void loop() { bool sens1 = digitalRead(sens1Pin ); // считыватель if (flag && !sens1 && millis() - past >= time1sec) { flag = 0; } bool sens2 = digitalRead(sens2Pin ); // датчик /*Включение реле 1,2 при сработке двух датчиков одновременно*/ if (!flag && !sens2) { digitalWrite(led1Pin, HIGH ); digitalWrite(led2Pin, HIGH ); } /*если сработал только один датчик то включить реле 3,4.*/ if (flag && !sens2) { digitalWrite(led3Pin, HIGH ); digitalWrite(led4Pin, HIGH ); } } /**/Датчик уже включился, а считыватель опаздывает. Поэтому не проходит первое условие. Нужна задержка после срабатывания датчика. Чтобы считыватель успевал подавать сигнал со своего реле.
Сейчас нет завершения команды? Все включилось и все
А флаг один в программе может быть или несколько.
Программа которую Вы любезно предоставили не завершается, все реле включаются и всё.
нет заверщающего алгоритма.
Или я что то не так делаю.
Вы получили тот алгоритм который сами и составили. И если программа не делает что-то завершающее, то потому что это завершающее вы и не составили.
Или вы думаете, что если задача выполнится, то МК остановится и обесточится.
Просто на моей программе все после отработки алгоритма переходит в начальные установки.
А Ваш скопировал все срабатывает, но не выключаеся.
А без флага никак не добавить задержку?
Добрый день, не могу понять что ни так. Нормально работает или первое условие или второе. Первое если выключаю второе условие, а если включаю то работает только второе условие. const int sens1Pin =/*пин*/2;// считыватель const unsigned long time1sec = 1000; unsigned long past; bool flag = 1; const int sens2Pin =/*пин*/3;// датчик const int led1Pin =/*пин*/ 6;// зеленый диод const int led2Pin =/*пин*/ 12;// красный диод const int led3Pin =/*пин*/ 5;// магнит const int led4Pin =/*пин*/ 4;// турникет bool led1, led2, led3, led4; //------main()----------------------------- void setup() { pinMode(sens1Pin, INPUT_PULLUP); past = millis(); pinMode(sens2Pin, INPUT_PULLUP); pinMode(led1Pin, OUTPUT); digitalWrite(led1Pin, led1 = LOW ); pinMode(led2Pin, OUTPUT); digitalWrite(led2Pin, led2 = LOW ); pinMode(led3Pin, OUTPUT); digitalWrite(led3Pin, led3 = LOW ); pinMode(led4Pin, OUTPUT); digitalWrite(led4Pin, led4 = LOW ); } void loop() { bool sens1 = digitalRead(sens1Pin ); // считыватель if (flag && !sens1 && millis() - past >= time1sec) { flag = 0; } bool sens2 = digitalRead(sens2Pin ); // датчик /*Включение реле 1,2 при сработке двух датчиков одновременно*/ if (!flag && !sens2) { digitalWrite(led1Pin, led1 = HIGH ); digitalWrite(led4Pin, led4 = HIGH ); delay(1000); digitalWrite(led3Pin, led3 = HIGH ); //flag=0; } else if (flag && !sens2) { delay(5000); digitalWrite( led2Pin, HIGH ); digitalWrite( led3Pin, HIGH ); delay(2000); } if( sens2 == HIGH) { digitalWrite(led1Pin, LOW ); digitalWrite(led2Pin, LOW ); digitalWrite(led3Pin, LOW ); digitalWrite(led4Pin, LOW ); } } /**/в скетче 4 условия - которое из них первое, а какое второе?
И еще - не уверен. что это корень проблемы, но как минимум в условии
(flag && !sens1 && millis() - past >= time1sec)
надо бы расставить скобки вокпуг операндов
[code] 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 (v1 == LOW)// датчик в сработке { if (v == LOW&&v1 == LOW)//срабатывает считыватель { digitalWrite( led_pin6, HIGH ); digitalWrite( led_pin4, HIGH ); delay(1000); digitalWrite( led_pin5, HIGH ); //delay(2000); //flag=1; } } else if (v1 == LOW)// датчик в сработке { if( v1 == LOW&&v != LOW)// нет сигнала от считывателя { delay(5000); digitalWrite( led_pin12, HIGH ); digitalWrite( led_pin5, HIGH ); delay(2000); //flag=1; } } //} if( v == HIGH) { digitalWrite( led_pin5, LOW ); digitalWrite( led_pin6, LOW ); digitalWrite( led_pin12, LOW ); digitalWrite( led_pin4, LOW ); } } [/code]В такой компановке первые два условия отрабатывают четко. Но если нет сигнала от считывателя условия 4 и 5 не срабатывают.
Помогите уже голова пухнет.
А кодом можно:)
/**/ unsigned long mill; //----------------------------- const byte Led1pin =/*пин*/2; const byte Led2pin =/*пин*/3; const byte Sens1pin =/*пин*/4; const byte Sens2pin =/*пин*/5; enum {sReady, sFire, sBang, sUp, sDown}; byte flag; unsigned long past; void DoReady() { digitalWrite(Led1pin, LOW); digitalWrite(Led2pin, LOW); } void DoUp() { digitalWrite(Led1pin, HIGH); } void DoDown() { digitalWrite(Led2pin, HIGH); } //------main----------------------- void setup() { pinMode(Led1pin, OUTPUT); pinMode(Led2pin, OUTPUT); pinMode(Sens1pin, INPUT); pinMode(Sens2pin, INPUT); flag = sReady; DoReady(); } void loop() { mill = millis(); bool Sens1 = digitalRead(Sens1pin); bool Sens2 = digitalRead(Sens2pin); if (flag == sReady && Sens1 == LOW) { flag = sFire; past = mill; } if (flag == sFire && mill - past >= 2000) { if ( Sens2 == HIGH) { flag = sUp; past = mill; DoUp(); } else { flag = sDown; past = mill; DoDown(); } } if (flag == sUp && mill - past >= 20000) { flag = sReady; DoReady(); } if (flag == sDown && mill - past >= 20000) { flag = sReady; DoReady(); } } /*Скетч использует 1334 байт (4%) памяти устройства. Всего доступно 30720 байт. Глобальные переменные используют 18 байт (0%) динамической памяти, оставляя 2030 байт для локальных переменных. Максимум: 2048 байт. */Что совсем не то.
Устройство через две секунды включает само реле на 20 сек и все.
Извините что вмешиваюсь. Я не совсем понял задачу поэтому выкладываю два варианта Вашего последнего кода попробуйте
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;// турникет bool datchik; bool kluch; bool fl_kluch; 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() { datchik = digitalRead( prx_pin3 ); // датчик kluch = digitalRead( prx_pin2 ); // считыватель if (datchik == LOW)// датчик в сработке { if (kluch == LOW) { //срабатывает считыватель digitalWrite( led_pin6, HIGH ); digitalWrite( led_pin4, HIGH ); delay(1000); digitalWrite( led_pin5, HIGH ); fl_kluch = 1; } else { //считыватель в не срабатке if (fl_kluch) { delay(5000); digitalWrite( led_pin12, HIGH ); digitalWrite( led_pin5, HIGH ); delay(2000); digitalWrite( led_pin5, LOW ); digitalWrite( led_pin6, LOW ); digitalWrite( led_pin12, LOW ); digitalWrite( led_pin4, LOW ); fl_kluch = 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;// турникет bool datchik; bool kluch; bool fl_kluch; bool flag; 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() { datchik = digitalRead( prx_pin3 ); // датчик kluch = digitalRead( prx_pin2 ); // считыватель if (datchik == LOW) flag = 1; // датчик в сработке if (flag) { if (kluch == LOW) { //срабатывает считыватель digitalWrite( led_pin6, HIGH ); digitalWrite( led_pin4, HIGH ); delay(1000); digitalWrite( led_pin5, HIGH ); fl_kluch = 1; flag = 0; } } else { //считыватель в не срабатке if (fl_kluch) { delay(5000); digitalWrite( led_pin12, HIGH ); digitalWrite( led_pin5, HIGH ); delay(2000); digitalWrite( led_pin5, LOW ); digitalWrite( led_pin6, LOW ); digitalWrite( led_pin12, LOW ); digitalWrite( led_pin4, LOW ); fl_kluch = 0; } } }Добрый вечер.
Работа устройства такова:
Карточка системы доступа падает в контейнер. Друг напротив друга расположены датчик припятствия и считыватель карточки. Датчик срабатывает сразу, считыватель пока отдаст команду своему контроллеру, пока прийдет ответ от реле проходит время. Если сработать все по отдельности алгоритм работает.
Если падает карточка прописанная в контроллере имеем два входящих сигнала. Срабатывают три реле.
Этот алгоритм я сделал он работает.
Но если падает карточка не прописаная, то срабатывает только датчик припятсвия и устройство должно включить два реле.
Этот алгорит не проход. А если и проходит то без первого.
Датчик припятсвия работает через реле, т.е. вход D3 коротится на землю.
Ваш код первый алгорит делает правильно, а потом просто включает остальное реле и все.
sergeidd2018. Человек 1- может пройти без карточки 2- может пройти по неправильной карточке 3 может пройти по правильной карточке .4 человек тупо торчать перед датчиком препятствия. Система после этого покажет эти 4 варианта. Но сколько надо времени что бы система вернулась в состояние дежурства??
Вариатна только два.
Это устройство забирает карту у человека.
Если она правильная (прописанная в контроллере), то турникет откроется. Карточка падает в корзину, загарается зеленая лампа.
Если карточка не правильная (или вообще проездной от метро:) ), то карточка просто падает в корзину и горит красная лампочка.
У меня сейчас я бросаю подряд почти сразу (это при правильной карте). То что на данный момент работает.
Получается сейчас программа не отрабатывает else.
Уточнение:
1- сработал датчик - ждем правильность ключа и если ключ правильный срабатывает 3 реле(это вроде работает)
2-сработал датчик - ждем правильность ключа !сколько ждем? и если ключ не правильный сработает 2 реле.
Все упираетсе в вопрос сколько ждем?
Первый датчик (припятсвия срабатывает всегда)
1. Сработал датчик припятсвия и есть сигнал от считывателя - срабатывают 3 реле.
2. Сработал датчик припятсвия, но нет сигнала от считывателя - срабатывают 2 реле.
В программе я поставил 5 секунд после сработки датчика припятствия сбросить карточку в корзину.
Эта часть тоже работает, но отдельно от первой:)
[code] 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 == LOW)//срабатывает считыватель { digitalWrite( led_pin6, HIGH ); digitalWrite( led_pin4, HIGH ); delay(1000); digitalWrite( led_pin5, HIGH ); } else if(v1 == LOW&&v != LOW)// нет сигнала от считывателя { delay(5000); digitalWrite( led_pin12, HIGH ); digitalWrite( led_pin5, HIGH ); delay(2000); } if( v == HIGH) { digitalWrite( led_pin5, LOW ); digitalWrite( led_pin6, LOW ); digitalWrite( led_pin12, LOW ); digitalWrite( led_pin4, LOW ); } }Попробуйте так, я поставил секунду можете добавить
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;// турникет bool datchik; bool kluch; bool fl_kluch; bool flag; uint32_t pausa; 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() { datchik = digitalRead( prx_pin3 ); // датчик kluch = digitalRead( prx_pin2 ); // считыватель if (datchik == LOW) {// датчик в сработке flag = 1; pausa = millis(); } if (flag) { if (kluch == LOW) { //срабатывает считыватель digitalWrite( led_pin6, HIGH ); digitalWrite( led_pin4, HIGH ); delay(1000); digitalWrite( led_pin5, HIGH ); fl_kluch = 1; // flag = 0; } } if (flag && millis() - pausa >= 1000) { if (fl_kluch) { digitalWrite( led_pin5, LOW ); digitalWrite( led_pin6, LOW ); digitalWrite( led_pin12, LOW ); digitalWrite( led_pin4, LOW ); fl_kluch = 0; } else { //считыватель в не срабатке // delay(5000); digitalWrite( led_pin12, HIGH ); digitalWrite( led_pin5, HIGH ); //delay(2000); } flag = 0; } }Этот код работает все как нужно. Единстве датчик припятсвия в первом алгоритме срабатывает очень быстро и переходит ко второму алгоритму не успев дождаться сигнала от считывателя.
А если дать сигнал от считывателя, а потом закрыть датчик припятсвия все работает как нужно.
Имется ввиду мой код
Попрубуйте код из 34 поста
Вопрос 1, а почему реле после отработки алгоритма не преходят в начальное сотояние?
И работа второй части не правильна. Я бросаю карточку и датчик переходит в состояние LOW и должно произойти действие, а тут пока не убрать карточку с датчика действие не проходит.
Посмотрите внимательно 36 строка (// 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;// турникет bool datchik; bool kluch; bool fl_kluch; bool flag; uint32_t pausa; 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() { datchik = digitalRead( prx_pin3 ); // датчик kluch = digitalRead( prx_pin2 ); // считыватель if (datchik == LOW) {// датчик в сработке flag = 1; pausa = millis(); } if (flag) { if (kluch == LOW) { //срабатывает считыватель digitalWrite( led_pin6, HIGH ); digitalWrite( led_pin4, HIGH ); delay(1000); digitalWrite( led_pin5, HIGH ); fl_kluch = 1; //flag = 0; } } if (flag && millis() - pausa >= 1000) { if (fl_kluch) { digitalWrite( led_pin5, LOW ); digitalWrite( led_pin6, LOW ); digitalWrite( led_pin12, LOW ); digitalWrite( led_pin4, LOW ); fl_kluch = 0; } else { //считыватель в не срабатке // delay(5000); digitalWrite( led_pin12, HIGH ); digitalWrite( led_pin5, HIGH ); delay(2000); digitalWrite( led_pin5, LOW ); digitalWrite( led_pin6, LOW ); digitalWrite( led_pin12, LOW ); digitalWrite( led_pin4, LOW ); } flag = 0; } }Все уже возвращается.
Вот только работа второй части не правильна. Я бросаю карточку и датчик переходит в состояние LOW и должно произойти действие, а тут пока не убрать карточку с датчика действие не проходит.
Проверяем
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;// турникет bool datchik; bool kluch; //bool fl_kluch; bool flag; uint32_t pausa; void OF(){ digitalWrite( led_pin5, LOW ); digitalWrite( led_pin6, LOW ); digitalWrite( led_pin12, LOW ); digitalWrite( led_pin4, LOW ); flag = 0; } 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() { kluch = digitalRead( prx_pin2 ); // считыватель datchik = digitalRead( prx_pin3 ); // датчик if (!flag && datchik == LOW) {// датчик в сработке flag = 1; pausa = millis(); } if (flag) { if (!kluch) { //срабатывает считыватель digitalWrite( led_pin6, HIGH ); digitalWrite( led_pin4, HIGH ); delay(1000); digitalWrite( led_pin5, HIGH ); delay(1000); OF(); } if (kluch && millis() - pausa >= 1000){ //считыватель в не срабатке digitalWrite( led_pin12, HIGH ); digitalWrite( led_pin5, HIGH ); delay(2000); OF(); } } }Спасибо. работает. Задежку только добавил в 5 секунд когда считыватель не в сработке.