ARDUINO UNO RFIS RIDER SERVO. DOOR LOCK OPEN SISTEM
- Войдите на сайт для отправки комментариев
Чт, 24/08/2017 - 08:48
sdrastvite. druzia mne nada pomash. pajalusta pamagite.
sdrastvite. druzia mne nada pomash. pajalusta pamagite.
sdrastvite. druzia mne nada pomash. pajalusta pamagite.
оставайте на месте - бригада спасателей уже выехала.
interesna budit :)
xachu dobite.avit dva sveda dioda. krasni i zelioni. a takje knopku (button) shtob dver iz nutri otkrit. pamag
xachu dobite.avit dva sveda dioda. krasni i zelioni. a takje knopku (button) shtob dver iz nutri otkrit. pamag
я не запрещал хотеть добавлять светодиоды.
:D iumor otlichni. no kak eta pravilna sdelat. diod skolka omav nada na led i na button?
:D iumor otlichni. no kak eta pravilna sdelat. diod skolka omav nada na led i na button?
Ищу исполнителя
sdrastvite. druzia mne nada pomash. pajalusta pamagite.
День добрый, сфорумулируйте полноценную мысль, из ваших обрывков ничего не понятно. По этой тематике есть готовые решения.
Если без MFRC522 :) то так
/**/ unsigned long mill;//переменная millis() //-------Cl_Lock--------------------------------------- // класс Cl_Lock дверной замок - серво,геркон в дверях,светодиод индикация #include <Servo.h> const int servo_OFF = 0; // серва закрыта const int servo_ON = 90; // серва открыта class Cl_Lock { const byte servoPin; const byte gerconPin; const byte ledPin; unsigned long time, past; Servo myservo; bool doorOpen;// 1 дверь открыта public: /*конструктор Cl_Lock описание создать объект ввод _servoPin: нога на серве _gerconPin: нога на герконе вывод нет */ Cl_Lock(byte _servoPin, byte _gerconPin, byte _ledPin, unsigned long _time) : servoPin(_servoPin), gerconPin(_gerconPin), ledPin(_ledPin), time(_time) {} /*функция setup описание иницилизация ввод нет вывод нет */ void setup() { pinMode(ledPin, OUTPUT); digitalWrite(ledPin, 0); myservo.attach(servoPin); pinMode(gerconPin, INPUT_PULLUP); if (!digitalRead(gerconPin))myservo.write(servo_OFF); doorOpen = 1; } /*функция loop описание для нормальной работы вставить в тело loop() ввод нет вывод нет */ void loop() { if (doorOpen && mill - past >= time && !digitalRead(gerconPin)) { // убеждаемся что дверь закрыта и подошло время закрывать на замок doorOpen = 0; digitalWrite(ledPin, 1); myservo.write(servo_OFF); // закрываем } } /*функция open описание открыть дверь ввод нет вывод нет */ void open() { doorOpen = 1; past = mill; digitalWrite(ledPin, 0); myservo.write(servo_ON); } }; //---------Cl_Btn------------------------------------------------- // класс кнопка class Cl_Btn { const byte pin; void (*Do)(); bool btn, oldBtn = 1; bool bounce = 0; unsigned long past; public: /*конструктор Cl_Btn описание создать объект ввод _pin: нога _inv: инверсия выхода вывод нет */ Cl_Btn(byte _pin, void (_Do)()): pin(_pin), Do(_Do) {} /*функция setup описание иницилизация ввод нет вывод нет */ void setup() { pinMode(pin, INPUT); btn = digitalRead(pin); } /*функция loop описание для нормальной работы вставить в тело loop() ввод нет вывод нет */ void loop() { bool newBtn = digitalRead(pin); if (bounce && newBtn != btn) { bounce = 1; } if (!bounce && mill - past >= 10) { past = mill; bounce = 0; oldBtn = btn; btn = newBtn; if (!btn && oldBtn) (*Do)(); } } }; //-----Компоновка----------------------------------------- const unsigned time_2s = 2000; Cl_Lock Lock(/*пин на серво*/5,/*пин на герконе*/3,/*пин индик*/13,/*врямя*/time_2s); void Do_Btn() { Lock.open(); } Cl_Btn Btn(/*пин*/2,/*обработчик*/Do_Btn); //-----main()----------------------------------------- void setup() { Lock.setup(); Btn.setup(); } void loop() { mill = millis(); Lock.loop(); Btn.loop(); } /*Скетч использует 2572 байт (7%) памяти устройства. Всего доступно 32256 байт. Глобальные переменные используют 76 байт (3%) динамической памяти, оставляя 1972 байт для локальных переменных. Максимум: 2048 байт. */xarasho ia sivodnia vsio xarasho sdelai na fotkax abisniu i pakaju. spasiba za ranie
/* светодиод -> 8 (Led_pin) 0 горит/ 1 нет GND -> GND серва -> 5 геркон -> 3 0 дверь закрыта / 1 нет кнопка -> 2 0 нажата/ 1 нет GND -> GND RFID_RC522 RST -> 9 (RST_pin) SDA(SS)-> 10 (SDA_pin) MOSI -> 11 (MOSI_pin) MISO -> 12 (MISO_pin) SCK -> 13 (SCK_pin) 3,3В -> 3,3В GND -> GND */ unsigned long mill;//переменная millis() //-------Cl_Lock--------------------------------------- // класс Cl_Lock дверной замок - серво,геркон в дверях,светодиод индикация #include <Servo.h> const int servo_OFF = 0; // серва закрыта const int servo_ON = 90; // серва открыта class Cl_Lock { const byte servoPin; const byte gerconPin; const byte ledPin; unsigned long time, past; Servo myservo; bool doorOpen;// 1 дверь открыта public: /*конструктор Cl_Lock описание создать объект ввод _servoPin: нога на серве _gerconPin: нога на герконе вывод нет */ Cl_Lock(byte _servoPin, byte _gerconPin, byte _ledPin, unsigned long _time) : servoPin(_servoPin), gerconPin(_gerconPin), ledPin(_ledPin), time(_time) {} /*функция setup описание иницилизация ввод нет вывод нет */ void setup() { pinMode(ledPin, OUTPUT); digitalWrite(ledPin, 0); myservo.attach(servoPin); pinMode(gerconPin, INPUT_PULLUP); if (!digitalRead(gerconPin))myservo.write(servo_OFF); doorOpen = 1; } /*функция loop описание для нормальной работы вставить в тело loop() ввод нет вывод нет */ void loop() { if (doorOpen && mill - past >= time && !digitalRead(gerconPin)) { // убеждаемся что дверь закрыта и подошло время закрывать на замок doorOpen = 0; digitalWrite(ledPin, 1); myservo.write(servo_OFF); // закрываем } } /*функция open описание открыть дверь ввод нет вывод нет */ void open() { doorOpen = 1; past = mill; digitalWrite(ledPin, 0); myservo.write(servo_ON); } }; //---------Cl_Btn------------------------------------------------- // класс кнопка class Cl_Btn { const byte pin; void (*Do)(); bool btn, oldBtn = 1; bool bounce = 0; unsigned long past; public: /*конструктор Cl_Btn описание создать объект ввод _pin: нога кнопки _Do: обработчик кнопки вывод нет */ Cl_Btn(byte _pin, void (_Do)()): pin(_pin), Do(_Do) {} /*функция setup описание иницилизация ввод нет вывод нет */ void setup() { pinMode(pin, INPUT); btn = digitalRead(pin); } /*функция loop описание для нормальной работы вставить в тело loop() ввод нет вывод нет */ void loop() { bool newBtn = digitalRead(pin); if (bounce && newBtn != btn) { bounce = 1; } if (!bounce && mill - past >= 10) { past = mill; bounce = 0; oldBtn = btn; btn = newBtn; if (!btn && oldBtn) (*Do)(); } } }; //---------Cl_MFRC522------------------------------------------------- // класс MFRC522 кнопка на RFID #include <SPI.h> #include <MFRC522.h> struct sCard { struct sCard *next; unsigned long Card; }; class Cl_MFRC522 { MFRC522 rfid; void (*Do)(); // обработчик кнопки unsigned long past; struct sCard *start = NULL; public: /*конструктор Cl_Btn описание создать объект ввод sdaPin: нога SDA rstPin: нога RST _Do: обработчик кнопки RFID вывод нет */ Cl_MFRC522(byte sdaPin, byte rstPin, void (_Do)()) : rfid(sdaPin, rstPin), Do(_Do) {} /*функция setup описание иницилизация ввод нет вывод нет */ void setup() { SPI.begin(); rfid.PCD_Init(); } /*функция loop описание для нормальной работы вставить в тело loop() ввод нет вывод нет */ void loop() { if (mill - past >= 1000) { past = mill; if ( rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()) { uint32_t Card = ((rfid.uid.uidByte[0] * 0x100 + rfid.uid.uidByte[1]) * 0x100 + rfid.uid.uidByte[2]) * 0x100 + rfid.uid.uidByte[3]; Serial.println(Card); for (struct sCard *ii = start; ii != NULL; ii = ii->next) { if (Card == ii->Card) (*Do)(); } } } } /*функция AddCard описание добавить новую карту ввод _Card:код новой карты вывод нет */ void AddCard(uint32_t _Card) { struct sCard *newCard = new struct sCard; newCard->next = start; newCard->Card = _Card; start = newCard; } }; //-----Компоновка----------------------------------------- const unsigned time_3s = 3000; Cl_Lock Lock(/*пин на серво*/5,/*пин на герконе*/3,/*пин индик*/8,/*врямя*/time_3s); void Do_Btn() { Lock.open(); } Cl_Btn Btn(/*пин*/2,/*обработчик*/Do_Btn); Cl_MFRC522 MFRC522(/*пин SDA*/10,/*пин RST*/9,/*обработчик*/Do_Btn); //-----main()----------------------------------------- void setup() { Serial.begin(9600); Lock.setup(); Btn.setup(); MFRC522.setup(); MFRC522.AddCard(4294966803);// добавить карту 4294966803 MFRC522.AddCard(14805) ;// добавить карту 14805 } void loop() { mill = millis(); Lock.loop(); Btn.loop(); MFRC522.loop(); } /*Скетч использует 7062 байт (21%) памяти устройства. Всего доступно 32256 байт. Глобальные переменные используют 298 байт (14%) динамической памяти, оставляя 1750 байт для локальных переменных. Максимум: 2048 байт. */У меня это работает. Вот только вставлять надо код карточки , который программа кидает в Serial