#include #include #include int pir = 0; int mode = 0; int i; int reset = 1; byte bt[1]={0}; String sdt = "0703696455"; SoftwareSerial gsm(4,5); AltSoftSerial ss; TinyGPSPlus gps; void gsm_setup(); void gsm_alert(); void gsm_button(); void choosemode(); void setup() { Serial.begin(9600); gsm.begin(9600); ss.begin(9600); pinMode(12, OUTPUT); pinMode(11, OUTPUT); pinMode(13, INPUT); pinMode(10, INPUT); attachInterrupt(digitalPinToInterrupt(2),choosemode,RISING); gsm_setup(); } void loop() { while (ss.available()) gps.encode(ss.read()); pir = digitalRead(10); while (Serial.available()) { Serial.readBytes(bt,1); } switch (bt[0]) { case 0: { break; } case 1: { reset=1; bt[0]=0; break; } } delay(1000); switch (mode) { case 0: { break; } case 1: { if (pir == HIGH) { if (reset == 1) { digitalWrite(11, HIGH); delay(1000); digitalWrite(11, LOW); delay(1000); gsm_alert(); Serial.write(1); reset=0; break; } else { break; } } else { break; } } } } void gsm_setup() { gsm.println("ATE0"); delay(1000); gsm.println("AT+IPR=9600"); delay(1000); gsm.println("AT+CMGF=1"); delay(1000); gsm.println("AT+CLIP=1"); delay(2000); gsm.println("AT+CNMI=2,2,0,0,0"); delay(2000); } void gsm_alert() { gsm.println("AT+CMGS=\"" + sdt + "\""); delay(3000); if (gps.time.isValid()) { int realhour = gps.time.hour() + 7; if (realhour > 24) realhour = realhour - 24; if (realhour < 10) gsm.print("0"); gsm.print(realhour); gsm.print(":"); if (gps.time.minute() < 10) gsm.print("0"); gsm.print(gps.time.minute()); gsm.print(":"); if (gps.time.second() < 10) gsm.print("0"); gsm.print(gps.time.second()); } else { gsm.print("INVALID"); } gsm.print(" Co ke dot nhap"); delay(100); gsm.println((char)26); delay(100); } void choosemode() { switch (mode) { case 0: { reset=1; mode=1; digitalWrite(11, HIGH); delay(1000); digitalWrite(11,LOW); delay(1000); break; } case 1: { mode=0; digitalWrite(12, HIGH); delay(1000); digitalWrite(12, LOW); delay(1000); break; } } }