
Uzun aradan sonra küçük de olsa bir Arduino denemesi yapayım dedim.
Devrede yer alan dirençlerin değerleri aşağıdaki gibidir.
- Butonları GND’ye bağlayan direçler 10kohm
- LED’lere bağlı olanlar 330ohm
#include <Arduino.h>
#include <Servo.h>
#include <LiquidCrystal.h>
void KapasiteGuncelle();
void aracGirisCisikLedKontrol();
int servoSonrakiAci = 90;
const int aracCikisPin = 22; // Araç çıkış sensörü pini
const int aracGirisPin = 23; // Araç giriş sensörü pini
const int kirmiziLedPin = 24; // Kırmızı LED pini
const int sariLedPin = 25; // Sarı LED pini
const int yesilLedPin = 26; // Yeşil LED pini
const int servoPin = 44; // Servo motor pini
const int buzzerPin = 28; // Buzzer pini
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // RS, E, D4, D5, D6, D7
Servo myServo;
const int toplamArac = 5; // Toplam araç kapasitesi
int doluArac = 0;
bool aracGiris = false;
bool aracCikis = false;
void setup()
{
pinMode(aracCikisPin, INPUT);
pinMode(aracGirisPin, INPUT);
pinMode(kirmiziLedPin, OUTPUT);
pinMode(sariLedPin, OUTPUT);
pinMode(yesilLedPin, OUTPUT);
pinMode(servoPin, OUTPUT);
pinMode(buzzerPin, OUTPUT);
lcd.begin(16, 2);
myServo.attach(servoPin);
myServo.write(0);
servoSonrakiAci = 90;
Serial.begin(9600);
Serial.println("Park Yeri Sistemi Basladi");
KapasiteGuncelle();
digitalWrite(buzzerPin, HIGH);
}
void loop()
{
aracGiris = digitalRead(aracGirisPin);
aracCikis = digitalRead(aracCikisPin);
if (aracGiris == HIGH && doluArac < toplamArac)
{
digitalWrite(buzzerPin, LOW);
delay(200);
digitalWrite(buzzerPin, HIGH);
aracGirisCisikLedKontrol();
doluArac++;
Serial.println("Arac Girdi. Dolu Arac Sayisi: " + String(doluArac));
myServo.write(90);
delay(1000);
myServo.write(0);
KapasiteGuncelle();
while (digitalRead(aracGirisPin) == HIGH);
}
if (aracCikis == HIGH && doluArac > 0)
{
digitalWrite(buzzerPin, LOW);
delay(200);
digitalWrite(buzzerPin, HIGH);
aracGirisCisikLedKontrol();
doluArac--;
Serial.println("Arac Cikti. Dolu Arac Sayisi: " + String(doluArac));
myServo.write(90);
delay(1000);
myServo.write(0);
KapasiteGuncelle();
while (digitalRead(aracCikisPin) == HIGH);
}
}
void KapasiteGuncelle()
{
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Omer&Faruk Park");
lcd.setCursor(0, 1);
lcd.print("Dolu: ");
lcd.print(doluArac);
lcd.setCursor(9, 1);
lcd.print("Bos: ");
lcd.print(toplamArac - doluArac);
if (doluArac < toplamArac)
{
digitalWrite(kirmiziLedPin, LOW);
digitalWrite(sariLedPin, LOW);
digitalWrite(yesilLedPin, HIGH);
}
else
{
digitalWrite(kirmiziLedPin, HIGH);
digitalWrite(sariLedPin, LOW);
digitalWrite(yesilLedPin, LOW);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("PARK YERI DOLU");
lcd.setCursor(0, 1);
lcd.print("Lutfen Bekleyin");
}
}
void aracGirisCisikLedKontrol() {
digitalWrite(yesilLedPin, LOW);
digitalWrite(sariLedPin, HIGH);
digitalWrite(kirmiziLedPin, LOW);
}