Arduino
OKUDUĞUNUZ KONU
Arduino Led Matrix 8×8 Uygulaması
5

Arduino Led Matrix 8×8 Uygulaması

Yazar : Eda Baysal12 Ekim 2015

Arduino Led Matrix çok kullanışlı bir çıkış elemanıdır, standart bildiğimiz 7 segment displayler gibi kısıtlı değil daha geniş bir görüntüleme alanı sağlar bu sayede isterseniz rakam göstermek için isterseniz de tabela yapmak için kullanabilirsiniz.Bu projede tek bir adet led matrix nasıl kullanılır ve kontrol edilir bunu anlatmaya çalışacağım.

Projemizde kullandığımız malzemeleri internetten kolaylıkla temin edebilirsiniz.Led matrixi bazı sitelerde bulmak zor olabilir ama bildiğim kadarıyla bu sitede mevcut.Market bölümünü ziyaret edebilirsiniz.

Kullanılan Malzemeler

  • Arduino UNO
  • Led Matrix 8×8
  • Jumper Kablo

Basit bir bağlantısı var Led matrix üzerindeki bağlantılar VCC = 5volt a bağlanacak GND = GND ye bağlanacak.

  • DIN = D12 – pinine bağlanacak
  • CLK = D11 – pinine bağlanacak
  • CS = D10 – pinine bağlanacak

led-matrix-arduino (3)

Bağlantıları yaptıktan sonra sıra arduino kartına programı yüklemek aşağıdaki kodları yükledikten sonra sayılar geçmeye başlayacaktır.Eğer çıkmıyorsa ya bağlantılarda yada programı atarken hata yaptınız.Karşılaştığınız sorunları yorum olarak yazabilirsiniz elimden geldiğince yardımcı olmaya çalışırım.

Led Matrix 8×8 Arduino Kütüphanesini İndir

//Led Matrix 8x8 - Eda Baysal
#include "LedControlMS.h"

#define NBR_MTX 2 
LedControl lc=LedControl(12,11,10, NBR_MTX);

String digits= "1234567890";
int digitCounter=0;

unsigned long delaytime=300;


void setup() {

  Serial.begin (9600);
  Serial.println("Setup");
  digitCounter=0;
  for (int i=0; i< NBR_MTX; i++){ lc.shutdown(i,false); lc.setIntensity(i,8); lc.clearDisplay(i); } Serial.println("LED0: 0 0"); lc.setLed(0,0,0,true); delay(1000); Serial.println("LED0: 0 7"); lc.setLed(0,0,7,true); delay(1000); Serial.println("LED0: 7 0"); lc.setLed(0,7,0,true); delay(1000); Serial.println("LED0: 7 7"); lc.setLed(0,7,7,true); delay(1000); Serial.println("LED0: 0 0 off"); lc.setLed(0,0,0,false); delay(1000); Serial.println("LED0: 0 7 off"); lc.setLed(0,0,7,false); delay(1000); Serial.println("LED0: 7 0 off"); lc.setLed(0,7,0,false); delay(1000); Serial.println("LED0: 7 7 off"); lc.setLed(0,7,7,false); delay(1000); lc.setRow(0,1,0x0C); delay(1000); lc.clearDisplay(0); lc.setRow(0,1,0xC0); delay(1000); lc.clearDisplay(0); lc.setColumn(0,1,0x0C); delay(1000); lc.clearDisplay(0); lc.setColumn(0,1,0xC0); delay(1000); lc.clearDisplay(0); lc.writeString(0,"Hola Mundo"); delay(1000); lc.clearAll(); scrollLeft('O'); delay(1000); lc.clearAll(); scrollRight('O'); delay(1000); lc.clearAll(); } void loop() { char ch= digits[digitCounter]; digitCounter++; if (digitCounter>9) digitCounter=0;
  lc.displayChar(0, lc.getCharArrayPosition(ch));
  delay(1000);
  lc.clearAll();
  delay(200);
}


void scrollLeft(char ch){
  int pos =lc.getCharArrayPosition(ch);
  for (int scroll =0; scroll<6; scroll++) {
     for (int i=scroll; i<6;i++) {
        lc.setRow(0,i-scroll, alphabetBitmap[pos][i]);
    } 
    delay(300);
    lc.clearDisplay(0);
  }
}

