Bu rehberde, kablo karmaşasını tamamen ortadan kaldıran en kompakt yerleşimi yapıyoruz! HX1230 Grafik LCD modülünün pin sırasını tamamen ters çevirerek Arduino Uno'nun D0 (RX) pininden başlayıp D7 pinine kadar uzanan alt dijital bloğuna doğrudan oturtuyoruz. Sıfır kablo ile çalışan bu harika projeyi doğrudan kopyalayıp deneyebilirsiniz.
Ekran modülünü, 8. pini (RST) Arduino'nun D0 (RX) yuvasına denk gelecek şekilde sırasıyla yerleştiriyoruz. Fiziksel ve yazılımsal haritamız şu şekildedir:
| HX1230 Ekran Pini | Arduino Uno Dijital Pini | Kod İçerisindeki Görevi / Yönetimi |
|---|---|---|
| 8. RST (RESET) | D0 (RX) | Reset Sıfırlama Pini |
| 7. CE (CS) | D1 (TX) | Chip Enable / Chip Select (Çip Seçimi) |
| 6. NC | D2 | Boş Pin (Bağlantısız bırakılır, kodda pasiftir). |
| 5. DIN | D3 | SPI Veri Girişi (Data In) |
| 4. CLK | D4 | SPI Saat Sinyali (Clock) |
| 3. VCC | D5 | Ekran Güç Beslemesi (Pin D5 HIGH yapılarak ekran çalıştırılır). |
| 2. BL (Backlight) | D6 | Arka ışık kontrolü (Koddan HIGH yapılarak yakılır). |
| 1. GND | D7 | Ekranın toprak hattı (Yazılımsal olarak LOW yapılarak toprak hattı oluşturulur). |

