Суть вопроса, есть считыватель карточек, arduino nano и relay shield, при считывании карты если карта валидна происходит замыкание реле на 30 секунд, помогите сделать так, что-бы при повторном считывании карты в течении этих 30 секунд замыкание реле можно было отменить вот код который сейчас работает с delay() Код (C++): #include <Wiegand.h> WIEGAND wg; void setup() { wg.begin(); pinMode(12, OUTPUT); digitalWrite(12,HIGH); } void loop() { if(wg.available()) { if(wg.getCode() == 1078628) { digitalWrite(12,LOW); delay(30000); digitalWrite(12 ,HIGH); } } }
Не знаю вот впопыхах накидал код, который в случае второго появления маячка через 30 сек отключал реле: Код (C++): unsigned long currentTime;//переменные для времени unsigned long loopTime; #include <Wiegand.h> WIEGAND wg; void setup() { wg.begin(); pinMode(12, OUTPUT); digitalWrite(12,HIGH); currentTime = millis(); // считываем время loopTime = currentTime; } void loop() { if(wg.available()) { if(wg.getCode() == 1078628) { for (int i = 0; i<2; i++) { if (i = 0) { digitalWrite(12,LOW); delay(30000); digitalWrite(12 ,HIGH); } if (i == 1) { currentTime = millis(); // считываем время if(currentTime >= (loopTime + 30000))//ставим условие: если через 3 мин свет включен то.. { digitalWrite (12, LOW); } } } } } }
Спасибо это не совсем то, мне нужно при повторном считывании карты не через 30 секунд отключить реле, а мне нужно прервать работу реле в течении 30 секунд его работы Опишу нагляднее, приложили карту реле замкнулось на 30 секунд, образно лампочка загорелась и через 30 секунд погаснет, но мне нужна возможность погасить лампочку раньше путем повторного считывания карты
Код (C++): #include <Wiegand.h> WIEGAND wg; void setup() { wg.begin(); pinMode(12, OUTPUT); digitalWrite(12,HIGH); } void loop() { if(wg.available()) { if(wg.getCode() == 1078628) { for(int i = 0; i<2; i++) { if (i == 0) { digitalWrite(12,LOW); delay(30000); digitalWrite(12 ,HIGH); if (i ==1) { digitalWrite(12, LOW) } } } } } }
спасибо добрался до компьютера, не работает, ну как не работает реле включается но прервать его работу невозможно
Код (C++): #include <Wiegand.h> WIEGAND wg; void setup() { wg.begin(); pinMode(12, OUTPUT); digitalWrite(12,HIGH); } void loop() { if(wg.available()) { if(wg.getCode() == 1078628) { digitalWrite(12,LOW); unsigned long timer = millis(); while (millis()-timer <30000) { if(wg.available()) { if(wg.getCode() == 1078628) { break; } } } digitalWrite(12 ,HIGH); } } } Это не вдаваясь в то как работает библиотека и что значит "считывает карточку", просто скопировал вашу версию считывания. Надеюсь, идея понятна.