GIỚI THIỆU LÝ THUYẾT
Giới thiệu khóa điện tử
Khóa điện tử đã trở thành lựa chọn phổ biến cho người dùng Việt trong những năm gần đây nhờ vào thiết kế sang trọng, hiện đại và tính tiện lợi Thiết bị này đi kèm với nhiều tính năng thông minh, giúp đảm bảo an toàn tối đa cho ngôi nhà của bạn.
Lợi ích khi lắp đặt khóa cửa thông minh cho ngôi nhà
Khóa cửa điện tử là thiết bị an toàn hiện đại, cho phép mở cửa dễ dàng chỉ với mã số, vân tay, thẻ từ hoặc nút bấm Khi ra ngoài, bạn chỉ cần nhấn nút exit và cửa sẽ tự động khóa khi đóng lại, giúp tiết kiệm thời gian tìm chìa khóa Ngoài việc nâng cao an toàn cho ngôi nhà, khóa cửa điện tử còn mang đến vẻ đẹp sang trọng và tinh tế, với thiết kế cuốn hút Các nhà sản xuất chú trọng không chỉ vào tính năng mà còn cả thẩm mỹ của sản phẩm.
Khóa điện tử cao cấp mang lại sự an tâm vượt trội so với ổ khóa cơ truyền thống nhờ vào các tính năng bảo mật tiên tiến Chúng có khả năng báo động bằng âm thanh khi bị tác động mạnh, chống sốc điện để ngăn chặn kẻ xấu, tự động vô hiệu hóa sau nhiều lần nhập sai mật khẩu và cho phép người dùng nhập thêm dãy số ngẫu nhiên trước hoặc sau mật khẩu để tránh nguy cơ bị nhìn lén.
Còn nếu bạn là người hay quên, khóa điện tử sẽ báo động khi chốt chưa vào đúng vị trí, nhắc nhở bạn khóa cửa trước khi rời nhà
Khi nâng cao mức độ bảo mật, rủi ro về an ninh gia đình giảm đáng kể, giúp khắc phục tình trạng trộm cắp và xâm nhập Hệ thống khóa cửa thông minh tại các căn hộ mang lại không gian sống an toàn hơn, giúp các thành viên trong gia đình yên tâm hơn Họ không cần lo lắng về việc mất chìa khóa, vì chỉ cần sử dụng vân tay, thẻ từ hoặc mật khẩu để mở cửa dễ dàng.
Khóa thông minh cho phép mở và khóa cửa từ xa, đồng thời tự động gửi tin nhắn và báo cáo lịch sử ra vào Điều này giúp bạn dễ dàng theo dõi lịch ra vào của các thành viên trong gia đình Sản phẩm này là giải pháp tối ưu cho chủ nhà trọ và homestay, giúp bảo vệ tài sản và quản lý hiệu quả hơn.
Blynk
Đây là một nền tảng IoT được ưa thích bởi hơn 500.000 kỹ sư trong lĩnh vực
IoT trên toàn thể giới
Có ba thành phần chính trong nền tảng Blynk:
Blynk App - cho phép tạo giao diện cho sản phẩm của bạn bằng cách kéo thả các widget khác nhau mà nhà cung cấp đã thiết kế sẵn
Blynk Server là nền tảng xử lý dữ liệu trung tâm giữa điện thoại, máy tính bảng và phần cứng Người dùng có thể lựa chọn sử dụng Blynk Cloud hoặc tự tạo máy chủ Blynk riêng Với mã nguồn mở, Blynk cho phép tích hợp dễ dàng vào các thiết bị, bao gồm cả việc sử dụng Raspberry Pi làm máy chủ cho hệ thống.
Thư viện Blynk hỗ trợ hầu hết các nền tảng phần cứng phổ biến, cho phép giao tiếp hiệu quả với máy chủ và xử lý tất cả các lệnh gửi và nhận.
Hình 2.13: Sơ đồ hệ sinh thái Blynk
Nguyên lý hoạt động của Blynk: mỗi khi ta nhấn một nút trong ứng dụng
Blynk cho phép người dùng kết nối thiết bị phần cứng với server của nó thông qua thư viện, giúp truyền dữ liệu hai chiều giữa server và thiết bị Nhờ đó, người dùng có thể xây dựng một hệ sinh thái nhà thông minh dựa trên nền tảng Blynk.
- Cung cấp API & giao diện người dùng tương tự cho tất cả các thiết bị và phần cứng được hỗ trợ
- Kết nối với server bằng cách sử dụng:Wifi, Bluetooth và BLE, Ethernet, USB
- Các tiện ích trên giao diện được nhà cung cấp dễ sử dụng
- Thao tác kéo thả trực tiếp giao diện mà không cần viết mã
- Dễ dàng tích hợp và thêm chức năng mới bằng cách sử dụng các cổng kết nối ảo được tích hợp trên blynk app
- Theo dõi lịch sử dữ liệu
- Thông tin liên lạc từ thiết bị đến thiết bị bằng Widget
THIẾT BỊ VÀ GIẢI PHÁP CÔNG NGHỆ
Kit Node MCU Lua ESP8266
Chip ESP8266 được phát triển bởi Espressif để cung cấp giải pháp giao tiếp
ESP8266 là một chip Wifi lý tưởng cho các thiết bị IoT nhờ kích thước nhỏ gọn chỉ 5x5mm, tích hợp các mạch RF như balun, công tắc anten, bộ khuếch đại công suất TX và bộ lọc RX bên trong Điều này giúp các board sử dụng ESP8266 không cần diện tích lớn và giảm thiểu số lượng linh kiện xung quanh.
Hình 3.1: Module NodeMCU Lua ESP8266
Module thu phát Wifi ESP8266 NodeMCU Lua là một kit phát triển dựa trên chip Wifi SoC ESP8266, nổi bật với thiết kế thân thiện và dễ sử dụng Nó cho phép lập trình và nạp code trực tiếp thông qua trình biên dịch Arduino, giúp đơn giản hóa việc phát triển ứng dụng trên nền tảng ESP8266.
Module thu phát Wifi ESP8266 NodeMCU Lua là một kit phát triển dựa trên chip Wifi SoC ESP8266, nổi bật với thiết kế thân thiện và dễ sử dụng Người dùng có thể lập trình và nạp code trực tiếp thông qua trình biên dịch của Arduino, giúp việc phát triển ứng dụng trên ESP8266 trở nên đơn giản và hiệu quả hơn.
Hình 3.2: Sơ đồ nguyên lý kit NodeMCU
Module và Board phát triển của ESP8266
ESP8266 cần một số linh kiện bổ sung để hoạt động, trong đó phần khó nhất là ăng-ten, yêu cầu sản xuất và kiểm tra bằng thiết bị hiện đại Vì vậy, thị trường đã xuất hiện nhiều module và board mạch phát triển, giúp người dùng dễ dàng hơn trong việc phát triển ứng dụng Một số module và board phát triển phổ biến hiện nay bao gồm
Hiện nay phiên bản sử dụng phổ biến nhất là ESP8266 12E
Giới thiệu về module ESP 12E (Node MCU V3)
NodeMCU V1.0 được phát triển dựa trên Chip WiFi ESP8266EX bên trong
Module ESP-12E dễ dàng kết nối WiFi với một vài thao tác Board còn tích hợp
IC CP2102 giúp kết nối dễ dàng với máy tính qua cổng Micro USB, hỗ trợ việc thao tác với board Thiết bị còn được trang bị nút nhấn và đèn LED, tạo thuận lợi cho quá trình học tập và nghiên cứu.
Với kích thước nhỏ gọn, linh hoạt board dễ dàng liên kết với các thiết bị ngoại vi để tạo thành project, sản phẩm mẫu một cách nhanh chóng
WiFi: 2.4 GHz hỗ trợ chuẩn 802.11 b/g/n
Điện áp vào: 5V thông qua cổng USB
Số chân I/O: 11 (tất cả các chân I/O đều có Interrupt/PWM/I2C/One-wire, trừ chân D0)
Số chân Analog Input: 1 (điện áp vào tối đa 3.3V)
Giao tiếp: Cable Micro USB
Hỗ trợ bảo mật: WPA/WPA2
Tích hợp giao thức TCP/IP
Lập trình trên các ngôn ngữ: C/C++, Micropython, NodeMCU – Lua
Sơ đồ chân GPIO và những lưu ý khi sử dụng Node MCU
Hình 3.6 Sơ đồ chân MODULE Node MCU
NodeMCU có 13 chân GPIO, mỗi chân có thể thực hiện nhiều chức năng khác nhau Tuy nhiên, một số chân được sử dụng cho các mục đích quan trọng khác, do đó cần lưu ý khi sử dụng.
Tất cả các chân GPIO đều được trang bị trở kéo lên nguồn bên trong, ngoại trừ GPIO16, vốn có trở kéo xuống GND Người dùng có khả năng cấu hình để kích hoạt hoặc không kích hoạt các trở kéo này.
GPIO1 và GPIO3: hai GPIO này được nối với TX và RX của bộ UART0,
NodeMCU nạp code thông qua bộ UART này nên tránh sử dụng 2 chân GPIO này.
GPIO0, GPIO2, GPIO15: đây là các chân có nhiệm vụ cấu hình mode cho
ESP8266 quản lý quá trình nạp code cho NodeMCU thông qua các chân strapping pins, trong đó GPIO0 được thiết lập với các trở kéo để xác định mức logic ban đầu.
Khi sử dụng các chân GPIO như HIGH ở GPIO2 và LOW ở GPIO15, cần thiết kế một nguyên lý riêng để tránh xung đột trong quá trình nạp code.
GPIO9, GPIO10: hai chân này được dùng để giao tiếp với External Flash của
ESP8266 vì vậy cũng không thể dùng được (đã test thực nghiệm).
Như vậy, các GPIO còn lại: GPIO 4, 5, 12, 13, 14, 16 có thể sử dụng bình thường.
Phần mềm IDE
Đây là phần mềm dùng để lập trình nạp code vô kit NodeMCU Lua ESP8266
3.5.1 Cấu trúc một chương trình trong phần mềm IDE:
Phần 1 : Khai báo biến Đây là phần khai báo kiểu biến, tên các biến, định nghĩa các chân trên board một số kiểu khai báo biến thông dụng:
Từ "define" có nghĩa là định nghĩa, và hàm #define được sử dụng để gán tên cho một chân hoặc ngõ ra cụ thể Ví dụ, khi sử dụng #define led, chúng ta đang gán tên "led" cho một chân cụ thể trong mã lập trình.
Chú ý: sau #define thì không có dấu “,” (dấy phẩy)
*Khai báo các kiểu biến khác như: int (kiểu số nguyên), float,…
Các chúng ta có thể tham khảo thêm các kiểu biến cũng như công dụng tại arduino.cc
Phần 2 : Thiết lập (void setup())
Phần này dùng để thiết lập cho chương trình, cần nhớ rõ cấu trúc của nó: void setup()
Cấu trúc của chương trình bao gồm dấu ngoặc nhọn ở đầu và cuối; nếu thiếu, chương trình sẽ báo lỗi khi kiểm tra Phần này thiết lập tốc độ truyền dữ liệu và xác định kiểu chân là chân ra hay chân vào.
Serial.begin(9600); Dùng để truyền dữ liệu từ board Arduino lên máy tính pinMode(biến, kiểu vào hoặc ra); Dùng để xác định kiểu chân là vào hay ra
Ví dụ: pinMode(ChanDO, INPUT);
Dùng để viết các lệnh trong chương trình để mạch Arduino thực hiện các nhiệm vụ mà chúng ta mong muốn, thường bắt đầu bằng: void loop()
Một số câu lệnh, cấu trúc thường gặp:
Dấu "//" được sử dụng để giải thích nội dung trên một dòng, và khi kiểm tra chương trình, phần mềm sẽ bỏ qua phần này, không thực hiện kiểm tra hay biên dịch.
#define: Dùng để định nghĩa một chân nào đó, hay gán biến tới 1 chân, địa chỉ ghi đọc tín hiệu Ví dụ: #define LED, 13
3.5.2 Hàm nhập xuất Digital I/O: a digitalWrite(): Miêu tả: Viết một giá trị HIGH hoặc một LOW cho một chân số của arduino
Khi chân được cấu hình là OUTPUT bằng lệnh pinMode(), điện áp sẽ được thiết lập tương ứng: 5V (hoặc 3.3V cho chế độ 3.3V) cho trạng thái HIGH và 0V cho trạng thái LOW.
Nếu chân được cấu hình như là một INPUT, digitalWrite()sẽ cho phép
( HIGH) hoặc vô hiệu hóa ( LOW) pullup nội bộ trên chân đầu vào Nên thiết lập pinMode() để INPUT_PULLUP cho phép các điện trở kéo lên bên trong
Cú pháp: digitalWrite(pin, value);
Thông số: pin: Số của chân digital mà bạn muốn thiết đặt value: HIGH hoặc LOW
Mã làm cho pin kỹ thuật số 13 OUTPUTvà chuyển đổi nó bằng cách luân phiên giữa HIGHvà LOWở tốc độ một giây
Ví dụ: int led ; void setup()
{ pinMode(led, OUTPUT); // led được nối với chân số 13
} void loop() digitalWrite(led, HIGH); // bật led delay(1000); // dừng chương trình 1 giây digitalWrite(led, LOW); // tắt led delay(1000); // dừng chương trình 1 giây
Miêu tả: Đọc giá trị từ một Chân số đã được chỉ định, hoặc là HIGH hoặc LOW
Thông số: pin: số chân digital bạn muốn đọc
HIGH hoặc là LOW c pinMode():
Cấu hình 1 pin quy định hoạt động như là một đầu vào (INPUT) hoặc đầu ra
Cú pháp: pinMode(pin, mode)
Thông số: pin: số chân có chế độ bạn muốn thiết lập mode: INPUT, OUTPUT, Hoặc INPUT_PULLUP
{ pinMode (12, OUTPUT); // chân số 12 là đầu ra
{ digitalWrite (12, HIGH); delay(1000); digitalWrite (12, LOW); delay(1000);
3.5.3 Hàm nhập xuất Analog I/O: a analogRead()
Nhiệm vụ của analogRead() là đọc giá trị điện áp từ một chân Analog (ADC)
Board Node MCU có một chân A0 với bộ chuyển đổi tương tự 10-bit sang số, cho phép lập bản đồ điện áp đầu vào từ 0 đến 5 volts thành các số nguyên từ 0 đến 1023 Điều này tạo ra độ phân giải giữa các lần đọc là 0,0049 volt (4,9 mV) trên một đơn vị, và dải đầu vào cùng độ phân giải có thể được điều chỉnh bằng cách sử dụng.
Hàm analogRead() cần 100 micro giây để thực hiện Khi người ta nói "đọc tín hiệu analog", bạn có thể hiểu đó chính là việc đọc giá trị điện áp
Cú pháp: analogRead (pin) ; b analogWrite()
Hàm analogWrite() trên mạch Arduino cho phép xuất tín hiệu analog từ một chân, thường được sử dụng để điều chỉnh độ sáng của đèn LED hoặc tốc độ của động cơ Tín hiệu PWM được phát ra với tần số khoảng 490 Hz trên hầu hết các chân Trên các board như Node MCU và các board tương tự, chức năng này cũng được áp dụng.
PWM có tần số khoảng 980Hz
Trên mạch Arduino, bạn không cần sử dụng hàm pinMode() để thiết lập chân phát xung PWM ở chế độ OUTPUT Để phát xung PWM, bạn chỉ cần sử dụng cú pháp: analogWrite([chân phát xung PWM], [giá trị xung PWM]); với giá trị xung PWM nằm trong khoảng từ 0 đến 255.
0 đến 255, tương ứng với mức duty cycle từ 0% đến 100%
Ví dụ: Đoạn code dưới có chức năng làm sáng dần một đèn LED được kết nối vào chân số 2 trên mạch Arduino int led = 2; void setup() {}
Tạm dừng chương trình cho khoảng thời gian (tính bằng mili giây) được chỉ định là tham số (Có 1000 mili giây = 1 giây.)
Thông số ms: số mili giây để tạm dừng ( unsigned long)
Trả về: Không có ví dụ: int ledPin = 13; // LED pin 13 void setup()
{digitalWrite(ledPin, HIGH); delay(1000);digitalWrite(ledPin, LOW); delay(1000);
Lập trình ESP 12E bằng Arduino IDE
3.6.1 Giới thiệu Để bắt đầu với những dự án Wifi các bạn cần ESP8266 với giá thành rẻ, và dễ dàng sử dụng Đặc biệt ESP8266 12E có thể được lập trình bằng Arduino IDE Trước khi bắt đầu những chuỗi dự án với ESP8266, ở bài viết này, mình sẽ chia sẻ cách cài đặt Arduino
IDE để nạp code cho ESP8266
1 Module ESP8266 V12 hoặc V12E đã tích hợp sẵn mạch nạp
3.6.3 Cài đặt phần mềm arduino IDE và thư viện cho esp8266
Sau khi tải phần mềm Arduino IDE, bạn cần cài đặt và mở chương trình Để phần mềm nhận diện được module, hãy cài đặt driver cần thiết.
(file driver có sẵn trong file cài) Để tiến hành cài đặt thư viện và chức năng nạp code cho IDE chúng ta làm như sau:
Vào File→ Preferences, vào textbox Additional Board Manager URLs thêm đường link sau vào http://arduino.esp8266.com/stable/package_esp8266com_index.json
Click OK để chấp nhận
Tiếp theo vào Tool→Board→Boards Manager Đợi một lát để chương trình tìm kiếm Ta kéo xuống và click vào ESP8266 by
ESP8266 Community, click vào Install Chờ phần mềm tự động download và cài đặt
3.6.4 Hướng dẫn nạp chương trình cho ESP8266 12E
Kết nối mudule ESP8266 -12E vào máy tính Vào Tool→Board→NodeMCU
1.0,chọn cổng COM tương ứng với module tương ứng
Chọn chế độ nạp Arduino as ISP và chọn cổng COM cho đúng nhé.Vậy là ta đã có môi trường lập trình cho esp8266 rất thân thiện
Sau khi kết nối ESP8266 với máy tính, chúng ta sẽ thử nghiệm mã code cho ESP8266 Mã code dưới đây sẽ điều khiển đèn LED trên board ESP8266 12E tại chân 13 (D7) sáng và tắt trong vòng 1 giây Câu lệnh trong hàm setup() sử dụng pinMode để thiết lập chân LED_BUILTIN ở chế độ OUTPUT.
} void loop() { digitalWrite(LED_BUILTIN, HIGH); // bật led sáng 1 giây delay(1000); // wait for asecond digitalWrite(LED_BUILTIN, LOW); // tắt led 1 giây delay(1000); // wait for a second
Từ ví dụ đơn giản ở trên ta có thể bắt tay vào lập trình cho NODE MCU để làm những dự dán IOT có ứng dụng cao.
Giới thiệu Module RFID RC522 13.56MHz
Module RFID RC522 sử dụng IC MFRC522 của Phillip để đọc và ghi dữ liệu cho thẻ NFC tần số 13.56MHz Với thiết kế nhỏ gọn và giá cả phải chăng, module này là lựa chọn hàng đầu cho các ứng dụng liên quan đến ghi và đọc thẻ RFID.
RFID (Nhận dạng tần số vô tuyến) là công nghệ cho phép nhận diện đối tượng thông qua sóng radio Công nghệ này giúp giám sát, quản lý và theo dõi từng đối tượng một cách hiệu quả Hệ thống RFID bao gồm hai thành phần chính: thẻ tag (chip) và đầu đọc, tạo nên khả năng nhận dạng tự động và chính xác.
RFID chứa thông tin) và đầu đọc (reader) đọc các thông tin trên chip
NỘI DUNG THỰC HIỆN VÀ MÔ HÌNH
Mục tiêu
Giao thức điều khiển ảo trên ứng dụng Blynk cho phép mở cửa ngôi nhà thông qua nhiều phương thức khác nhau, bao gồm sử dụng thẻ RFID khi vắng nhà, mở cửa từ bên trong bằng nút nhấn, và thêm thẻ người sử dụng mới thông qua ứng dụng Blynk.
4.2 Phần mền cần chuẩn bị
Cài đặt phần mềm arduino IDE
Cài đặt app Blynk cho điện thoại
4.3 Phần cứng cần chuẩn bị:
The code initializes an MFRC522 RFID reader with specified SS_PIN and RST_PIN, and declares variables for UID management, EEPROM address, and an admin ID set to 1122539531 It includes flags for card processing, such as beginCard, addCard, and skipCard, along with a LockSwitch variable An array is defined to store CardUIDs read from EEPROM, while a PiezoPin is assigned to D3 for sound output Additionally, it defines the Wi-Fi credentials with the SSID "PHI QUANG" and password "88888888," along with an authentication token for secure operations.
Serial.begin(115200); pinMode(SLN_PIN, OUTPUT); digitalWrite(SLN_PIN, LOW); pinMode(BTN_PIN, INPUT_PULLUP); pinMode(PiezoPin, OUTPUT);
SPI.begin(); mfrc522.PCD_Init();
Blynk.begin(auth, ssid, pass); lcd.clear(); //Use it to clear the LCD Widget
EEPROMreadUIDcard(); digitalWrite(PiezoPin, HIGH), delay(100), digitalWrite(PiezoPin, LOW);
In the loop function, the SLN_PIN is set to LOW, and when the BTN_PIN is detected as LOW, the SLN_PIN is switched to HIGH to unlock the door The LCD displays "BUTTON UNLOCK" on the first line and "DOOR OPEN" on the second line Additionally, the PiezoPin is activated briefly, producing a sound, before returning to LOW after a delay of 200 milliseconds, followed by a pause of 7000 milliseconds.
} if (beginCard == 0) { if ( ! mfrc522.PICC_IsNewCardPresent()) { //Look for new cards
} if ( ! mfrc522.PICC_ReadCardSerial()) { //Select one of the cards
//Read "UID" for (byte i = 0; i < mfrc522.uid.size; i++) { uidDecTemp = mfrc522.uid.uidByte[i]; uidDec = uidDec * 256 + uidDecTemp;
} if (beginCard == 1 || LockSwitch > 0)EEPROMwriteUIDcard(); //uidDec == adminID if (LockSwitch == 0) {
The code checks each card's UID stored in EEPROM, and if a valid UID is found that matches the input UID (uidDec), it displays "CARD ACCESS OPEN" on the LCD Upon successful identification, the system unlocks by setting SLN_PIN to HIGH, triggers a sound via the PiezoPin for 200 milliseconds, and maintains the unlocked state for 7 seconds before concluding the process.
If the ARRAYindexUIDcard equals 10, the LCD displays "Card not Found" along with the ID number A sequence of three beeps is triggered using the PiezoPin, with a delay of 100 milliseconds between each beep Afterward, the SLN_PIN is set to LOW, which likely indicates a lock operation, followed by a delay of 7000 milliseconds.
BLYNK_WRITE(V1) { int a = param.asInt(); if (a == 1) beginCard = 1; else beginCard = 0;
BLYNK_WRITE(V2) int a = param.asInt();if (a == 1) { skipCard = 1; if (EEPROMstartAddr / 5 < 10) EEPROMwriteUIDcard();
BLYNK_WRITE(V3) { int a = param.asInt(); if (a == 1) { digitalWrite(SLN_PIN, HIGH); //unlock lcd.print(0, 0, " APP UNLOCK OK "); lcd.print(0, 1, " DOOR OPEN "); digitalWrite(PiezoPin, HIGH), delay(200), digitalWrite(PiezoPin, LOW);
} void EEPROMwriteUIDcard() { if (LockSwitch == 0) { lcd.print(0, 0, " START REC CARD "); lcd.print(0, 1, "PLEASE TAG CARDS"); delay(500);
} if (LockSwitch > 0) { if (skipCard == 1) { //uidDec == adminID lcd.print(0, 0, " SKIP RECORD "); lcd.print(0, 1, " "); lcd.print(0, 1, " label : "); lcd.print(11, 1, EEPROMstartAddr / 5);
EEPROM.write(EEPROMstartAddr, uidDec & 0xFF);
EEPROM.write(EEPROMstartAddr + 1, (uidDec & 0xFF00) >> 8);
EEPROM.write(EEPROMstartAddr + 2, (uidDec & 0xFF0000) >> 16);
EEPROM.write(EEPROMstartAddr + 3, (uidDec & 0xFF000000) >> 24);
EEPROM.commit(); delay(10); lcd.print(0, 1, " "); lcd.print(0, 0, "RECORD OK! IN "); lcd.print(0, 1, "MEMORY : "); lcd.print(9, 1, EEPROMstartAddr / 5);
LockSwitch++; if (EEPROMstartAddr / 5 == 10) { lcd.clear(); lcd.print(0, 0, "RECORD FINISH"); delay(2000); uidDec = 0;
} void EEPROMreadUIDcard() { for (int i = 0; i 8);
EEPROM.write(EEPROMstartAddr + 2, (uidDec & 0xFF0000) >> 16);
EEPROM.write(EEPROMstartAddr + 3, (uidDec & 0xFF000000) >> 24);
EEPROM.commit(); delay(10); lcd.print(0, 1, " "); lcd.print(0, 0, "RECORD OK! IN "); lcd.print(0, 1, "MEMORY : "); lcd.print(9, 1, EEPROMstartAddr / 5);
LockSwitch++; if (EEPROMstartAddr / 5 == 10) { lcd.clear(); lcd.print(0, 0, "RECORD FINISH"); delay(2000); uidDec = 0;
} void EEPROMreadUIDcard() { for (int i = 0; i