CODE
#include <Servo.h>
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>
#define TFT_CS 10
#define TFT_RST 8
#define TFT_DC 9
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
#define trigPin 6
#define echoPin 5
#define servoPin 3
#define buzzerPin 4 // NEW
Servo myServo;
int centerX = 78;
int baseY = 150;
int radius = 100;
long duration;
int distance;
unsigned long lastBeepTime = 0;
void setup() {
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(buzzerPin, OUTPUT); // NEW
myServo.attach(servoPin);
tft.initR(INITR_BLACKTAB);
tft.setRotation(1);
tft.fillScreen(ST77XX_BLACK);
drawRadarFrame();
}
void drawRadarFrame() {
tft.drawCircle(centerX, baseY, 100, ST77XX_GREEN);
tft.drawCircle(centerX, baseY, 70, ST77XX_GREEN);
tft.drawCircle(centerX, baseY, 40, ST77XX_GREEN);
tft.drawLine(0, baseY, 128, baseY, ST77XX_GREEN);
}
int getDistance() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
return duration * 0.034 / 2;
}
// 🔹 Display Angle & Distance
void displayInfo(int angle, int distance) {
tft.fillRect(0, 0, 128, 20, ST77XX_BLACK);
tft.setCursor(0, 5);
tft.setTextColor(ST77XX_WHITE);
tft.setTextSize(1);
tft.print("Angle:");
tft.print(angle);
tft.setCursor(70, 5);
tft.print("D:");
tft.print(distance);
tft.print("cm");
}
// 🔹 Controlled Beep (non-continuous)
void handleBuzzer(int distance) {
if (distance < 100) {
if (millis() - lastBeepTime > 200) { // control beep speed
digitalWrite(buzzerPin, HIGH);
delay(40);
digitalWrite(buzzerPin, LOW);
lastBeepTime = millis();
}
} else {
digitalWrite(buzzerPin, LOW);
}
}
void loop() {
for (int angle = 0; angle <= 180; angle += 3) {
myServo.write(angle);
distance = getDistance();
displayInfo(angle, distance);
handleBuzzer(distance);
int x = centerX + radius * cos(radians(angle));
int y = baseY - radius * sin(radians(angle));
// erase previous
tft.drawLine(centerX, baseY, x, y, ST77XX_BLACK);
// draw scan
tft.drawLine(centerX, baseY, x, y, ST77XX_GREEN);
if (distance < 100) {
int dx = centerX + distance * cos(radians(angle));
int dy = baseY - distance * sin(radians(angle));
tft.fillCircle(dx, dy, 2, ST77XX_RED);
}
delay(15);
}
for (int angle = 180; angle >= 0; angle -= 3) {
myServo.write(angle);
distance = getDistance();
displayInfo(angle, distance);
handleBuzzer(distance);
int x = centerX + radius * cos(radians(angle));
int y = baseY - radius * sin(radians(angle));
tft.drawLine(centerX, baseY, x, y, ST77XX_BLACK);
tft.drawLine(centerX, baseY, x, y, ST77XX_GREEN);
if (distance < 100) {
int dx = centerX + distance * cos(radians(angle));
int dy = baseY - distance * sin(radians(angle));
tft.fillCircle(dx, dy, 2, ST77XX_RED);
}
delay(15);
}
}
