Bu yazıda Arduino projelerinde sıklıkla karşılaştığımız OLED ekranlar olan 0.91″ 128×32 ve 0.96″ 128×64 modüllerini inceleyecek ve kullanımlarını anlatacağız.
OLED ekranlar geleneksel LCD ekranlardan farklı olarak arkaplan aydınlatmasına ihtiyaç duymazlar. Ekranın her bir pikseli bir LED’den oluşur ve kendi ışığını kendisi üretir. Arduino dünyasında SPI ve I2C arabirimlerini kullanan farklı OLED ekranlar kullanılıyor. Bu yazıda I2C protokolü ile çalışan OLED ekranları açıklayacağız.
O zaman bir an önce devre kurulumu ile başlayalım. I2C bağlantısına önceki projelerden aşinayız.
Devremizi kurduktan sonra sketch kodumuza geçelim. Bu sketch’te SSD1306 adlı yaygın kullanılan Arduino kütüphanesini kullanacağız. Kütüphaneyi Arduino IDE’nin ana menüsünden Araçlar > Kütüphaneleri Yönet… bölümüne girip SSD1306 kelimesini aratarak Adafruit tarafından hazırlanmış versiyonu kurarak ekleyebiliriz. Kütüphane kurulumu esnasında Adafruit GFX gibi bazı ek kütüphanelerin de kurulumu istenebilir. Hepsini kuralım.
OLED ekranlarda ekrandaki bilgiyi her değiştirdiğimizde display() komutunu vermek zorundayız. Aksi takdirde önceki görüntü değişmez. Bu bir eksiklik değildir, ekrandaki tüm verileri arkaplanda teker teker hazırlayıp sonra tek seferde görüntülememize imkan verir.
Aşağıdaki sketch kodu 0.91″ 128×32 OLED ekrana yazı yazıyor (yaziyaz), çizgiler ile çerçeve yapıyor (drawLine), ekranın renklerini tersine çeviriyor (invertDisplay), kolay yoldan dikdörtgen çiziyor (drawRect), köşeleri yuvarlatılmış yakışıklı dikdörtgen çiziyor (drawRoundRect), çember çiziyor (drawCircle) ve son olarak ekrana yazılan yazıyı sağa, sola, çapraz sağa ve çapraz sola kaydırıyor.
Arduino’da iyi olmak için öncelikle elektronikte iyi olmak gerekir. Türkiye’nin en iyi temel elektronik eğitim seti ARDUINO ÖNCESİ TEMEL ELEKTRONİK EĞİTİM VE DENEY SETİ‘ni keşfedin. Gereksiz bilgilerden arındırılmış basit ve eğlenceli anlatımla ELEKTRONİK öğrenin ve Arduino’ya METE HOCA farkıyla güçlü başlayın!
Sketch kodunu kopyalamak için pencerenin sağ üst köşesindeki butona tıklayabilir veya buraya tıklayarak ZIP dosyası olarak indirebilirsiniz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
/* 0,91" 128x32 I2C OLED Ekran Modülü Arduino ile Nasıl Kullanılır? 0,91" 128x32 I2C OLED Ekran Modülünün detaylı açıklaması ve örnek projelerini web sitemizde bulabilirsiniz. Mete Hoca https://www.metehoca.com/ */ #include "SPI.h" // SPI kütüphanesini ekliyoruz #include "Wire.h" // Wire kütüphanesini ekliyoruz #include "Adafruit_SSD1306.h" // Adafruit'in SSD1306 kütüphanesini ekliyoruz int genislik = 128; // OLED ekran genişliği (piksel olarak) int yukseklik = 32; // OLED ekran yüksekliği (piksel olarak) int adres = 0x3C; // 128x32 için 0x3C Adafruit_SSD1306 ekran(genislik, yukseklik, &Wire); // Kütüphaneyi tanımlıyoruz void setup() { ekran.begin(SSD1306_SWITCHCAPVCC, adres); // Kütüphaneyi başlatıyoruz } void loop() { // Bu bölümde ekrana yazı yazıyoruz ekran.clearDisplay(); // Ekranı temizleyelim ekran.display(); // Ekranı görüntüleyelim delay(500); yaziyaz("METE HOCA", 10, 10); // Kullanım: ("YAZI", x, y) delay(500); // Ekranın çevresini 4 adet çizgi ile kaplayalım ekran.drawLine(0, 0, 127, 0, SSD1306_WHITE); // (başlangıç x, y, bitiş x, y) ekran.display(); // İçeriği değişen ekranı tazeleyelim delay(500); ekran.drawLine(127, 0, 127, 31, SSD1306_WHITE); ekran.display(); delay(500); ekran.drawLine(127, 31, 0, 31, SSD1306_WHITE); ekran.display(); delay(500); ekran.drawLine(0, 31, 0, 0, SSD1306_WHITE); ekran.display(); delay(500); // Ekran renklerini tersine çevirelim ekran.invertDisplay(true); delay(500); ekran.invertDisplay(false); delay(500); ekran.invertDisplay(true); delay(500); ekran.invertDisplay(false); delay(500); // Dikdörtgen çizimi (başlangıç x, y, bitiş x, y) ekran.clearDisplay(); ekran.display(); delay(500); ekran.drawRect(0, 0, 128, 32, SSD1306_WHITE); ekran.display(); delay(500); // Köşeleri yuvarlak dikdörtgen çizimi (başlangıç x, y, bitiş x, y) ekran.clearDisplay(); ekran.display(); delay(500); ekran.drawRoundRect(0, 0, 128, 32, 8, SSD1306_WHITE); ekran.display(); delay(500); // Çember çizimi (çember merkezi x, y, çember yarıçapı) ekran.clearDisplay(); ekran.display(); delay(500); ekran.drawCircle(15, 15, 6, SSD1306_WHITE); ekran.drawCircle(47, 15, 9, SSD1306_WHITE); ekran.drawCircle(79, 15, 12, SSD1306_WHITE); ekran.drawCircle(111, 15, 15, SSD1306_WHITE); ekran.display(); delay(500); yazikaydir(); } void yaziyaz(String metin, int cx, int cy) { ekran.setTextSize(2); // Yazı boyutu ekran.setTextColor(SSD1306_WHITE); ekran.setCursor(cx, cy); // Başlangıç konumu ekran.println(metin); ekran.display(); } void yazikaydir(void) { ekran.clearDisplay(); delay(500); ekran.setTextSize(2); ekran.setTextColor(SSD1306_WHITE); ekran.setCursor(10, 10); ekran.println("METE HOCA"); ekran.display(); delay(500); // Sağa, sola, çapraz sağa, çapraz sola kaydırma ekran.startscrollright(0x00, 0x0F); delay(2000); ekran.stopscroll(); // Kaydırmayı durdur delay(500); ekran.startscrollleft(0x00, 0x0F); delay(2000); ekran.stopscroll(); delay(500); ekran.startscrolldiagright(0x00, 0x07); delay(2000); ekran.startscrolldiagleft(0x00, 0x07); delay(2000); ekran.stopscroll(); delay(500); } |
Sıra geldi 0.96″ 128×64 OLED ekranı kullanmaya. Devre kurulumu I2C olarak yine aynı.
Bu ekranın tek farklı yanı yüksekliğinin 32 yerine 64 piksel olması. Aşağıdaki sketch kodu ile bu ekran modülünü üstteki kod ile aynı şekilde kullanabiliyoruz. Tek değişen ekran yüksekliği nedeniyle bazı rakamlar. Hepinize bol ekranlı projeler!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
/* 0,96" 128x64 I2C OLED Ekran Modülü Arduino ile Nasıl Kullanılır? 0,96" 128x64 I2C OLED Ekran Modülünün detaylı açıklaması ve örnek projelerini web sitemizde bulabilirsiniz. Mete Hoca https://www.metehoca.com/ */ #include "SPI.h" // SPI kütüphanesini ekliyoruz #include "Wire.h" // Wire kütüphanesini ekliyoruz #include "Adafruit_SSD1306.h" // Adafruit'in SSD1306 kütüphanesini ekliyoruz int genislik = 128; // OLED ekran genişliği (piksel olarak) int yukseklik = 64; // OLED ekran yüksekliği (piksel olarak) int adres = 0x3C; // 128x64 için 0x3C (bazı modüllerde 0x3D) Adafruit_SSD1306 ekran(genislik, yukseklik, &Wire); // Kütüphaneyi tanımlıyoruz void setup() { ekran.begin(SSD1306_SWITCHCAPVCC, adres); // Kütüphaneyi başlatıyoruz } void loop() { // Bu bölümde ekrana yazı yazıyoruz ekran.clearDisplay(); // Ekranı temizleyelim ekran.display(); // Ekranı görüntüleyelim delay(500); yaziyaz("METE HOCA", 10, 24); // Kullanım: ("YAZI", x, y) delay(500); // Ekranın çevresini 4 adet çizgi ile kaplayalım ekran.drawLine(0, 0, 127, 0, SSD1306_WHITE); // (başlangıç x, y, bitiş x, y) ekran.display(); // İçeriği değişen ekranı tazeleyelim delay(500); ekran.drawLine(127, 0, 127, 63, SSD1306_WHITE); ekran.display(); delay(500); ekran.drawLine(127, 63, 0, 63, SSD1306_WHITE); ekran.display(); delay(500); ekran.drawLine(0, 63, 0, 0, SSD1306_WHITE); ekran.display(); delay(500); // Ekran renklerini tersine çevirelim ekran.invertDisplay(true); delay(500); ekran.invertDisplay(false); delay(500); ekran.invertDisplay(true); delay(500); ekran.invertDisplay(false); delay(500); // Dikdörtgen çizimi (başlangıç x, y, bitiş x, y) ekran.clearDisplay(); ekran.display(); delay(500); ekran.drawRect(0, 0, 128, 64, SSD1306_WHITE); ekran.display(); delay(500); // Köşeleri yuvarlak dikdörtgen çizimi (başlangıç x, y, bitiş x, y) ekran.clearDisplay(); ekran.display(); delay(500); ekran.drawRoundRect(0, 0, 128, 64, 8, SSD1306_WHITE); ekran.display(); delay(500); // Çember çizimi (çember merkezi x, y, çember yarıçapı) ekran.clearDisplay(); ekran.display(); delay(500); ekran.drawCircle(16, 30, 6, SSD1306_WHITE); ekran.drawCircle(39, 30, 15, SSD1306_WHITE); ekran.drawCircle(87, 30, 30, SSD1306_WHITE); ekran.display(); delay(500); yazikaydir(); } void yaziyaz(String metin, int cx, int cy) { ekran.setTextSize(2); // Yazı boyutu ekran.setTextColor(SSD1306_WHITE); ekran.setCursor(cx, cy); // Başlangıç konumu ekran.println(metin); ekran.display(); } void yazikaydir(void) { ekran.clearDisplay(); delay(500); ekran.setTextSize(2); ekran.setTextColor(SSD1306_WHITE); ekran.setCursor(10, 24); ekran.println("METE HOCA"); ekran.display(); delay(500); // Sağa, sola, çapraz sağa, çapraz sola kaydırma ekran.startscrollright(0x00, 0x0F); delay(2000); ekran.stopscroll(); // Kaydırmayı durdur delay(500); ekran.startscrollleft(0x00, 0x0F); delay(2000); ekran.stopscroll(); delay(500); ekran.startscrolldiagright(0x00, 0x07); delay(2000); ekran.startscrolldiagleft(0x00, 0x07); delay(2000); ekran.stopscroll(); delay(500); } |