RFID +реле. вкл/выкл
- Войдите на сайт для отправки комментариев
Втр, 31/10/2017 - 01:38
Подскажите пожалуйста, как сделать чтоб, реле постоянно включенно подносим метку (убираем метку) реле выключенно и остается в таком состоянии пока не поднести метку еще раз.
что типо вкл/выкл без таймера.
#include <SPI.h> #include <MFRC522.h> #define NEW_UID {0xDE, 0xAD, 0xBE, 0xEF} #define SS_PIN 10 #define RST_PIN 9 #define DD 4 // Pin D4 --> выход на реле #define ZZ 5 // Pin D4 --> выход на активный зумер #define REL DD // REL - открывает дверь MFRC522 mfrc522(SS_PIN, RST_PIN); // MFRC522 MFRC522::MIFARE_Key key; // готовим массив карт с флагами доступа 0-нет доступа, 1-естьдоступ (спец пропуска) struct Cards { String id; int flag; }; struct Cards cards[8] ={{"22455977",1},{"5438698",1},{"16371451",0},{"20371287",1},{"4067496491",1},{"964301100",1},{"2524519168",1},{"1645645646",1}}; boolean work=false; unsigned int CUR_TIME; unsigned int ALL_TIME; void setup(void) { while (!Serial); // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4) SPI.begin(); // Init SPI bus mfrc522.PCD_Init(); // Init MFRC522 card pinMode(4,OUTPUT); digitalWrite(4,HIGH); pinMode(5,OUTPUT); digitalWrite(5,LOW); Serial.begin(115200); Serial.print("setup begin\r\n"); } void loop(void) { ALL_TIME=(millis()/1000); if ((ALL_TIME - CUR_TIME)>=5){ work=true; work=false; CUR_TIME=ALL_TIME; } if (work==false){ work=true; //------------------------РАБОТАЕМ СО СЧИТЫВАТЕЛЕМ КАРТ---------------------------- // Look for new cards, and select one if present if ( ! mfrc522.PICC_IsNewCardPresent() || ! mfrc522.PICC_ReadCardSerial() ) { delay(50); work=false; return; } String UID = dump_byte_array(mfrc522.uid.uidByte, mfrc522.uid.size); // mfrc522.PICC_HaltA(); Serial.print(F("Card UID: ")); Serial.print(UID); Serial.println(); //----------------------------------открытие дверей по спец пропускам-------------------------------- if (UID!=""){ for (int i = 0; i <= 7; i++) { if (cards[i].id==UID && cards[i].flag==1) { DoorOpen(UID); work=false; return; } } } } work=false; } //это конец LOOPа //------------------------выуживаем UID из карты как числовое значение---------------------------- String dump_byte_array(byte *buffer, byte bufferSize) { // String s; unsigned long uiddec = 0; // unsigned long temp; char uid[8]; for (byte m = (bufferSize > 4 ? (bufferSize - 4) : 0); m < bufferSize; m++) { //берем только последние 4 байта и переводим в десятичную систему unsigned long p = 1; for(int k = 0; k < bufferSize-m-1; k++) { p = p*256; } uiddec += p*buffer[m]; // s = s + (buffer[m] < 0x10 ? "0" : ""); // s = s + String(buffer[m], HEX); } // s.toCharArray(uid, 8); return String(uiddec); } //-----------открытие двери void DoorOpen(String uid){ Serial.print(F("DOOR-OPEN!")); Serial.println(); digitalWrite( REL, LOW ); for (int i = 0; i <= 6; i++) { digitalWrite( ZZ, HIGH ); delay(250);digitalWrite( ZZ, LOW );delay(250); digitalWrite( ZZ, HIGH ); delay(250);digitalWrite( ZZ, LOW );delay(250); } digitalWrite( REL, HIGH ); }
Ну как, как... Заведите булеву переменную tipo_vkl = LOW и инвертируйте ее каждый раз, когда правильная карта опознана. Затем - можно тупо сделать digitalWrite( REL, tipo_vkl );
А можете помочь исправив код как нужно и где ?! был бы очень благодарен. я только учусь и не совсем понимаю . Спасибо
Я бы тоже был бы очень благодарен, если бы вы мне ремонт в квартире доделали. А то я всё скетчи тут правлю и руки совсе не доходят! Сделаете?!
Я Вас понял. Спасибо.
Я бы тоже был бы очень благодарен, если бы вы мне ремонт в квартире доделали. А то я всё скетчи тут правлю и руки совсе не доходят! Сделаете?!
+5
Я бы тоже был бы очень благодарен, если бы вы мне ремонт в квартире доделали. А то я всё скетчи тут правлю и руки совсе не доходят! Сделаете?!
+5
в очередь!
Кто тут крайний на бесплатный ремонт своей квартиры?
Я за вами буду. Соседка сверху, сучка крашена, затопила :(
Я вроде не просил написать мне скетч заново. я попросил внести изменения если это трудно ДЛЯ ВАС МОЖНО НЕ ПИСАТЬ КОММЕНТЫ.( особенно тем людям, которые раздули за ремонт.) и ты если sadman41 умеешь , но не хочешь помочь, то не нужно писать комментарии зарабатывая баллы. Еше раз Спасибо
PS: здесь много людей помогали.
a2kuz не заводись. Ну пошутили немного, что с того. Баллы постами тут не зарабатывают, одна радость - постебаться над кем-то :)
b707, Я не против но я вроде не тут написал а прошу помощи у людей которые знают. тем более для многих тут это пустяк.
Ну так Вам же дал, тот же sadman41, полный ответ на Ваш вопрос в #1 !!!
[Цитата = a2kuz]
Подскажите пожалуйста, как сделать чтоб, реле постоянно включенно подносим метку (убираем метку) реле выключено и остается в таком состоянии пока не поднести метку еще раз.
что типо вкл / выкл без таймера.
[/ Цитата]
както так
называется найди три отличия
пины не забуть поменять на свои
Спасибо добрый человек, сегодня буду пробывать.
вот тоже переделываю скетч дмитрия осипова, мне этот скетч более нравиться, с возможностью записи новых карточек без перезаливки скетча. надеюсь он не обидется
есть мнение, что код отвратительный и хвастать им не стоит
я рабочий код дмитрия скинул, у меня работает. о чем дальше
извиняюсь за грубость, видать после пива сидел
коды коментировать не компетентен, новичек. но мне понравился данный девайс, залил в про мини 168 3.3 и забыл. карты перезаписываются при неоходимости и сохраняются в еепром. без перепрошивки без программатора. собрал и забыл. почти. исполнительное реле не могу собрать корректно. после 20 30 цикла летят ключи открывающие реле. как нидудь разберу, скорее всего защитный диод наоборот припоял