diff --git a/lock_settime_start.ino b/lock_settime_start.ino new file mode 100644 index 0000000..ce61097 --- /dev/null +++ b/lock_settime_start.ino @@ -0,0 +1,321 @@ +//===============> Version Timer 22/03/2022 Suported by Thaonv <=====================// +#include // RC522 Module uses SPI protocol +#include "TimerOne.h" +#include +#define ledView 13 + +//Ver 3 +// LED 12V - A1 +//Relay 1 - D5 +//Button 1 - D8 +// Relay 2 - D6 +// Button 2 - D7 +long Time_openRelay = 4000 ; // ms - Thoi gian giu mo khoa +#define relay 5 //6 // Set Relay 1 Pin +#define button 7 // button exit +#define relay_2 6 //6 // Set Relay 1 Pin +#define button_2 8 // button exit +#define Light A1 // Led tro sang camera +//------------------------ +int stt; +int stt_old; +String input; +/* Địa chỉ của DS1307 */ +const byte DS1307 = 0x68; +/* Số byte dữ liệu sẽ đọc từ DS1307 */ +const byte NumberOfFields = 7; + +/* khai báo các biến thời gian */ +int second, minute, hour, day, wday, month, year; +//------------------------ +int stt_2; +int stt_old_2; +String input_2; +String timestart; +bool Light_stt = false; +bool relay_stt = false; +bool relay_stt_2 = false; + +bool sttRun = false; +bool Debug = false; + +//--------------------------------------------------------- +unsigned long countFlagRelay_1 = 0; +unsigned long countFlagRelay_2 = 0; + +bool kickFlag_1 = false; +bool kickFlag_2 = false; +int day_st,month_st,year_st,second_st,minute_st,hour_st,thu_st; + +///////////////////////////////////////// Setup /////////////////////////////////// +void setup() +{ + Wire.begin();//i2c + //Arduino Pin Configuration + pinMode(13, OUTPUT); + pinMode(Light, OUTPUT); + digitalWrite(13, LOW); + + pinMode(ledView, OUTPUT); + + pinMode(relay, OUTPUT); + pinMode(relay_2, OUTPUT); + pinMode(button, INPUT); + pinMode(button_2, INPUT); + + digitalWrite(relay, HIGH); // Make sure door is locked + digitalWrite(relay_2, HIGH); // Make sure door is locked + digitalWrite(Light, LOW); + // Init timer + Timer1.initialize(1000); // initialize timer1, and set a 1/2 second period + Timer1.attachInterrupt(funcHandler); // Every x_us + Serial.begin(9600); // Initialize serial communications with PC +} + +///////////////////////////////////////// Main Loop /////////////////////////////////// +void loop() +{ + ReadButton(); + SerialRead(); + CheckButton(); +} + +//----------- Full Function ----------------// +void funcHandler() { + // Relay 1 + if ( kickFlag_1 == true ) { + countFlagRelay_1 ++; + if ( countFlagRelay_1 >= Time_openRelay ) { + countFlagRelay_1 = 0; + kickFlag_1 = false; + digitalWrite(relay, HIGH); // Unlock relay 1 + //Serial.println("Lock 1"); + } + } + // Relay 2 + if ( kickFlag_2 == true ) { + countFlagRelay_2 ++; + if ( countFlagRelay_2 >= Time_openRelay ) { + countFlagRelay_2 = 0; + kickFlag_2 = false; + digitalWrite(relay_2, HIGH); // Unlock relay 1 + //Serial.println("Lock 2"); + } + } + + +} +// ADD Code +void ReadButton() +{ + stt = digitalRead(button); + stt_2 = digitalRead(button_2); + + if (stt == 0 && stt_old == 1) + { + relay_stt = true; + //Serial.println("Button 1 press"); + } + else + { + relay_stt = false; + } + if (stt_2 == 0 && stt_old_2 == 1) + { + //Serial.println("Button 2 press"); + relay_stt_2 = true; + } + else + { + relay_stt_2 = false; + } + + stt_old = stt; + stt_old_2 = stt_2; +} + + +void SerialRead() +{ + while (Serial.available() > 0) + { + input = Serial.readStringUntil('\r'); + //Serial.println(input); + input.trim(); + if(input.indexOf("tdoor")!= -1){ // msg = tdoor_6 + int t = input.substring(6).toInt(); + if (t !=0 && t <=30){ + Time_openRelay = t*1000; + }else{ + // Give time old get + } + } + else if (input.indexOf("time_set")!= -1){ + timestart = input.substring(8); + hour_st=timestart.substring(0,2).toInt(); + + + minute_st=timestart.substring(3,5).toInt(); + second_st=timestart.substring(6,8).toInt(); + day_st=timestart.substring(9,11).toInt(); + String month_st=timestart.substring(12,14); + if(month_st.indexOf("0")!= -1){ + int vitri0 = month_st.indexOf("0"); //5 + String Str7 = month_st.substring(vitri0+1,vitri0+2); + month_st=Str7; + }else{ + + } + int month_st1=month_st.toInt(); + year_st=timestart.substring(17,19).toInt(); + thu_st=timestart.substring(20,22).toInt(); + setTime(hour_st, minute_st, second_st, thu_st, day_st, month_st1, year_st); // 12:30:45 CN 08-02-2015 + } + else if (input == "3") { + if (Light_stt == false) { + TurnOn_Light(); + } + Serial.println("open_3"); + ClearSerialdata(); + + } else if (input == "4") { + + if (Light_stt == true) { + TurnOff_Light(); + + } + Serial.println("open_4"); + ClearSerialdata(); + } + else if (input == "1") + { + + if (relay_stt == false) + { + relay_stt = true; + } + Serial.println("open_1"); + ClearSerialdata(); + } else if (input == "2") + { + + if (relay_stt_2 == false) + { + relay_stt_2 = true; + } + Serial.println("open_2"); + ClearSerialdata(); + }else if (input == "5") { + readDS1307(); + digitalClockDisplay(); + ClearSerialdata(); + } else + { + digitalWrite(13, LOW); + } + } + ClearSerialdata(); +} + + +void CheckButton() +{ + if (relay_stt == true) + { + digitalWrite(relay, LOW); // Unlock relay 1' + noInterrupts(); //Hủy các ngắt trước đó. + kickFlag_1 = true; + interrupts(); //Cho phép ngắt + relay_stt = false; + ClearSerialdata(); + } + + //------------------------- + if (relay_stt_2 == true) + { + digitalWrite(relay_2, LOW); // Unlock relay 1 + kickFlag_2 = true; + relay_stt_2 = false; + ClearSerialdata(); + } +} +// Turn on Light camera +void TurnOn_Light() { + digitalWrite(Light, HIGH); + Light_stt = true; +} +void TurnOff_Light() { + digitalWrite(Light, LOW); + Light_stt = false; +} + + +void ClearSerialdata() +{ + while (Serial.available() > 0) + { + char c = Serial.read(); + } +} +//get time từ ds1307 +void readDS1307() +{ + Wire.beginTransmission(DS1307); + Wire.write((byte)0x00); + Wire.endTransmission(); + Wire.requestFrom(DS1307, NumberOfFields); + + second = bcd2dec(Wire.read() & 0x7f); + minute = bcd2dec(Wire.read() ); + hour = bcd2dec(Wire.read() & 0x3f); // chế độ 24h. + wday = bcd2dec(Wire.read() ); + day = bcd2dec(Wire.read() ); + month = bcd2dec(Wire.read() ); + year = bcd2dec(Wire.read() ); + year += 2000; +} +/* Chuyển từ format BCD (Binary-Coded Decimal) sang Decimal */ +int bcd2dec(byte num) +{ + return ((num / 16 * 10) + (num % 16)); +} +/* Chuyển từ Decimal sang BCD */ +int dec2bcd(byte num) +{ + return ((num / 10 * 16) + (num % 10)); +} +void digitalClockDisplay() { + // digital clock display of the time + Serial.print(hour); + printDigits(minute); + printDigits(second); + Serial.print(" "); + Serial.print(day); + Serial.print(" "); + Serial.print(month); + Serial.print(" "); + Serial.print(year); + Serial.println(); +} +void printDigits(int digits) { + // các thành phần thời gian được ngăn chách bằng dấu : + Serial.print(":"); + + if (digits < 10) + Serial.print('0'); + Serial.print(digits); +} +void setTime(byte hr, byte min, byte sec, byte wd, byte d, byte mth, byte yr) // byte wd, +{ + Wire.beginTransmission(DS1307); + Wire.write(byte(0x00)); // đặt lại pointer + Wire.write(dec2bcd(sec)); + Wire.write(dec2bcd(min)); + Wire.write(dec2bcd(hr)); + Wire.write(dec2bcd(wd)); // day of week: Sunday = 1, Saturday = 7 + Wire.write(dec2bcd(d)); + Wire.write(dec2bcd(mth)); + Wire.write(dec2bcd(yr)); + Wire.endTransmission(); +} +//////////////////////////////////////