Untitled
unknown
plain_text
4 years ago
4.5 kB
5
Indexable
#include "DHT.h" #include <SPI.h> #include <MFRC522.h> DHT dht(2, DHT22); // temperature and humidity pin MFRC522 mfrc522(10, 9); // ss pin and rst pin for rfid //bool one_time_sms; String sms_data; String dht_state = "IDLE"; String gas_state = "IDLE"; String motion_state = "IDLE"; bool is_armed = false; void setup() { pinMode(8, INPUT); // motion pin pinMode(5, OUTPUT); // buzzer pin pinMode(A1, OUTPUT); //red pin pinMode(A2, OUTPUT); // green pin pinMode(A3, OUTPUT); // blue pin dht.begin(); Serial.begin(9600); SPI.begin(); // Initiate SPI bus mfrc522.PCD_Init(); // Initiate MFRC522 //one_time_sms = true; analogWrite(A2, 255); // green color analogWrite(A1, 0); analogWrite(A3, 0); } void loop() { checkRFIDAccess(); if(is_armed == true) { if(dht_state == "ALARM") { buzzerOn(); } else { readDHTdata(); if(dht_state == "WARNING") { sendSMS(); dht_state == "ALARM"; } } if(motion_state == "ALARM") { buzzerOn(); } else { readMotiondata(); if(motion_state == "WARNING") { sendSMS(); motion_state == "ALARM"; } } } } void sendSMS() { Serial.println("Sending SMS..."); //Show this message on serial monitor Serial.print("AT+CMGF=1\r"); //Set the module to SMS mode delay(100); Serial.print("AT+CMGS=\"+48783905878\"\r"); delay(500); Serial.print(sms_data); delay(500); Serial.print((char)26);// (required according to the datasheet) delay(500); Serial.println(); Serial.println("Text Sent."); delay(500); } bool readDHTdata() { float temperature; float humidity; // to be configured float max_temp = 35.0; float min_temp = 0.0; float max_hum = 99.0; humidity = dht.readHumidity(); temperature = dht.readTemperature(); temperature = dht.computeHeatIndex(temperature,humidity,false); if (isnan(humidity) || isnan(temperature)) { Serial.println("Failed to read from DHT sensor!"); return false; } if((temperature > max_temp || temperature < min_temp || humidity > max_hum) && dht_state == "IDLE") { dht_state = "WARNING"; Serial.println("DHT sensor changes state to WARNING!"); } sms_data = ("Temperature: " + String(temperature) + "*C " + " Humidity: " + String(humidity) + "%"); // For testing purpose Serial.print("Humidity: "); Serial.print(humidity); Serial.print(" %\t"); Serial.print("Temperature: "); Serial.print(temperature); Serial.print(" *C "); return true; } bool readMotiondata() { int motion_value; motion_value=digitalRead(8); // motion pin if (isnan(motion_value)) { Serial.println("Failed to read from Gas sensor!"); return false; } if(motion_value == HIGH && motion_state == "IDLE") { sms_data = ("Motion detected!"); motion_state = "WARNING"; Serial.println("Motion sensor changes state to WARNING!"); } return true; } void checkRFIDAccess() { if ( ! mfrc522.PICC_IsNewCardPresent()) { return; } if ( ! mfrc522.PICC_ReadCardSerial()) { return; } //Show UID on serial monitor Serial.print("UID tag :"); String content= ""; byte letter; for (byte i = 0; i < mfrc522.uid.size; i++) { Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "); Serial.print(mfrc522.uid.uidByte[i], HEX); content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ")); content.concat(String(mfrc522.uid.uidByte[i], HEX)); } content.toUpperCase(); if (content.substring(1) == "A9 ED 0A B3") //card UID { is_armed = true; Serial.println("Alarm uzbrojony"); Serial.println(); analogWrite(A3, 255); // blue color analogWrite(A1, 0); analogWrite(A2, 0); } else if (content.substring(1) == "D9 6D 98 B8") //brelok UID { is_armed = false; dht_state = "IDLE"; gas_state = "IDLE"; motion_state = "IDLE"; Serial.println("Alarm rozbrojony"); Serial.println(); analogWrite(A2, 255); // green color analogWrite(A1, 0); analogWrite(A3, 0); } else { Serial.println(" Access denied"); } } void buzzerOn() { analogWrite(A1, 255); // red color analogWrite(A2, 0); analogWrite(A3, 0); digitalWrite(5,HIGH); // buzzer pin delayMicroseconds((1000000/2700)/2); // 2700 is a frequency in Hz digitalWrite(5,LOW); // buzzer pin delayMicroseconds((1000000/2700)/2); // 2700 is a frequency in Hz } //TODO kontrakton BT
Editor is loading...