void scrollRight(char ch){
  int pos =lc.getCharArrayPosition(ch);
  for (int scroll =0; scroll<8; scroll++) {
     for (int i=0; i<6;i++) {
        if (scroll+i<8) lc.setRow(0, scroll+i, alphabetBitmap[pos][i]);
    } 
    delay(300);
    lc.clearDisplay(0);
  }
}
SİZCE NASIL OLMUŞ?
Beğendim
50%
İlginç
4%
Eh İşte
11%
Anlamadım
4%
Kötü
11%
Berbat
20%
YAZAR HAKKINDA
Eda Baysal
Bilgisayar mühendisiyim , gömülü sistemler ve IoT üzerinde çalışmalar yapmaktayım.Proje Hocam sitesini uzun zamandır takip ediyordum ve bu oluşumun içerisinde olmak istedim.Bu sitede yazılarımı paylaşıp sizlere yararlı olmak istiyorum
5 YORUMLAR
  • Yasemin
    12 Ekim 2015 at 14:49

    bununla led tabela yapilirmi

  • Semih Avcı
    21 Aralık 2015 at 21:44

    Led tabela yapılabilir fakat iç mekan olur. Dış mekan tabelalar için led parlaklıkları çok sönük kalacaktır. Ayrıca birbirlerine bağlantı yapabilmeniz için modülsüz led matrix kullanmalısın. Modül şeklindeki led matrixler Arduino üzerinde kendinizi geliştirmek amaçlı hızlı başlangıç setleri olarak nitelendirilebilir.

  • Şeref
    20 Kasım 2017 at 11:06

    Display ortak anotmu yoksa katotmu?

  • muham
    30 Mart 2018 at 22:58

    Merhaba herkese bir proje üzerinde çalışıyorum. Okulda öğrencilerime bazı kuralları görsel olarak anlatmak için bir işe başladım fakat bir noktada takılıyorum yardımınıza ihtiyaç duyuyorum. Aşağıda göndermiş olduğum programda arduino uno 2 pinine bir anahtar bağlayarak her bastığımda karakterleri oluşturan dizileri sırasıyla yazdırmak istiyorum. Fakat her seferinde ilk çalışmada ekrana yarım karakterler çıkıyor. Bir de bazı karakterler 2 pini sürekli enerjiliyken tam çıkarken anahtarlama yaptığımızda karakterler şaşıyor. acaba nerede hata yapıyorum. şimdiden hepinize teşekkür ederim.

    #include “LedControl.h”
    unsigned char i;
    unsigned char j;
    int Max7219_pinCLK = 11;
    int Max7219_pinCS = 10;
    int Max7219_pinDIN = 12;
    D1=1;
    D2=2;
    int x = 2;
    int buttonState = 0;
    LedControl lc=LedControl(12,11,10,1);
    unsigned char disp1[8][8]={ //Eğer 22 den farklı sayıda ekran olan bir şey yapacaksanız 22 yi değişmeniz gerekir
    {0x3,0xE1,0x23,0x22,0xE3,0x80,0x80,0xE0},//2 kare
    {0x3,0xE1,0x23,0x22,0xE3,0x20,0x20,0xE0},//3 kare
    {0x3,0x81,0x83,0x82,0x83,0xA0,0xF0,0x20},//4 kare
    {0x3,0xE1,0x83,0x82,0xE3,0x20,0x20,0xE0},//5 kare
    {0x3,0xE1,0xA3,0x82,0xE3,0xA0,0xA0,0xE0},//6 kare
    {0x3,0xE1,0x23,0x22,0x73,0x20,0x20,0x20},//7 kare
    {0x3,0xE1,0xA3,0xA2,0xE3,0xA0,0xA0,0xE0},//8 kare
    {0x3,0xE1,0xA3,0xA2,0xE3,0x20,0xA0,0xE0},//9 kare
    };
    unsigned char disp2[8][8]={ //Eğer 22 den farklı sayıda ekran olan bir şey yapacaksanız 22 yi değişmeniz gerekir
    {0x10,0x30,0x10,0x10,0x10,0x10,0x38,0x0},//1
    {0x3C,0x4,0x4,0x3C,0x20,0x20,0x3C,0x0},//2
    {0x3C,0x4,0x4,0x3C,0x4,0x4,0x3C,0x0},//3
    {0x20,0x20,0x20,0x20,0x28,0x3C,0x8,0x0},//4
    {0x3C,0x20,0x20,0x3C,0x4,0x4,0x3C,0x0},//5
    {0x3C,0x24,0x20,0x3C,0x24,0x24,0x3C,0x0},//6
    {0x38,0x8,0x8,0x1C,0x8,0x8,0x8,0x0},//7
    {0x3C,0x24,0x24,0x3C,0x4,0x4,0x3C,0x0},//8
    };
    unsigned char disp3[8][8]={ //Eğer 22 den farklı sayıda ekran olan bir şey yapacaksanız 22 yi değişmeniz gerekir
    {0x3C,0x4,0x4,0x3C,0x20,0x20,0x3C,0x0},//2
    {0x3C,0x4,0x4,0x3C,0x4,0x4,0x3C,0x0},//3
    {0x20,0x20,0x20,0x20,0x28,0x3C,0x8,0x0},//4
    {0x3C,0x20,0x20,0x3C,0x4,0x4,0x3C,0x0},//5
    {0x3C,0x24,0x20,0x3C,0x24,0x24,0x3C,0x0},//6
    {0x38,0x8,0x8,0x1C,0x8,0x8,0x8,0x0},//7
    {0x3C,0x24,0x24,0x3C,0x24,0x24,0x3C,0x0},//8
    {0x3C,0x24,0x24,0x3C,0x4,0x4,0x3C,0x0},//9
    };

    unsigned char disp4[8][8]={ //Eğer 22 den farklı sayıda ekran olan bir şey yapacaksanız 22 yi değişmeniz gerekir
    {0x10,0x30,0x10,0x10,0x10,0x10,0x38,0x0},//1
    {0x20,0x20,0x20,0x20,0x28,0x3C,0x8,0x0},//4
    {0x3C,0x24,0x24,0x3C,0x4,0x4,0x3C,0x0},//9
    {0x4F,0xC9,0x48,0x4F,0x49,0x49,0xEF,0x0},//16
    {0xEE,0x28,0x28,0xEE,0x82,0x82,0xEE,0x0},//25
    {0xEE,0x2A,0x28,0xEE,0x2A,0x2A,0xEE,0x0},//36
    {0x87,0x85,0x85,0x87,0xA1,0xF5,0x27,0x0},//49
    {0xE8,0xA8,0x88,0xE8,0xAA,0xAF,0xE2,0x0},//64
    };
    unsigned char disp5[8][8]={ //Eğer 22 den farklı sayıda ekran olan bir şey yapacaksanız 22 yi değişmeniz gerekir
    {0x20,0x20,0x20,0x20,0x28,0x3C,0x8,0x0},//4
    {0x3C,0x24,0x24,0x3C,0x4,0x4,0x3C,0x0},//9
    {0x4F,0xC9,0x48,0x4F,0x49,0x49,0xEF,0x0},//16
    {0xEE,0x28,0x28,0xEE,0x82,0x82,0xEE,0x0},//25
    {0xEE,0x2A,0x28,0xEE,0x2A,0x2A,0xEE,0x0},//36
    {0x87,0x85,0x85,0x87,0xA1,0xF5,0x27,0x0},//49
    {0xE8,0xA8,0x88,0xE8,0xAA,0xAF,0xE2,0x0},//64
    {0xE4,0xAC,0xA4,0xE4,0xA4,0xA4,0xEE,0x0},//81
    };

    void Write_Max7219_byte(unsigned char DATA)
    {
    unsigned char i;
    digitalWrite(Max7219_pinCS,LOW);
    for(i=8;i>=1;i–)
    {
    digitalWrite(Max7219_pinCLK,LOW);
    digitalWrite(Max7219_pinDIN,DATA&0x80);
    DATA = DATA<<1;digitalWrite(Max7219_pinCLK,HIGH);
    }
    }

    void Write_Max7219(unsigned char address,unsigned char dat){

    buttonState = digitalRead(x);
    if (buttonState == HIGH){
    digitalWrite(Max7219_pinCS,LOW);
    Write_Max7219_byte(address);
    Write_Max7219_byte(dat);
    digitalWrite(Max7219_pinCS,HIGH);
    }
    else {
    return;
    }
    if (D1==8&&D2=9){
    D1=1;
    D2=2;
    }
    }

    void Init_MAX7219(void){
    Write_Max7219(0x09, 0x00);
    Write_Max7219(0x0a, 0x03);
    Write_Max7219(0x0b, 0x07);
    Write_Max7219(0x0c, 0x01);
    Write_Max7219(0x0f, 0x00);
    }

    void setup(){

    pinMode(Max7219_pinCLK,OUTPUT);
    pinMode(Max7219_pinCS,OUTPUT);
    pinMode(Max7219_pinDIN,OUTPUT);
    delay(50);
    Init_MAX7219();
    lc.shutdown(0,false);
    /* Set the brightness to a medium values */
    lc.setIntensity(0,8);
    /* and clear the display */
    lc.clearDisplay(0);

    lc.shutdown(1,false);
    /* Set the brightness to a medium values */
    lc.setIntensity(1,8);
    /* and clear the display */
    lc.clearDisplay(1);
    pinMode(x, INPUT);
    }

    void loop(){

    for(j=0;j{
    for(i=1;i Write_Max7219(i,disp1[j][i-1]);
    clear();
    D1++;
    D2++;

    delay(1500);
    }
    }

  • 14 Nisan 2018 at 17:41

    Kütüphanenizin örneğini sadece github da bulabildim. Nasıl kullanacağım hakkında bir fikrim yok. Bir eğitim veriyor makale yazıyorsanız böyle baştan savma yazmamalısınız.

YORUM YAP