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.


#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;
}
}
}
İ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:
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.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.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.
Henüz yorum yapılmamış. İlk yorumu siz yapın!