#include #include SoftwareSerial sim(6, 5); String buffer; String numbers[] = { "09998876775", "09876543210", "09335540308" // example }; int totalNumbers = 3; //number of phone numbers int gled = 7; int yled = 4; int rled = 3; int brightness = 0; int fadeRate = 5; int piezo = 8; int beepCount = 1; const int maxBeepCountY = 3; const int maxBeepCountR = 10; String inString = ""; int data = 0; int syncWord = 0x26; int waterSensorCM = 0; int waterLevel = 0; void setup() { Serial.begin(9600); buffer.reserve(200); sim.begin(9600); pinMode(gled, OUTPUT); pinMode(yled, OUTPUT); pinMode(rled, OUTPUT); pinMode(piezo, OUTPUT); while (!Serial); Serial.println("LoRa Receiver"); if (!LoRa.begin(433E6)) { Serial.println("Starting LoRa failed!"); while (1); } LoRa.setSpreadingFactor(12); LoRa.setSignalBandwidth(62.5E3); LoRa.setCodingRate4(8); LoRa.setSyncWord(syncWord); } void loop() { int packetSize = LoRa.parsePacket(); if (packetSize) { inString = ""; while (LoRa.available()) { int inChar = LoRa.read(); inString += (char)inChar; data = inString.toInt(); } data = inString.toInt(); int firstComma = inString.indexOf(','); if (firstComma == -1) { if (data == 11) { digitalWrite(gled, LOW); digitalWrite(yled, HIGH); digitalWrite(rled, LOW); if (beepCount <= maxBeepCountY) { tone(piezo, 1000); delay(300); noTone(piezo); delay(200); beepCount++; } Serial.println("Status Code: Code Yellow! WARNING! Water detected!"); } else { waterSensorCM = data; Serial.print("Water Depth: "); Serial.print(waterSensorCM); Serial.println("cm"); } } else { data = inString.substring(0, firstComma).toInt(); waterLevel = inString.substring(firstComma + 1).toInt(); Serial.println("Status Code: Code Red! WARNING! Water has accumulated to 2 inches!"); Serial.print("Water Level: "); Serial.println(waterLevel); String msg = "⚠ Potential flood detected! Water has reached " + String(waterLevel) + " cm and is rapidly increasing."; sendAllNumbers(msg); Serial.println("SMS Sent!"); } Serial.print("RSSI: "); Serial.println(LoRa.packetRssi()); } } void sendSMS(String number, String message) { sim.println("AT+CMGF=1"); delay(200); sim.print("AT+CMGS=\""); sim.print(number); sim.println("\""); delay(200); sim.println(message); sim.write(26); delay(5000); } void sendAllNumbers(String message) { for (int i = 0; i < totalNumbers; i++) { sendSMS(numbers[i], message); Serial.print("Message sent to: "); Serial.println(numbers[i]); } }