Để mô hình được hoàn thiện và có thể ứng dụng vào thực tế, nhóm chúng em có một số kiến nghị về hướng phát triển đề tài:
- Thay động cơ servo bằng chốt điện tử.
- Thế kế ứng dụng điện thoại, web server , giọng nói để giám sát điều khiển trạng thái cửa.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 47
TÀI LIỆU THAM KHẢO
[1] Pham Minh Tuan, ebook :Internet Of Things(IoT): cho người mới bắt đầu, 2017 (https://iotmakervn.github.io/iot-starter-book/).
[2]Nguyễn Ngọc Lực, “Thiết kế , thi công mô hình hệ thông điều khiển điện và giám sát nhà” , đồ án tốt nghiệp , trường ĐHSPKT Tp HCM, 2018.
[3] Phạm Hưng Thịnh, “Thiết kế, thi công hệ thống điều khiển và giám sát thiết bị nhà có hỗ trờ Google Assistant”, đồ án tốt nghiệp, trường ĐHSPKT TpHCM, 2018. [4]Hướng dẫn sử dụng Module sim900-MLAB (http://mlab.vn/huong-dan-su-dung- module-sim900.html).
[5]Nguyen Dinh Phu, Truong Ngoc Anh, giáo trình vi xử lý , Xuất bản ĐH Quốc Gia, Tp.HCM, 2013.
[6] Hướng dẫn sử dụng Module cảm biến chuyển động HC - SR501-MLAB (http://mlab.vn/18496-huong-dan-su-dung-module-cam-bien-chuyen-dong-hc-
sr501.html).
[7] Lập trình và sử dụng module đọc thẻ RFID-RC522 – Arduino.vn (http://arduino.vn/bai-viet/833-lap-trinh-va-su-dung-modul-doc-rfid-rc522).
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 48 PHỤ LỤC #include <Wire.h> #include <LiquidCrystal_I2C.h> #include <Keypad.h> #include <SPI.h> #include <MFRC522.h> #include <Servo.h> #include <EEPROM.h> #include <MsTimer2.h> LiquidCrystal_I2C lcd(0x27, 16, 2); #define STATE_LOGIN 0 #define STATE_KEY_PASS 1 #define STATE_NEW_PASS 2 #define STATE_SEND_REPORT 3 #define STATE_MAIN 4 #define STATE_CHANGE_PASSWORK 5 #define STATE_ADD_RFID 6 #define STATE_ADD_PASS 7 #define STATE_REMOVE_RFID 8 #define DEBUG 1
/////////////////////////KHAI BAO BIEN TOAN CUC CHUONG TRINH/////////////////////// int state_machine = 0; uint8_t count_report = 0; uint16_t num_user; char phone_report[10]; uint16_t addr_current_user; #define LED_PIN 13 #define BUZZER_PIN 48 #define REPORT_COUNT_NUM 10
bool REPORT_STATE = false;
uint8_t REPORT_COUNT = 0;
#define SMS_REPORT 0 #define BUZZER_REPORT 1
bool REPORT_SMS_BUZZER_STATE = SMS_REPORT;
#define door_close false #define door_open true
bool state_door = door_close;
/////////////////////////KHAI BAO CAC BIEN EEPROM DIA CHI//////////////// #define addr_phone 0 #define size_phone 10 #define addr_num_user 12 #define addr_fisr_ID 14 #define size_ID 4 #define size_pass 4 #define zise_user 8 #define EEPROM_MIN_ADDR 0 #define EEPROM_MAX_ADDR 511 char buf_pass[4]; uint16_t addr_save_new = 512;
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 49 /////////////////////////KHAI BAO BIEN PHIM
MATRIX///////////////////////
const byte rows = 4; //số hàng
const byte columns = 4; //số cột
int holdDelay = 700;
int n = 3; //
int state = 0; //nếu state =0 ko nhấn,state =1 nhấn thời gian nhỏ , state = 2 nhấn giữ lâu
char key = 0;
char keys[rows][columns] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}, };
byte rowPins[rows] = {8, 7, 6, 5}; //Cách nối chân với Arduino byte columnPins[columns] = {12, 11, 10, 9};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, columnPins, rows,
columns); //////////////////////////////RFID/////////////////////////// #define SS_PIN 53 #define RST_PIN 4 MFRC522 mfrc522(SS_PIN, RST_PIN); uint8_t successRead;
unsigned char pass_keyboard[4];
unsigned char readCard[4]; // Mảng đọc mã card
unsigned char pass_temp[4] = {0, 0, 0, 0}; // Mảng đọc mã card
char pass_show[4] = " "; uint8_t count = 0; /////////////////////////////SERVO/////////////////////////// Servo myservo; #define SERVO_PIN 3 #define Ser_on 0 #define Ser_off 90 ///////////////////////////MODULE SIM//////////////////////////
bool REPORT_SMS_SENDED = false;
uint32_t SMS_TIMEOUT = 0;
#define SIM_ENA_PIN 22
String sodienthoai="0379792379";
//SoftwareSerial SIM900(24, 26); // RX, TX
//////////////////////////BUTTON LOCK HANDLE/////////////////////////
void check_door() {
if(state_door==door_close)
{
myservo.write(Ser_off); }
else {
myservo.write(Ser_on);
}
}
#define BUTTON_PIN 18 //interrupt 5
bool state_button=false;
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 50
{
Serial.println("BUTTON DUOC NHAN");
state_button=true; }
///////////////////////////PIR HANDLE///////////////////////// #define PIR_PIN 2
bool PIR_REPORT_STATE = false;
void PIR_HANDLE_FUNCTION() {
Serial.println("PIR PHAT HIEN");
PIR_REPORT_STATE = true; } ///////////////////////////TIMER HANDLE////////////////////////// #define Time_handle 50 uint32_t timer2_count = 0; void Timer_handle_func() { timer2_count++;
if (timer2_count % 10 == 0) //1 count =50ms => 500ms vo function nay 1 lan.
{
if ((REPORT_STATE == 1) && (REPORT_COUNT < REPORT_COUNT_NUM)) {
digitalWrite(LED_PIN, !digitalRead(LED_PIN));
digitalWrite(BUZZER_PIN, !digitalRead(BUZZER_PIN));
REPORT_COUNT++;
Serial.println("CANH BAO SAI THE" + String(REPORT_COUNT));
}
if (REPORT_COUNT >= REPORT_COUNT_NUM) {
REPORT_COUNT = 0; REPORT_STATE = 0;
}
}
if (timer2_count % 4 == 0) //1 count =50ms => 200ms vo function nay 1 lan.
{
check_door();
if (PIR_REPORT_STATE == true) {
digitalWrite(LED_PIN, !digitalRead(LED_PIN));
digitalWrite(BUZZER_PIN,!digitalRead(BUZZER_PIN));
Serial.println("CANH BAO CO NGUOI VAO");
if (!digitalRead(PIR_PIN))
{
PIR_REPORT_STATE = false;
digitalWrite(LED_PIN, LOW);
digitalWrite(BUZZER_PIN,LOW);
Serial.println("PIR TAT"); } } } if (REPORT_SMS_SENDED == true) { SMS_TIMEOUT++;
//sau 30s moi kiem tra lai fun 50ms vo 1 lan => 30000/50=600 if (SMS_TIMEOUT >= 600)
{
REPORT_SMS_SENDED = false;
SMS_TIMEOUT = 0;
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 51 }
}
}
void setup() {
Serial.begin(115200); //enable DEBUG lcd.begin();
lcd_start_init();
//SIM_Enable();
Serial.println("Dang khoi tao chuong trinh..."); //let start program SPI.begin();
mfrc522.PCD_Init();
myservo.attach(SERVO_PIN);
//myservo.write(Ser_off); //get_phone_eep_rom();
num_user = EEPROM.read(addr_num_user);
Serial.println(" SO THE TRONG EEPROM: " + String(num_user)); //printf numbers users in system
pinMode(LED_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
digitalWrite(LED_PIN, LOW);
digitalWrite(BUZZER_PIN, LOW);
pinMode(PIR_PIN, INPUT);
attachInterrupt(digitalPinToInterrupt(PIR_PIN), PIR_HANDLE_FUNCTION,
RISING ); // gọi hàm tatled liên tục khi còn nhấn nút pinMode(BUTTON_PIN, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(BUTTON_PIN),
BUTTON_HANDLE_FUNCTION, FALLING ); // gọi hàm tatled liên tục khi còn nhấn nút
delay(500);
state_button=false;
state_door=door_close;
MsTimer2::set(Time_handle, Timer_handle_func); // 50ms period MsTimer2::start();
Serial.println("Start"); //let start program //SIM_INIT(); //SIM_SEND_SMS(sodienthoai,"OKOKOK"); lcd_start(); } void loop() { machine_state_func(); check_button(); check_report_sms(); } void machine_state_func() { switch (state_machine) { case STATE_LOGIN: LOGIN(); break; case STATE_KEY_PASS: KEYBOARD_PASS(); break; case STATE_MAIN: LOCK_MAIN(); break;
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 52 case STATE_SEND_REPORT: REPORT_SOS_SIM_LED_BUZZER(); break; case STATE_CHANGE_PASSWORK: CHANGE_PASS_FUN(); break; case STATE_NEW_PASS: CHANGE_NEW_PASS(); break; case STATE_ADD_RFID: READ_NEW_RFID(); break; case STATE_ADD_PASS: ADD_NEW_PASS_RFID(); break; case STATE_REMOVE_RFID: REMOVE_RFID_USER(); break; default: break; } } void check_report_sms() {
if(PIR_REPORT_STATE==true && REPORT_SMS_BUZZER_STATE == SMS_REPORT) { REPORT_PIR_SEND_SMS(); } } void check_button() { if(state_button==true) { state_door=!state_door; delay(500); if(state_machine==STATE_MAIN) { lcd.clear(); lcd_start(); count_report=0; state_machine = STATE_LOGIN; } state_button=false;
Serial.println("DOI TRANG THAI CUA!!!!!!!!!!!");
} } void LOGIN() { if (CHECK_RFID() == true) { lcd.clear();
lcd.setCursor(0, 1); lcd.print("THE DUNG");
lcd.clear();
state_machine = STATE_KEY_PASS;
clear_pass_key();
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 53 else {
lcd.clear();
lcd.setCursor(0, 0); lcd.print("VUI LONG THU LAI");
count_report++; Serial.println(" Sai Lan:" + String(count_report));
lcd.setCursor(1, 1); lcd.print("SAI LAN:" + String(count_report));
if (count_report >= 3) state_machine = STATE_SEND_REPORT;
//clear_pass_key(); }
}
void KEYBOARD_PASS() {
lcd.setCursor(0, 0); lcd.print(" MAT KHAU THE");
lcd.setCursor(1, 1); lcd.print(" PASS:");
lcd.setCursor(7, 1);
for (uint8_t count2 = 0; count2 < 4;
count2++)lcd.print(pass_show[count2]);
if (check_pass_key() == true)
{ //mo servo va mo khoa state_door=door_open; state_machine = STATE_MAIN; count_report=0; lcd.clear(); } } void REPORT_SOS_SIM_LED_BUZZER() {
Serial.println("TRANG THAI CANH BAO");
REPORT_STATE = 1; if (REPORT_SMS_SENDED == false) { REPORT_SEND_SMS(); REPORT_SMS_SENDED == true; }
//thuc hien viec canh bao (SMS, LED, BUZZER,...) //Sau do ve lai Login
lcd_start(); count_report = 0; state_machine = STATE_LOGIN; } void LOCK_MAIN() { check_door();
lcd.setCursor(5, 0); lcd.print("CUA MO ");
if (REPORT_SMS_BUZZER_STATE == SMS_REPORT) { lcd.setCursor(15, 0); lcd.print("*"); } else { lcd.setCursor(15, 0); lcd.print(" "); }
lcd.setCursor(2, 1); lcd.print("CO QUYEN Q/LY");
check_function_security(); }
void CHANGE_PASS_FUN() {
lcd.setCursor(0, 0); lcd.print("NHAP M/KHAU CU");
lcd.setCursor(0, 1); lcd.print("M/KHAU:");
for (uint8_t count2 = 0; count2 < 4;
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 54 if (check_pass_key() == true)
{ //mo servo va mo khoa lcd.clear(); clear_pass_key(); state_machine = STATE_NEW_PASS; } } void CHANGE_NEW_PASS() {
lcd.setCursor(0, 0); lcd.print("NHAP M/KHAU MOI");
lcd.setCursor(0, 1); lcd.print("M/KHAU:");
for (uint8_t count2 = 0; count2 < 4;
count2++)lcd.print(pass_show[count2]);
change_pass(); }
void get_phone_eep_rom() {
Serial.println("SO DT KHOI TAO");
uint8_t count_phone;
for (count_phone = 0; count_phone < size_phone; count_phone++)
{
phone_report[count_phone] = EEPROM.read(addr_phone + count_phone);
Serial.print(phone_report[count_phone]);
}
Serial.println(""); }
uint8_t check_function_security() {
char temp_k = keypad.getKey();
switch (temp_k) { case 'A': state_machine = STATE_ADD_RFID; lcd.clear(); break; case 'B': state_machine = STATE_REMOVE_RFID; break; case 'C': state_machine = STATE_CHANGE_PASSWORK; clear_pass_key(); lcd.clear(); break; case 'D': break; case '*': state_door=door_close; lcd.clear(); lcd_start(); count_report=0; state_machine = STATE_LOGIN; break;
case '#': //LUA CHON 2 CHE DO GUI SMS HOAC BAO BUZZER if (REPORT_SMS_BUZZER_STATE == SMS_REPORT)
{
REPORT_SMS_BUZZER_STATE = BUZZER_REPORT;
lcd.setCursor(2, 0); lcd.print(" TAT SMS ");
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 55 }
else {
REPORT_SMS_BUZZER_STATE = SMS_REPORT;
lcd.setCursor(2, 0); lcd.print(" BAT SMS ");
delay(1000); } break; } } void change_pass() {
char temp = keypad.getKey();
if (temp) {
if ((count < 4) && (temp != '#')) // **** {
pass_temp[count] = temp;
pass_show[count] = '*';
Serial.println(temp);
Serial.println(pass_temp[count]);
count++;
}
if (temp == 'D')
{
Serial.print("Set Pass Moi La: ");
for (uint8_t add_pass_count = 0; add_pass_count < 4;
add_pass_count++)
{
pass_keyboard[add_pass_count] = pass_temp[add_pass_count];
Serial.print((char)pass_keyboard[add_pass_count]);
//addr_current_user
EEPROM.write(addr_current_user + size_ID + add_pass_count,
pass_keyboard[add_pass_count]); } state_door=door_close; lcd_start(); clear_pass_key(); state_machine = STATE_LOGIN; } if (temp == '#') { for (uint8_t u = 0; u < 4; u++) { pass_temp[u] = 0x00; pass_show[u] = ' '; } count = 0; } } } bool check_pass_key() {
char temp = keypad.getKey();
if (temp) {
if (temp == '#')
{
for (uint8_t u = 0; u < 4; u++)
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 56 pass_temp[u] = 0x00; pass_show[u] = ' '; } count = 0; } if (temp == 'D') { uint8_t check_count = 0;
for ( check_count = 0; check_count < 4; check_count++)
{
if (pass_temp[check_count] != pass_keyboard[check_count])
break; } Serial.println("D"); if (check_count == 4)return 1; else return 0; }
if ((count < 4) && (temp != '#')) // **** {
pass_temp[count] = temp;
pass_show[count] = '*';
Serial.print((char)temp);
//Serial.print(pass_temp[count]); count++; } } return 0; } void clear_pass_key() { for (uint8_t u = 0; u < 4; u++) { pass_temp[u] = 0x00; pass_show[u] = ' '; } count = 0; } bool CHECK_RFID() { do {
successRead = getID(); // sets successRead to 1 when we get read from reader otherwise 0
// When device is in use if wipe button pressed for 10 seconds initialize Master Card wiping
check_button();
}
while (!successRead); //the program will not go further while you are not getting a successful read
uint16_t i;
for (i = addr_fisr_ID; i < (EEPROM_MAX_ADDR - zise_user); i +=
zise_user) {
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 57 if ((readCard[0] == EEPROM.read(i))) //Nếu có 1 phần tử bất kỳ nào không phù hợp...thỳ thoát vòng lặp, lúc này ta nhận được giá trị của i {
break;
}
}
if ((readCard[0] == EEPROM.read(i)) && (readCard[1] == EEPROM.read(i
+ 1)) && (readCard[2] == EEPROM.read(i + 2)) && (readCard[3] ==
EEPROM.read(i + 3))) //Nếu có 1 phần tử bất kỳ nào không phù hợp...thỳ thoát vòng lặp, lúc này ta nhận được giá trị của i
{
Serial.println("TIM THAY THE");
//Serial.print(i); addr_current_user = i;
for (uint16_t eep_count = 0; eep_count < 4; eep_count++)
{
pass_keyboard[eep_count] = EEPROM.read(i + eep_count + 4);
} return 1; } else return 0; } bool READ_NEW_RFID() {
Serial.println("THEM USER CHO THE RDIF MOI");
lcd.setCursor(0, 0);
lcd.print("MOI QUET THE MOI");
do {
successRead = getID(); // sets successRead to 1 when we get read from reader otherwise 0
// When device is in use if wipe button pressed for 10 seconds initialize Master Card wiping
check_button();
}
while (!successRead); //the program will not go further while you are not getting a successful read
uint16_t i;
for (i = addr_fisr_ID; i < (EEPROM_MAX_ADDR - zise_user); i +=
zise_user) {
//So sáng từng phần tử của mảng reading_card với mảng master if ((readCard[0] == EEPROM.read(i)) && (readCard[1] ==
EEPROM.read(i + 1)) && (readCard[2] == EEPROM.read(i + 2)) &&
(readCard[3] == EEPROM.read(i + 3))) //Nếu có 1 phần tử bất kỳ nào không phù hợp...thỳ thoát vòng lặp, lúc này ta nhận được giá trị của i {
break;
}
else if ((EEPROM.read(i) == 0xff) && (EEPROM.read(i + 1) == 0xff) && (EEPROM.read(i + 2) == 0xff) && (EEPROM.read(i + 3) == 0xff))
{
Serial.println("VI TRI LUU THE MOI LA" + String(i));
addr_save_new = i;
break;
}
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 58 if ((readCard[0] == EEPROM.read(i)) && (readCard[1] == EEPROM.read(i
+ 1)) && (readCard[2] == EEPROM.read(i + 2)) && (readCard[3] ==
EEPROM.read(i + 3))) //Nếu có 1 phần tử bất kỳ nào không phù hợp...thỳ thoát vòng lặp, lúc này ta nhận được giá trị của i
{
Serial.println("TIM THAY THE DA CO");
lcd.setCursor(0, 0);
lcd.print(" DA CO THE NAY ");
delay(1000);
}
else {
if (successRead) state_machine = STATE_ADD_PASS;
clear_pass_key();
Serial.println("CHUYEN TOI TRANG THAI NHAP PASS MOI");
lcd.clear(); } } uint8_t getID() { if ( ! mfrc522.PICC_IsNewCardPresent()) { return 0; } if ( ! mfrc522.PICC_ReadCardSerial()) { return 0; }
//Serial.println(F("Scanned PICC's UID:")); for ( uint8_t i = 0; i < 4; i++) { // readCard[i] = mfrc522.uid.uidByte[i];
Serial.print(readCard[i]); Serial.print('-');
}
Serial.println("");
mfrc522.PICC_HaltA(); // Stop reading return 1;
}
void lcd_start() {
lcd.clear();
lcd.print("KHOA CUA DIEN TU");
lcd.setCursor(2, 1);
lcd.print("MOI QUET THE"); }
void lcd_start_init(){
lcd.clear();
lcd.print(" DANG KHOI DONG");
lcd.setCursor(2, 1);
lcd.print("VUI LONG CHO"); }
void ADD_NEW_PASS_RFID() {
lcd.setCursor(0, 0);
lcd.print("NHAP MKHAU MOI");
lcd.setCursor(0, 1);
lcd.print("MKHAU: ");
for (uint8_t count2 = 0; count2 < 4;
count2++)lcd.print(pass_show[count2]);
//while(1);
//Serial.println("THEM PASS CHO THE RDIF MOI"); ADD_PASS_KEYBOARD(addr_save_new);
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 59
}
void ADD_PASS_KEYBOARD(uint16_t addr_start_save) {
char temp = keypad.getKey();
if (temp) {
if ((count < 4) && (temp != '#')) // **** {
pass_temp[count] = temp;
pass_show[count] = '*';
Serial.println(temp);
Serial.println(pass_temp[count]);
count++;
}
if (temp == 'D')
{
Serial.print("ID THE MOI: "); Serial.print(readCard[0]);
Serial.print(readCard[1]); Serial.print(readCard[2]);
Serial.print(readCard[3]); Serial.println("");
Serial.print("SET PASS THE MOI La: ");
for (uint8_t add_pass_count = 0; add_pass_count < 4;
add_pass_count++)
{
pass_keyboard[add_pass_count] = pass_temp[add_pass_count];
Serial.print((char)pass_keyboard[add_pass_count]);
//addr_current_user
EEPROM.write(addr_start_save + add_pass_count,
readCard[add_pass_count]);
EEPROM.write(addr_start_save + size_ID + add_pass_count,
pass_keyboard[add_pass_count]);
}
if (num_user > 0)num_user++; EEPROM.write(addr_num_user,
num_user); Serial.println(""); state_door=door_close; lcd_start(); clear_pass_key(); state_machine = STATE_LOGIN; } if (temp == '#') { for (uint8_t u = 0; u < 4; u++) { pass_temp[u] = 0x00; pass_show[u] = ' '; } count = 0; } } } void REMOVE_RFID_USER() {
Serial.println("XOA THE RFID");
//lcd_delete_RFID(); //lcd_start(); //state_machine=STATE_LOGIN; READ_DELETE_RFID(); } bool READ_DELETE_RFID() {
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 60 Serial.println("XOA THE RFID");
lcd.setCursor(0, 0);
lcd.print("MOI QUET THE XOA");
do {
successRead = getID(); // sets successRead to 1 when we get read from reader otherwise 0
check_button();
// When device is in use if wipe button pressed for 10 seconds initialize Master Card wiping
}
while (!successRead); //the program will not go further while you are not getting a successful read
uint16_t i;
for (i = addr_fisr_ID; i < (EEPROM_MAX_ADDR - zise_user); i +=
zise_user) {
//So sáng từng phần tử của mảng reading_card với mảng master if ((readCard[0] == EEPROM.read(i)) && (readCard[1] ==
EEPROM.read(i + 1)) && (readCard[2] == EEPROM.read(i + 2)) &&
(readCard[3] == EEPROM.read(i + 3))) //Nếu có 1 phần tử bất kỳ nào không phù hợp...thỳ thoát vòng lặp, lúc này ta nhận được giá trị của i {
break;
}
}
if ((readCard[0] == EEPROM.read(i)) && (readCard[1] == EEPROM.read(i
+ 1)) && (readCard[2] == EEPROM.read(i + 2)) && (readCard[3] ==
EEPROM.read(i + 3))) //Nếu có 1 phần tử bất kỳ nào không phù hợp...thỳ thoát vòng lặp, lúc này ta nhận được giá trị của i
{
if (successRead) state_machine = STATE_MAIN;
clear_pass_key();
Serial.println("TIM THAY DIA CHI XOA, XOA DATA THE");
lcd.setCursor(0, 0);
lcd.print(" XOA THANH CONG ");
for (uint16_t count_delete = i ; count_delete < (i + zise_user);
count_delete++)
{
EEPROM.write(count_delete, 0xff);
}
if (num_user > 0)num_user--; EEPROM.write(addr_num_user, num_user);
delay(1000); lcd.clear(); } else { lcd.setCursor(0, 0);
lcd.print(" KO CO THE NAY ");
delay(1000);
lcd.clear();
if (successRead) state_machine = STATE_MAIN;
} }
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH 61 digitalWrite(SIM_ENA_PIN, HIGH); // Du chan PWR_KEY len cao it nhat 1s
delay(1500); // o day ta de 1,5s
digitalWrite(SIM_ENA_PIN, LOW); // Du chan PWR_KEY xuong thap
delay(100); // cac ban xem trong Hardware designed sim900A de hieu ro hon
}
void SIM_INIT() {
long select_baundrate[8] = {1200, 2400, 4800, 9600, 19200, 38400,
57600, 115200};
int i = 1, dem = 0, tt = 0, init = 0;
char nah = Serial2.read();
int time_delay = 0;
Serial.println(" chon toc do baud");
while (init == 0) {
tt = 0;
Serial2.begin(select_baundrate[i]);