(DİKKAT! BU YAPILMASI ÇOK ZOR BİR PROJEDİR VE BÜYÜK KOD İÇERİR!)
Siz de DJ SETUP yapmak isterseniz işte gerekenler, şema ve kodlar!
- Arduino Uno
- 16×2 I2C LCD Ekran
- 1x 10K Potansiyometre
- 2x 5mm Push Buton
- 1x 0.96″ OLED 128×64 SSD1306 I2C OLED Ekran
- 7x LED (2x Sarı, 2x Mavi, 2x Yeşil, 1x Kırmızı*)
- 7x 220 Ohm Direnç
- 1x Breadboard
- 1x Orta Breadboard
- 1x Hoparlör
- Jumper Kablolar

ve kodlar…
#include <Arduino.h>
#include <Wire.h>
#include <U8g2lib.h>
#include <LiquidCrystal_I2C.h>
#include <avr/pgmspace.h>
// ================= OLED =================
U8G2_SSD1306_128X64_NONAME_1_SW_I2C oled(
U8G2_R0,
11,
12,
U8X8_PIN_NONE
);
LiquidCrystal_I2C lcd(0x27, 16, 2);
// ================= PINLER =================
const byte buzzerPin = 10;
const byte potPin = A0;
const byte btnAsagi = 9;
const byte btnSec = 13;
const byte ledD2 = 2;
const byte ledD3 = 3;
const byte ledD4 = 4;
const byte ledD5 = 5;
const byte ledD6 = 6;
const byte ledD7 = 7;
const byte ledD8 = 8;
// ================= NOTALAR =================
#define NOTE_DO4 262
#define NOTE_RE4 294
#define NOTE_MI4 330
#define NOTE_FA4 349
#define NOTE_SOL4 392
#define NOTE_LA4 440
#define NOTE_SIB4 466
#define NOTE_SI4 494
#define NOTE_DO5 523
#define NOTE_RE5 587
#define NOTE_MI5 659
#define NOTE_FA5 698
#define NOTE_SOL5 784
#define NOTE_LA5 880
#define REST 0
// ================= LCD TÜRKÇE KARAKTERLER =================
byte g_kucuk[] = {
0b01110,
0b00000,
0b01111,
0b10001,
0b10001,
0b01111,
0b00001,
0b01110
};
byte s_kucuk[] = {
0b01111,
0b10000,
0b10000,
0b01110,
0b00001,
0b01111,
0b00100,
0b00000
};
byte i_buyuk[] = {
0b00100,
0b00000,
0b01110,
0b00100,
0b00100,
0b00100,
0b01110,
0b00000
};
byte i_kucuk[] = {
0b00000,
0b00000,
0b01100,
0b00100,
0b00100,
0b00100,
0b01110,
0b00000
};
byte c_kucuk[] = {
0b00000,
0b00000,
0b01110,
0b10000,
0b10000,
0b01110,
0b00100,
0b00000
};
byte s_buyuk[] = {
0b01111,
0b10000,
0b10000,
0b01110,
0b00001,
0b01111,
0b00100,
0b00000
};
byte c_buyuk[] = {
0b00000,
0b01110,
0b10000,
0b10000,
0b10000,
0b01110,
0b00100,
0b00000
};
// ================= LCD TÜRKÇE =================
void lcdTurkce(const char *metin) {
for (byte i = 0; metin[i] != '\0'; i++) {
byte b1 = (byte)metin[i];
if (b1 == 0xC4 || b1 == 0xC5 || b1 == 0xC3) {
byte b2 = (byte)metin[++i];
if (b1 == 0xC4 && b2 == 0x90)
lcd.write(2);
else if (b1 == 0xC4 && b2 == 0xB1)
lcd.write(3);
else if (b1 == 0xC5 && b2 == 0x91)
lcd.write(1);
else if (b1 == 0xC5 && b2 == 0x9E)
lcd.write(5);
else if (b1 == 0xC3 && b2 == 0xA7)
lcd.write(4);
else if (b1 == 0xC3 && b2 == 0x87)
lcd.write(6);
else if (b1 == 0xC4 && b2 == 0x9F)
lcd.write(0);
else
lcd.print('?');
}
else {
lcd.print((char)b1);
}
}
}
// ================= LED =================
void ledleriKapat() {
digitalWrite(ledD2, LOW);
digitalWrite(ledD3, LOW);
digitalWrite(ledD4, LOW);
digitalWrite(ledD5, LOW);
digitalWrite(ledD6, LOW);
digitalWrite(ledD7, LOW);
digitalWrite(ledD8, LOW);
}
void ledControl(int freq) {
ledleriKapat();
if (freq == NOTE_DO4 || freq == NOTE_DO5)
digitalWrite(ledD2, HIGH);
else if (freq == NOTE_RE4 || freq == NOTE_RE5)
digitalWrite(ledD3, HIGH);
else if (freq == NOTE_MI4 || freq == NOTE_MI5)
digitalWrite(ledD4, HIGH);
else if (freq == NOTE_FA4 || freq == NOTE_FA5)
digitalWrite(ledD5, HIGH);
else if (freq == NOTE_SOL4 || freq == NOTE_SOL5)
digitalWrite(ledD6, HIGH);
else if (freq == NOTE_LA4 || freq == NOTE_LA5 ||
freq == NOTE_SIB4)
digitalWrite(ledD7, HIGH);
else if (freq == NOTE_SI4)
digitalWrite(ledD8, HIGH);
}
// ================= POTANSİYOMETRE =================
int sureHesapla(int sure) {
int pot = analogRead(potPin);
int carpani = map(pot, 0, 1023, 250, 50);
long sonuc = ((long)sure * carpani) / 100;
if (sonuc < 30)
sonuc = 30;
if (sonuc > 4000)
sonuc = 4000;
return (int)sonuc;
}
// ================= BUTON SESLERİ =================
void butonAsagiSesi() {
tone(buzzerPin, 900);
delay(35);
noTone(buzzerPin);
}
void butonSecSesi() {
tone(buzzerPin, 1200);
delay(45);
tone(buzzerPin, 1600);
delay(55);
noTone(buzzerPin);
}
// ================= NOTA =================
void notaCal(int frekans, int sure) {
int gercekSure = sureHesapla(sure);
if (frekans == REST) {
noTone(buzzerPin);
ledleriKapat();
delay(gercekSure);
return;
}
ledControl(frekans);
tone(buzzerPin, frekans);
delay(gercekSure);
noTone(buzzerPin);
ledleriKapat();
}
// ================= MENÜ =================
byte seciliSarki = 0;
void menuCiz() {
oled.firstPage();
do {
oled.setFont(u8g2_font_6x10_tf);
// ÜST BAŞLIK
oled.drawStr(31, 10, "DJ SETUP");
// ANA MENÜ ÇERÇEVESİ
oled.drawLine(8, 14, 119, 14);
oled.drawLine(8, 14, 8, 60);
oled.drawLine(8, 60, 119, 60);
oled.drawLine(119, 14, 119, 60);
// SEÇİLİ ÖĞE ÇERÇEVESİ
if (seciliSarki == 0) {
oled.drawLine(3, 18, 118, 18);
oled.drawLine(3, 18, 3, 32);
oled.drawLine(3, 32, 118, 32);
oled.drawLine(118, 18, 118, 32);
oled.drawStr(7, 28, ">");
}
else if (seciliSarki == 1) {
oled.drawLine(3, 33, 118, 33);
oled.drawLine(3, 33, 3, 47);
oled.drawLine(3, 47, 118, 47);
oled.drawLine(118, 33, 118, 47);
oled.drawStr(7, 43, ">");
}
else {
oled.drawLine(3, 48, 118, 48);
oled.drawLine(3, 48, 3, 62);
oled.drawLine(3, 62, 118, 62);
oled.drawLine(118, 48, 118, 62);
oled.drawStr(7, 58, ">");
}
// ŞARKILAR
oled.drawStr(17, 28, "Izmir Marsi");
oled.drawStr(17, 43, "Istiklal Marsi");
oled.drawStr(17, 58, "Happy Birthday");
} while (oled.nextPage());
}
// ================= ÇALINIYOR EKRANI =================
void oledCaliniyor(const char *sarki) {
oled.firstPage();
do {
oled.setFont(u8g2_font_6x10_tf);
// Dış çerçeve
oled.drawFrame(3, 3, 122, 58);
oled.drawStr(32, 15, "DJ SETUP");
// Ayırıcı çizgi
oled.drawLine(8, 20, 120, 20);
oled.drawStr(5, 35, sarki);
oled.drawStr(5, 52, "CALINIYOR...");
} while (oled.nextPage());
}
// ================= LCD BAŞLANGIÇ =================
void lcdBaslangic() {
lcd.clear();
lcd.setCursor(0, 0);
lcdTurkce("DJ SETUP");
lcd.setCursor(0, 1);
lcdTurkce("Sarki Secin");
}
// ============================================================
// ====================== İZMİR MARŞI =========================
// ============================================================
const uint16_t izmirMelodi[] PROGMEM = {
REST,50,
NOTE_LA4,150,
NOTE_MI5,150,
NOTE_MI5,150,
NOTE_MI5,150,
NOTE_MI5,150,
NOTE_MI5,150,
NOTE_FA5,150,
NOTE_MI5,150,
NOTE_RE5,150,
NOTE_FA5,300,
NOTE_MI5,400,
REST,50,
NOTE_LA4,150,
NOTE_MI5,150,
NOTE_MI5,150,
NOTE_MI5,150,
NOTE_MI5,150,
NOTE_MI5,150,
NOTE_FA5,150,
NOTE_MI5,150,
NOTE_RE5,150,
NOTE_FA5,300,
NOTE_MI5,400,
NOTE_MI5,150,
NOTE_LA5,150,
NOTE_SOL5,150,
NOTE_FA5,150,
NOTE_MI5,150,
NOTE_RE5,150,
NOTE_MI5,150,
NOTE_RE5,150,
NOTE_DO5,150,
NOTE_SI4,150,
NOTE_DO5,400,
NOTE_DO5,150,
NOTE_MI5,150,
NOTE_RE5,150,
NOTE_DO5,150,
NOTE_SI4,150,
NOTE_LA4,150,
NOTE_DO5,150,
NOTE_SI4,150,
NOTE_LA4,150,
NOTE_SOL5,150,
NOTE_LA4,400,
NOTE_MI5,150,
NOTE_LA5,150,
NOTE_SOL5,150,
NOTE_FA5,150,
NOTE_MI5,150,
NOTE_RE5,150,
NOTE_MI5,150,
NOTE_RE5,150,
NOTE_DO5,150,
NOTE_SI4,150,
NOTE_DO5,400,
NOTE_DO5,150,
NOTE_MI5,150,
NOTE_RE5,150,
NOTE_DO5,150,
NOTE_SI4,150,
NOTE_LA4,150,
NOTE_DO5,150,
NOTE_SI4,150,
NOTE_LA4,150,
NOTE_SOL5,150,
NOTE_LA4,400
};
const byte izmirNotaSayisi =
sizeof(izmirMelodi) / sizeof(izmirMelodi[0]) / 2;
void izmirMarsiCal() {
noTone(buzzerPin);
ledleriKapat();
lcd.clear();
lcd.setCursor(0, 0);
lcdTurkce("İzmir Marşı");
lcd.setCursor(0, 1);
lcdTurkce("Çalınıyor...");
oledCaliniyor("IZMIR MARSI");
delay(1200);
for (byte i = 0; i < izmirNotaSayisi; i++) {
int freq = pgm_read_word(&izmirMelodi[i * 2]);
int dur = pgm_read_word(&izmirMelodi[i * 2 + 1]);
notaCal(freq, dur);
}
bitisEkrani();
}
// ============================================================
// ===================== İSTİKLAL MARŞI ========================
// ============================================================
const uint16_t istiklalMelodi[] PROGMEM = {
NOTE_DO5,800,
NOTE_FA5,800,
NOTE_SOL5,800,
830,800,
NOTE_MI5,400,
NOTE_SOL5,200,
NOTE_FA5,1600,
REST,300,
NOTE_FA5,800,
932,800,
1046,800,
1108,800,
880,400,
1046,200,
932,1600,
1046,200,
932,200,
1046,200,
NOTE_SOL5,400,
REST,100,
NOTE_SOL5,400,
466,200,
830,400,
NOTE_MI5,200,
NOTE_FA5,400,
NOTE_SOL5,200,
830,400,
466,200,
1046,400,
1108,200,
622,400,
1396,200,
622,400,
622,200,
NOTE_RE5,200,
622,200,
1046,800,
466,800,
830,1600,
NOTE_DO5,200,
NOTE_SI4,200,
NOTE_DO5,200,
NOTE_SOL5,800,
NOTE_DO5,800,
1046,800,
466,200,
830,200,
NOTE_SOL5,400,
830,200,
NOTE_FA5,800,
1396,800,
622,200,
1108,400,
1046,200,
466,400,
830,200,
NOTE_SOL5,400,
NOTE_FA5,200,
1046,400,
NOTE_DO5,800,
NOTE_FA5,1600,
NOTE_DO5,800,
NOTE_FA5,800,
NOTE_SOL5,800,
830,800,
NOTE_MI5,400,
NOTE_SOL5,200,
NOTE_FA5,1600,
REST,300,
NOTE_FA5,800,
932,800,
1046,800,
1108,400,
932,400,
880,400,
1046,400,
932,800,
1046,200,
932,200,
1046,200,
NOTE_SOL5,400,
REST,100,
NOTE_SOL5,400,
466,200,
830,400,
NOTE_MI5,200,
NOTE_FA5,400,
NOTE_SOL5,200,
830,400,
466,200,
1046,400,
1108,200,
622,400,
1396,200,
622,400,
622,200,
NOTE_RE5,200,
622,200,
1046,800,
466,800,
830,1600,
NOTE_DO5,200,
NOTE_SI4,200,
NOTE_DO5,200,
NOTE_SOL5,800,
NOTE_DO5,800,
1046,800,
466,200,
830,200,
NOTE_SOL5,400,
830,200,
NOTE_FA5,800,
1396,800,
622,200,
1108,400,
1046,200,
466,400,
830,200,
NOTE_SOL5,400,
NOTE_FA5,200,
1046,400,
NOTE_DO5,800,
NOTE_FA5,1600,
REST,300
};
const byte istiklalNotaSayisi =
sizeof(istiklalMelodi) / sizeof(istiklalMelodi[0]) / 2;
void istiklalMarsiCal() {
noTone(buzzerPin);
ledleriKapat();
lcd.clear();
lcd.setCursor(0, 0);
lcdTurkce("İstiklal Marşı");
lcd.setCursor(0, 1);
lcdTurkce("Çalınıyor...");
oledCaliniyor("ISTIKLAL MARSI");
delay(1200);
for (byte i = 0; i < istiklalNotaSayisi; i++) {
int freq = pgm_read_word(&istiklalMelodi[i * 2]);
int dur = pgm_read_word(&istiklalMelodi[i * 2 + 1]);
notaCal(freq, dur);
}
bitisEkrani();
}
// ============================================================
// ==================== HAPPY BIRTHDAY =========================
// ============================================================
const uint16_t birthdayMelodi[] PROGMEM = {
NOTE_DO4,250,
NOTE_DO4,250,
NOTE_RE4,500,
NOTE_DO4,500,
NOTE_FA4,500,
NOTE_MI4,800,
NOTE_DO4,250,
NOTE_DO4,250,
NOTE_RE4,500,
NOTE_DO4,500,
NOTE_SOL4,500,
NOTE_FA4,800,
NOTE_DO4,250,
NOTE_DO4,250,
NOTE_DO5,500,
NOTE_LA4,500,
NOTE_FA4,500,
NOTE_MI4,500,
NOTE_RE4,800,
NOTE_SIB4,250,
NOTE_SIB4,250,
NOTE_LA4,500,
NOTE_FA4,500,
NOTE_SOL4,500,
NOTE_FA4,1000
};
const byte birthdayNotaSayisi =
sizeof(birthdayMelodi) / sizeof(birthdayMelodi[0]) / 2;
void happyBirthdayCal() {
noTone(buzzerPin);
ledleriKapat();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Happy Birthday");
lcd.setCursor(0, 1);
lcd.print("Caliniyor...");
oledCaliniyor("HAPPY BIRTHDAY");
delay(1200);
for (byte i = 0; i < birthdayNotaSayisi; i++) {
int freq = pgm_read_word(&birthdayMelodi[i * 2]);
int dur = pgm_read_word(&birthdayMelodi[i * 2 + 1]);
notaCal(freq, dur);
}
bitisEkrani();
}
// ================= BİTİŞ EKRANI =================
void bitisEkrani() {
noTone(buzzerPin);
ledleriKapat();
lcd.clear();
lcd.setCursor(0, 0);
lcdTurkce("Bitti!");
lcd.setCursor(0, 1);
lcd.print("DJ SETUP");
oled.firstPage();
do {
oled.setFont(u8g2_font_6x10_tf);
// Tam çerçeve
oled.drawFrame(3, 3, 122, 58);
oled.drawStr(40, 25, "BITTI!");
oled.drawLine(25, 31, 103, 31);
oled.drawStr(30, 45, "DJ SETUP");
} while (oled.nextPage());
delay(2000);
lcdBaslangic();
menuCiz();
}
// ================= SETUP =================
void setup() {
pinMode(buzzerPin, OUTPUT);
pinMode(potPin, INPUT);
pinMode(btnAsagi, INPUT_PULLUP);
pinMode(btnSec, INPUT_PULLUP);
pinMode(ledD2, OUTPUT);
pinMode(ledD3, OUTPUT);
pinMode(ledD4, OUTPUT);
pinMode(ledD5, OUTPUT);
pinMode(ledD6, OUTPUT);
pinMode(ledD7, OUTPUT);
pinMode(ledD8, OUTPUT);
noTone(buzzerPin);
ledleriKapat();
// LCD
lcd.init();
lcd.backlight();
lcd.createChar(0, g_kucuk);
lcd.createChar(1, s_kucuk);
lcd.createChar(2, i_buyuk);
lcd.createChar(3, i_kucuk);
lcd.createChar(4, c_kucuk);
lcd.createChar(5, s_buyuk);
lcd.createChar(6, c_buyuk);
// OLED
oled.begin();
lcdBaslangic();
// ================= AÇILIŞ EKRANI =================
oled.firstPage();
do {
oled.setFont(u8g2_font_6x10_tf);
// Dış çerçeve
oled.drawFrame(3, 3, 122, 58);
oled.drawStr(31, 25, "DJ SETUP");
oled.drawLine(22, 30, 106, 30);
oled.drawStr(22, 45, "Hazirlaniyor");
} while (oled.nextPage());
delay(1000);
menuCiz();
}
// ================= LOOP =================
void loop() {
// ================= AŞAĞI BUTONU =================
if (digitalRead(btnAsagi) == LOW) {
delay(30);
if (digitalRead(btnAsagi) == LOW) {
// Buton sesi
butonAsagiSesi();
seciliSarki++;
if (seciliSarki >= 3)
seciliSarki = 0;
menuCiz();
while (digitalRead(btnAsagi) == LOW) {
delay(1);
}
delay(30);
}
}
// ================= SEÇ BUTONU =================
if (digitalRead(btnSec) == LOW) {
delay(30);
if (digitalRead(btnSec) == LOW) {
// Buton sesi
butonSecSesi();
while (digitalRead(btnSec) == LOW) {
delay(1);
}
delay(30);
if (seciliSarki == 0) {
izmirMarsiCal();
}
else if (seciliSarki == 1) {
istiklalMarsiCal();
}
else {
happyBirthdayCal();
}
}
}
}
*= DEĞİŞKEN
