#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Pin definitions
#define RSSI_PIN PA0
#define MOTOR_PIN PA8
#define BUZZER_PIN PB10
#define LASER_PIN PB11
#define EMG_BTN PB12
void setup() {
pinMode(MOTOR_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(LASER_PIN, OUTPUT);
pinMode(EMG_BTN, INPUT_PULLUP);
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("Border Alert");
lcd.setCursor(0,1);
lcd.print("System Ready");
delay(2000);
lcd.clear();
}
void loop() {
int rssiValue = analogRead(RSSI_PIN); // 0–4095 STM32
int emergency = digitalRead(EMG_BTN);
// Emergency Mode
if (emergency == LOW) {
analogWrite(MOTOR_PIN, 0);
digitalWrite(BUZZER_PIN, HIGH);
digitalWrite(LASER_PIN, HIGH);
lcd.setCursor(0,0);
lcd.print("EMERGENCY !!! ");
lcd.setCursor(0,1);
lcd.print("STOP BOAT ");
delay(500);
return;
}
digitalWrite(BUZZER_PIN, LOW);
digitalWrite(LASER_PIN, LOW);
// SAFE ZONE
if (rssiValue > 2500) {
analogWrite(MOTOR_PIN, 255);
lcd.setCursor(0,0);
lcd.print("Status: SAFE ");
lcd.setCursor(0,1);
lcd.print("Speed: HIGH ");
}
// WARNING ZONE
else if (rssiValue > 1500) {
analogWrite(MOTOR_PIN, 120);
digitalWrite(BUZZER_PIN, HIGH);
lcd.setCursor(0,0);
lcd.print("Status: WARN ");
lcd.setCursor(0,1);
lcd.print("Slow Down ");
}
// DANGER ZONE
else {
analogWrite(MOTOR_PIN, 0);
digitalWrite(BUZZER_PIN, HIGH);
digitalWrite(LASER_PIN, HIGH);
lcd.setCursor(0,0);
lcd.print("DANGER ZONE ");
lcd.setCursor(0,1);
lcd.print("STOP BOAT ");
}
delay(500);
}