#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Keypad.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define SDA_PIN 20
#define SCL_PIN 21
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
const int triggerPins[] = {2, 3, 4, 5};
const int echoPins[] = {6, 7, 8, 9};
const int sensorCount = 4;
const int thresholdDistance = 100;
const int ledCount = 10;
const int ledPins[] = {22, 23, 24, 25, 26, 27, 28, 29, 30, 31};
const int buzzerPin = 32;
const int buzzerThresholdDistance = 50;
const byte ROWS = 4;
const byte COLS = 3;
char keys[ROWS][COLS] = {
{'1', '2', '3'},
{'4', '5', '6'},
{'7', '8', '9'},
{'*', '0', '#'}
};
byte rowPins[ROWS] = {34, 35, 36, 37};
byte colPins[COLS] = {38, 39, 40};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
const char correctPass[] = "3510";
bool systemActive = false;
void setup() {
Serial.begin(9600);
Wire.begin();
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 başlatılamadı!"));
for (;;);
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println("Lutfen sifre girin ardindan # ye basin:");
display.display();
pinMode(buzzerPin, OUTPUT);
}
void loop() {
char key = keypad.getKey();
if (key) {
checkPassword(key);
}
if (systemActive) {
for (int i = 0; i < sensorCount; i++) {
int distance = getDistance(i);
display.setCursor(0, i * 10);
display.print("Sensor");
display.print(i + 1);
display.print(":");
display.print(distance);
display.println("cm");
updateLEDBar(distance);
updateBuzzer(distance);
determineDirection(i, distance);
}
display.display();
delay(1000);
display.clearDisplay();
}
}
int getDistance(int index) {
pinMode(triggerPins[index], OUTPUT);
digitalWrite(triggerPins[index], LOW);
delayMicroseconds(2);
digitalWrite(triggerPins[index], HIGH);
delayMicroseconds(10);
digitalWrite(triggerPins[index], LOW);
pinMode(echoPins[index], INPUT);
long duration = pulseIn(echoPins[index], HIGH);
return duration * 0.034 / 2;
}
void updateLEDBar(int distance) {
int ledCountToShow = map(distance, 0, thresholdDistance, 0, ledCount);
for (int i = 0; i < ledCount; i++) {
if (i < ledCountToShow) {
analogWrite(ledPins[i], 255);
} else {
analogWrite(ledPins[i], 0);
}
delay(10);
}
}
void determineDirection(int index, int distance) {
display.setCursor(80, index * 10);
if (index == 0) {
display.print(" SagOn");
} else if (index == 1) {
display.print(" SolOn");
} else if (index == 2) {
display.print(" SagArka");
} else if (index == 3) {
display.print(" SolArka");
}
}
void updateBuzzer(int distance) {
if (distance < buzzerThresholdDistance) {
int buzzerFrequency = map(distance, 0, buzzerThresholdDistance, 1000, 2000);
tone(buzzerPin, buzzerFrequency);
} else {
noTone(buzzerPin);
}
}
void checkPassword(char key) {
static char enteredPass[5] = "";
static byte index = 0;
if (key == '#') {
enteredPass[index] = '\0';
if (strcmp(enteredPass, correctPass) == 0) {
systemActive = true;
display.clearDisplay();
display.setCursor(0, 0);
display.println("Sistem Aktif");
display.display();
delay(2000);
display.clearDisplay();
} else {
display.clearDisplay();
display.setCursor(0, 0);
display.println("Hatali Sifre!");
display.display();
delay(2000);
display.clearDisplay();
display.setCursor(0, 0);
display.println("Lutfen sifre girin:");
display.display();
}
memset(enteredPass, 0, sizeof(enteredPass));
index = 0;
} else if (index < 4) {
enteredPass[index++] = key;
}
}