Arduino ile TM1638 Modülü ile LED Kontrolü ve Buton Okuma

👤 Yazar: ozcan 📅 Tarih: 22.07.2026 07:47 👁️ Görüntüleme: 21

TM1638 Modülü ile LED Kontrolü ve Buton Okuma Uygulaması

TM1638 modülü; üzerinde 8 adet 7-segment display, 8 adet LED ve 8 adet buton barındıran oldukça kullanışlı bir genişletme kartıdır. Sadece 3 dijital iletişim pini (STB, CLK, DIO) kullanarak hem ekran ve LED sürücü işlemlerini hem de buton tarama süreçlerini tek bir entegre üzerinden yürütmenizi sağlar. Bu uygulamada, LED sıralı yakma animasyonu ile buton durumlarını okuma mantığı tek bir Arduino taslağında birleştirilmiştir.

Arduino TM1638 Modülü

Donanım Bağlantı Haritası:
  • VCC: Arduino 5V
  • GND: Arduino GND
  • STB (Strobe): Arduino Pin 7
  • DIO (Data): Arduino Pin 8
  • CLK (Clock): Arduino Pin 9

Arduino ile TM1638 Modülü bağlantı şeması

Arduino Uygulama Kodları

#include <TM1638.h>

// Pin Tanımlamaları
#define STROBE 7
#define DATA 8
#define CLOCK 9

// TM1638 Panel Nesnesi
TM1638 panel(DATA, CLOCK, STROBE);

// Değişkenler
int numLed = 0;
int button = 0;
unsigned long sonLedZamani = 0;
const long ledAralik = 500; // LED adım süresi (ms)

void setup() {
  // Seri port haberleşmesini başlatıyoruz
  Serial.begin(9600);
  
  // Başlangıçta tüm LED'leri temizliyoruz
  for (int i = 0; i < 8; i++) {
    panel.setLED(0, i);
  }
}

void loop() {
  // --- 1. BUTON OKUMA VE İŞLEME BLOĞU ---
  byte buttons = panel.getButtons();

  // Basılan butona göre indeks belirleme (Bitmask dönüşümü)
  switch (buttons) {
    case 1:   button = 1; break;
    case 2:   button = 2; break;
    case 4:   button = 3; break;
    case 8:   button = 4; break;
    case 16:  button = 5; break;
    case 32:  button = 6; break;
    case 64:  button = 7; break;
    case 128: button = 8; break;
    default:  button = 0; break;
  }

  // Butona basıldıysa Seri Monitör'e yazdır
  if (button > 0) {
    Serial.print("Stisknute tlacitko (Basilan Buton): ");
    Serial.println(button);
  }

  // --- 2. LED ANİMASYON BLOĞU (Zamanlayıcı tabanlı) ---
  if (millis() - sonLedZamani >= ledAralik) {
    sonLedZamani = millis();

    // Mevcut adımdaki LED'i yak
    panel.setLED(1, numLed);
    numLed++;

    // Tüm LED'ler yandığında 1 ve 5 numaralı LED'leri söndür ve sıfırla
    if (numLed > 8) {
      panel.setLED(0, 1); // 2. LED'i söndür (0 indeksi tabanlı)
      panel.setLED(0, 5); // 6. LED'i söndür
      
      // Döngüyü başa sar ve tüm LED'leri temizle
      for (int i = 0; i < 8; i++) {
        panel.setLED(0, i);
      }
      numLed = 0;
    }
  }
}

Kod Birleştirme Mantığı ve Özellikler

İki ayrı taslak birleştirilirken kodların birbiriyle çakışmadan akıcı bir şekilde çalışabilmesi için yapıda şu düzenlemeler yapılmıştır:

  • Bloke Etmeyen Zamanlayıcı (millis): Orijinal ilk koddaki uzun delay() komutları, buton okuma hassasiyetini düşüreceği ve sistemi kilitleyeceği için kaldırılmıştır. LED animasyonu millis() mantığıyla arka planda zamanlanmıştır.
  • Bitmask - Buton Çözümleme: panel.getButtons() fonksiyonu, basılan butona karşılık gelen baytın bit konumunu döndürür (1, 2, 4, 8, 16... şeklinde 2'nin kuvvetleri). switch-case bloğu bu veriyi 1'den 8'e kadar anlaşılır buton numaralarına dönüştürür.
  • Eşzamanlı Çalışma: Seri Monitör üzerinden buton durumu anlık olarak taranırken (9600 baud), LED matrisi arka planda sıra düzenini bozmadan adım adım ilerlemeye devam eder.

Uygulamayı çalıştırmadan önce Arduino IDE kütüphane yöneticisi üzerinden TM1638 kütüphanesinin kurulu olduğundan ve Seri Monitör hızının 9600 baud ayarlandığından emin olun.

💬 Yorumlar

Henüz yorum yapılmamış. İlk yorumu siz yapın!

Bir Yorum Bırakın

Güvenlik Kontrolü:

Yenidir.com
↑ Sayfa Başı
📞 İletişim ✉ E-Posta Gönder 🟥 YouTube
© 2026 Yenidir.com
Yenidir CMS V0.1