HƯỚNG PHÁT TRIỂN

Một phần của tài liệu Thiết kế và thi công mô hình khóa điện tử có giám sát từ xa sử dụng GSM và RFID (Trang 58 - 75)

Để 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]);

Một phần của tài liệu Thiết kế và thi công mô hình khóa điện tử có giám sát từ xa sử dụng GSM và RFID (Trang 58 - 75)

Tải bản đầy đủ (PDF)

(75 trang)