#include <SoftwareSerial.h>
// Define pin numbers
const int lowTrigPin = 2;
const int lowEchoPin = 3;
const int highTrigPin = 12;
const int highEchoPin = 13;
const int buzzerPin = 8;
const int emergencyButtonPin = 4; // Emergency button pin
// Simulate GPS and GSM module pins
SoftwareSerial gpsSerial(7, 6); // RX, TX for GPS
SoftwareSerial gsmSerial(0, 1); // RX, TX for GSM (Using different pins to avoid conflict with Serial Monitor)
// Define duration and distance variables
long lowDuration, lowDistance;
long highDuration, highDistance;
void setup() {
// Initialize Serial Monitor
Serial.begin(9600);
// Initialize pins for sensors and modules
pinMode(lowTrigPin, OUTPUT);
pinMode(lowEchoPin, INPUT);
pinMode(highTrigPin, OUTPUT);
pinMode(highEchoPin, INPUT);
pinMode(buzzerPin, OUTPUT);
pinMode(emergencyButtonPin, INPUT_PULLUP); // Use internal pull-up resistor
// Initialize GPS and GSM modules
gpsSerial.begin(9600);
gsmSerial.begin(9600);
sendGSMCommand("AT");
sendGSMCommand("AT+CMGF=1"); // Set SMS to text mode
}
void loop() {
// Read emergency button state
bool emergencyButtonPressed = digitalRead(emergencyButtonPin) == LOW; // Button pressed
// Low obstacle detection
lowDistance = getDistance(lowTrigPin, lowEchoPin);
// High obstacle detection
highDistance = getDistance(highTrigPin, highEchoPin);
// Handle emergency button press
if (emergencyButtonPressed) {
handleEmergency();
} else if (lowDistance < 20) {
tone(buzzerPin, 1000); // Low tone for low obstacle
Serial.println("Low obstacle detected: " + String(lowDistance) + " cm");
} else if (highDistance < 20) {
tone(buzzerPin, 2000); // High tone for high obstacle
Serial.println("High obstacle detected: " + String(highDistance) + " cm");
} else {
noTone(buzzerPin);
Serial.println("No obstacles detected");
}
delay(500);
}
long getDistance(int trigPin, int echoPin) {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
return duration * 0.034 / 2;
}
String getGPSLocation() {
// Simulate GPS location data
return "Lat: 36.778259, Lon: -119.417931";
}
void sendEmergencySMS(String message, String location) {
Serial.print("Sending SMS: ");
Serial.println(message + ": " + location);
gsmSerial.print("AT+CMGS=\"+21623574721\"\r"); // Replace with actual phone number
delay(100);
gsmSerial.print(message + ": " + location);
delay(100);
gsmSerial.write(26); // ASCII code for Ctrl+Z to send SMS
}
void sendGSMCommand(String command) {
gsmSerial.println(command);
delay(100);
while (gsmSerial.available()) {
char c = gsmSerial.read();
Serial.print(c);
}
Serial.println();
}
void handleEmergency() {
tone(buzzerPin, 4000); // High tone for emergency
String location = getGPSLocation();
Serial.println("Emergency button pressed, sending SMS...");
sendEmergencySMS("Emergency button pressed", location);
}