#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h>
// ---------------- Display Pins ----------------
#define TFT_CS 5
#define TFT_DC 2
#define TFT_RST 4
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);
// ---------------- Button, Buzzer & LED ----------------
#define BUTTON_PIN 12
#define BUZZER_PIN 14
#define LED_PIN 27
// Tap detection
int tapCount = 0;
unsigned long lastTapTime = 0;
#define REQUIRED_TAPS 3
#define TAP_DELAY 1000
void setup() {
Serial.begin(115200);
pinMode(BUTTON_PIN, INPUT_PULLUP);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(LED_PIN, OUTPUT);
// Init display
tft.begin();
tft.fillScreen(ILI9341_BLACK);
tft.setTextColor(ILI9341_WHITE);
tft.setTextSize(2);
tft.setCursor(20, 20);
tft.println("Women Safety System Ready");
Serial.println("System Ready. Press button 3 times.");
}
void loop() {
if (digitalRead(BUTTON_PIN) == LOW) { // button pressed
if (millis() - lastTapTime > 300) { // debounce
tapCount++;
lastTapTime = millis();
Serial.printf("Tap %d detected\n", tapCount);
// Beep feedback
digitalWrite(BUZZER_PIN, HIGH);
delay(100);
digitalWrite(BUZZER_PIN, LOW);
// Show on display
tft.fillRect(20, 60, 220, 30, ILI9341_BLACK);
tft.setCursor(20, 60);
tft.print("Tap Count: ");
tft.println(tapCount);
}
}
// Reset tap count if timeout
if (millis() - lastTapTime > TAP_DELAY && tapCount > 0) {
tapCount = 0;
tft.fillRect(20, 100, 220, 30, ILI9341_BLACK);
tft.setCursor(20, 100);
tft.println("Tap Timeout - Reset");
}
// Trigger emergency
if (tapCount >= REQUIRED_TAPS) {
triggerAlert();
tapCount = 1;
}
}
void triggerAlert() {
Serial.println("🚨 Emergency Alert Triggered!");
tft.fillScreen(ILI9341_RED);
tft.setTextColor(ILI9341_WHITE);
tft.setTextSize(3);
tft.setCursor(20, 100);
tft.println("EMERGENCY ALERT!");
// Buzzer + LED ON
digitalWrite(LED_PIN, HIGH);
digitalWrite(BUZZER_PIN, HIGH);
delay(1500);
digitalWrite(LED_PIN, LOW);
digitalWrite(BUZZER_PIN, LOW);
delay(2000);
// Reset screen
tft.fillScreen(ILI9341_BLACK);
tft.setTextColor(ILI9341_WHITE);
tft.setTextSize(2);
tft.setCursor(20, 20);
tft.println("Women Safety System Ready");
}