Çok Kritik Altın Kural: Ekranın kontrol bacakları D0 ve D1 pinlerine bağlı olduğu için, kodu Arduino'ya yüklerken ekranı mutlaka yerinden sökün. Yükleme tamamlandıktan sonra USB kablosunu çıkarıp ekranı takın ve Arduino'yu yeniden başlatın. Aksi takdirde bilgisayarın yükleme sinyalleri ekranı kilitler ve çizim gelmez.
D0'dan başlayan tamamen ters yüz edilmiş yeni pin yapısına göre güncellenmiş, kütüphanesiz hafif kod bloğu:
// HX1230 Ekran Pin Tanımlamaları
int pin_RESET = 0; // 8. Pin: Sıfırlama Pini
int pin_CE = 1; // 7. Pin: Çip Seçimi
int pin_NC = 2; // 6. Pin: Boş Pin (Kullanılmıyor)
int pin_DIN = 3; // 5. Pin: Veri Girişi
int pin_CLK = 4; // 4. Pin: Saat Sinyali
int pin_VCC = 5; // 3. Pin: Ekran Güç Beslemesi
int pin_BL = 6; // 2. Pin: Arka Işık Kontrolü
int pin_GND = 7; // 1. Pin: Sanal Toprak Hattı
void hx1230_komutYaz(uint8_t komut) {
digitalWrite(pin_CE, LOW);
delayMicroseconds(1);
// 9-bit SPI: D/C bit = 0 (Komut)
digitalWrite(pin_CLK, LOW);
digitalWrite(pin_DIN, LOW);
delayMicroseconds(2);
digitalWrite(pin_CLK, HIGH);
delayMicroseconds(2);
// 8-bit komut verisi
for (int i = 7; i >= 0; i--) {
digitalWrite(pin_CLK, LOW);
digitalWrite(pin_DIN, (komut >> i) & 0x01);
delayMicroseconds(2);
digitalWrite(pin_CLK, HIGH);
delayMicroseconds(2);
}
delayMicroseconds(1);
digitalWrite(pin_CE, HIGH);
delayMicroseconds(2);
}
void hx1230_veriYaz(uint8_t veri) {
digitalWrite(pin_CE, LOW);
delayMicroseconds(1);
// 9-bit SPI: D/C bit = 1 (Veri)
digitalWrite(pin_CLK, LOW);
digitalWrite(pin_DIN, HIGH);
delayMicroseconds(2);
digitalWrite(pin_CLK, HIGH);
delayMicroseconds(2);
// 8-bit grafik verisi
for (int i = 7; i >= 0; i--) {
digitalWrite(pin_CLK, LOW);
digitalWrite(pin_DIN, (veri >> i) & 0x01);
delayMicroseconds(2);
digitalWrite(pin_CLK, HIGH);
delayMicroseconds(2);
}
delayMicroseconds(1);
digitalWrite(pin_CE, HIGH);
delayMicroseconds(2);
}
void hx1230_init() {
digitalWrite(pin_RESET, LOW);
delay(100);
digitalWrite(pin_RESET, HIGH);
delay(100);
hx1230_komutYaz(0xE2); // Software Reset
delay(20);
hx1230_komutYaz(0x2F); // Power Control ON
hx1230_komutYaz(0xA4); // Normal RAM Modu
hx1230_komutYaz(0xA6); // Normal Renk Modu
hx1230_komutYaz(0xA0); // Çalışan kararlı sütun yönü
hx1230_komutYaz(0xC0); // Çalışan kararlı satır yönü
// En stabil test sonucunu verdiğin doğal sıfır noktası
hx1230_komutYaz(0x40);
hx1230_komutYaz(0x8B); // Kontrast Ayarı
hx1230_komutYaz(0xAF); // Display ON
delay(50);
}
void hx1230_ekranTemizle() {
// RAM taşmalarını önlemek için tüm olası sayfaları (0'dan 9'a kadar) tarıyoruz
for (int sayfa = 0; sayfa < 10; sayfa++) {
hx1230_komutYaz(0xB0 + sayfa);
hx1230_komutYaz(0x00);
hx1230_komutYaz(0x10);
for (int sutun = 0; sutun < 132; sutun++) {
hx1230_veriYaz(0x00);
}
}
}
void setup() {
pinMode(pin_RESET, OUTPUT);
pinMode(pin_CE, OUTPUT);
pinMode(pin_NC, OUTPUT);
pinMode(pin_DIN, OUTPUT);
pinMode(pin_CLK, OUTPUT);
pinMode(pin_VCC, OUTPUT);
pinMode(pin_BL, OUTPUT);
pinMode(pin_GND, OUTPUT);
digitalWrite(pin_GND, LOW);
digitalWrite(pin_VCC, HIGH);
digitalWrite(pin_BL, HIGH);
digitalWrite(pin_NC, LOW);
delay(300);
hx1230_init();
hx1230_ekranTemizle();
}
void loop() {
// --- ANIMASYON 1: YÜKLENİYOR (LOADING) BAR ANIMASYONU ---
// Ekranın tam ortasında soldan sağa dolan kalın bir çizgi
hx1230_ekranTemizle();
for (int sutun = 0; sutun < 96; sutun++) {
hx1230_komutYaz(0xB4); // 4. Sayfa (Ekranın dikey ortası)
hx1230_komutYaz(sutun & 0x0F); // Sütun alt adresi
hx1230_komutYaz(0x10 | (sutun >> 4)); // Sütun üst adresi
hx1230_veriYaz(0xFF); // 8 piksel yüksekliğinde tam dolu blok basar
delay(15); // Yüklenme hızı
}
delay(500); // Bar dolunca yarım saniye bekle
// --- ANIMASYON 2: PERDE EFEKTİ (EKRANI YUKARIDAN AŞAĞIYA DOLDURMA) ---
hx1230_ekranTemizle();
for (int sayfa = 0; sayfa < 9; sayfa++) {
hx1230_komutYaz(0xB0 + sayfa);
hx1230_komutYaz(0x00);
hx1230_komutYaz(0x10);
for (int sutun = 0; sutun < 96; sutun++) {
hx1230_veriYaz(0xFF); // Her sayfayı tamamen siyaha boyar
}
delay(80); // Perde inme hızı
}
delay(500);
// --- ANIMASYON 3: SİNÜS DALGASI (DALGALANMA EFEKTİ) ---
for (int kare = 0; kare < 80; kare++) { // 80 kare boyunca aksın
// Her sayfayı tek tek işliyoruz
for (int sayfa = 0; sayfa < 9; sayfa++) {
hx1230_komutYaz(0xB0 + sayfa);
hx1230_komutYaz(0x00);
hx1230_komutYaz(0x10);
for (int sutun = 0; sutun < 96; sutun++) {
int dalgaY = 32 + (int)(20.0 * sin((sutun * 0.15) - (kare * 0.3)));
int sayfaBaslangicPikseli = sayfa * 8;
int sayfaBitisPikseli = sayfaBaslangicPikseli + 7;
uint8_t veriByte = 0x00;
for (int k = -1; k <= 1; k++) {
int pikselPos = dalgaY + k;
if (pikselPos >= sayfaBaslangicPikseli && pikselPos <= sayfaBitisPikseli) {
int bitIndex = pikselPos - sayfaBaslangicPikseli;
veriByte |= (1 << bitIndex);
}
}
hx1230_veriYaz(veriByte);
}
}
delay(10); // Dalganın akış hızı (FPS)
}
// --- ANIMASYON 4: ELEKTRONİK PARAZİT / KARINCALANMA (MATRIX EFEKTİ) ---
// Eski televizyonlardaki karıncalanma efektini yapar
for (int i = 0; i < 30; i++) { // 30 kez rastgele ekran bas
for (int sayfa = 0; sayfa < 9; sayfa++) {
hx1230_komutYaz(0xB0 + sayfa);
hx1230_komutYaz(0x00);
hx1230_komutYaz(0x10);
for (int sutun = 0; sutun < 96; sutun++) {
// Arduino'nun dahili rastgele sayı üreticisini kullanarak
// pikselleri tamamen rastgele (0-255 arası) yakıp söndürür
hx1230_veriYaz(random(0, 256));
}
}
delay(10);
}
}
Henüz yorum yapılmamış. İlk yorumu siz yapın!