#include <Servo.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
Servo servo;
const int trigPin = 10;
const int echoPin = 11;
const int Rpin = 3;
const int Gpin = 5;
const int Bpin = 6;
const int buzzer = 7;
long duration;
int distance;
void rgb(int r, int g, int b) {
analogWrite(Rpin, r);
analogWrite(Gpin, g);
analogWrite(Bpin, b);
}
int getDistance() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2;
return distance;
}
void setup() {
servo.attach(9);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(Rpin, OUTPUT);
pinMode(Gpin, OUTPUT);
pinMode(Bpin, OUTPUT);
pinMode(buzzer, OUTPUT);
oled.begin(SSD1306_SWITCHCAPVCC, 0x3C);
oled.clearDisplay();
oled.setTextSize(1);
oled.setTextColor(SSD1306_WHITE);
oled.setCursor(0, 0);
oled.println("Radar v3 Booting...");
oled.display();
delay(1000);
}
void loop() {
for (int angle = 0; angle <= 180; angle++) {
servo.write(angle);
int dist = getDistance();
oled.clearDisplay();
oled.setCursor(0, 0);
oled.print("Angle: ");
oled.print(angle);
oled.setCursor(0, 10);
oled.print("Distance: ");
oled.print(dist);
oled.print(" cm");
oled.drawLine(64, 63, 64 + (sin(radians(angle)) * 60), 63 - (cos(radians(angle)) * 60), SSD1306_WHITE);
oled.display();
if (dist < 10 && dist > 0) {
rgb(255, 0, 0);
tone(buzzer, 900);
}
else if (dist < 30) {
rgb(255, 150, 0);
noTone(buzzer);
}
else {
rgb(0, 255, 0);
noTone(buzzer);
}
delay(0);
}
for (int angle = 180; angle >= 0; angle--) {
servo.write(angle);
int dist = getDistance();
oled.clearDisplay();
oled.setCursor(0, 0);
oled.print("Angle: ");
oled.print(angle);
oled.setCursor(0, 10);
oled.print("Distance: ");
oled.print(dist);
oled.print(" cm");
oled.drawLine(64, 63, 64 + (sin(radians(angle)) * 60), 63 - (cos(radians(angle)) * 60), SSD1306_WHITE);
oled.display();
if (dist < 10 && dist > 0) {
rgb(255, 0, 0);
tone(buzzer, 900);
}
else if (dist < 30) {
rgb(255, 150, 0);
noTone(buzzer);
}
else {
rgb(0, 255, 0);
noTone(buzzer);
}
delay(40);
}
}