Arduino: max7219 sürücülü led matris

  • 25.04.2019

Son olarak, Çin'den matris modülleri geldi. Her modül bir MAX7219 çipi (), bir LED matrisi, bir kapasitör ve bir dirençten oluşur.


SPI arayüzü üzerinden MAX7219 tarafından kontrol edilir.


Bir kümedeki mikro devreler seri olarak bağlanır. İnternette okudum, mümkün olan maksimum seri bağlantı toplam 8 adet MAX7219 sağlar. İnanma. 16 modül bağlı ve her şey yolunda gidiyor.

Ali'de sunulan modüller çeşitli versiyonlarda gelir. En popüler 2 tiptir: DIP'de ve SOIC paketlerinde bir mikro devre ile. DIP modülü daha büyük boy ve bir kümeye bağlanırken çok uygun değil. Bir sürü kablo bağlamanız gerekecek.


Bir SOIC paketindeki çipli modüller, bir LED matrisinin boyutundadır ve lehimleme veya jumper'larla bağlanır. Güzel ve temiz çıkıyor.


Matrisler ve kümelerle çalışmak için en iyi bilinen kitaplıklar şunlardır: Mark Rice'tan MAX72xx Panel Ve MajicDesigns tarafından Parola:İlk kütüphanenin kullanımı daha kolaydır, ikincisi daha fazla özellik ile daha karmaşıktır. Onu daha detaylı yazacağım.

MAX72xx Paneli

MAX72xx Panel kullanılırken kitaplık kurulumu gerekir Adafruit GFX.

Metni Ruslaştırmak için indirmeniz gerekecek BU DOSYA ve değiştir standart dosya glcdfont.c Arduino/Libraries/Adafruit-GFX-Library-master dizininde. Ayrıca bu dosyada aşağıdakiler dışında açıklanmıştır: gerekli harfler ve sayılar, bir sürü her türden karakter. Hepsi faydalı olmayabilir. Aşağıdaki resimde sembollerin nasıl oluştuğu anlatılmaktadır.

Gerekirse, kendi sembollerinizi oluşturabilir ve bunları dosyadaki kullanılmayanlarla değiştirebilirsiniz. Çeşitli kütüphanelerde kullanılan hemen hemen tüm bitmap yazı tipleri bu şekilde oluşturulmuştur.

Böylece MAX72xx Panel ve Adafruit GFX kitaplıkları kurulur, glcdfont.c dosyası değiştirilir. fırlatıyoruz Arduino IDE'si, açık DOSYA. Çizimde bir utf8rus işlevi var. Rus dili için karakter tablosunun yeniden kodlanmasını sağlar. Yalnızca programdan, yani programda normal çıktı için gereklidir. istenen metin Rusça yazılmış. Metin COM bağlantı noktası üzerinden girilirse, Seri_Okuma işlevinde karakter kodları düzeltilir. IDE'de ve konsolda geliştiriciler farklı kodlamalar kullandılar.

Dosyanın başında kütüphanenin çalışması için gerekli olan satırlar bulunmaktadır.

intYatayGörüntülerin sayısı = 1;

int SayıOfVerticalDisplays = 16;

SOIC paketinde çipli modüllerim var. Küçük bir özelliği var. Modüllerin matrisi 90 derece döndürülerek kurulur. Bu bir kolaylık ücreti. Kitaplıklarla birlikte gelen eskizleri çalıştırırsanız, her modülde aşağıdan yukarıya metin çıkaracaklar. Metin zikzaklar halinde gösterilecektir. Bu rahatsızlığı tedavi etmek için, kütüphaneye 16 dikey ekran olduğu (fiziksel olarak yatay olarak yerleştirilmişler) "söylenmesi" gerekir. Ve sonra geçersiz Kurulumda kitaplığın satırını belirtin

matrix.setRotation(matrix.getRotation() + 1);

Her matrisi programlı olarak çevirecektir. Ve her şey normal şekilde görüntülenecektir.

DIP çip paketine sahip modüllerde bu yoktur. Bir demet tel dışında her şey güzel.

MAX72xx Panel kitaplığı oldukça mütevazı. görsel efektlerçıktı yok. Küme bir bütün olarak algılanır. MD Parola ile işler çok daha iyi.

MajicDesigns tarafından Parola.

Bir SOIC paketinde çipli modüllerin sahipleri de bir kümedeki modülleri yönlendirme sorunuyla karşı karşıya kalacaklardır. Sadece MAX72xx'dekinden biraz farklı görünüyor. Burada modüller olduğu gibi sıra dışı görünecek.


Kütüphanede bulunan örneklerden HelloWorld taslağı.

Programatik olarak taslakta, bu rahatsızlığı tedavi edemedim. Ona farklı davrandım. Adruino/libraries/MD_MAX72xx_lib.h dosyasının sonunda resimdeki gibi satırları bulmanız gerekiyor.


Ve seçilen satırı 1'den 0'a sabitleyin. Dosyayı kaydedin. Arduino IDE'nin yeniden başlatılması gerekmez. döküyoruz, bakıyoruz.


Artık 24 animasyon efektini kullanabilirsiniz. Animasyon, P.displayText(“Görüntülenecek metin”, “metin hizalama”, hız, görüntü gecikmesi, karartma efekti, karartma efekti) komutuyla başlatılır. Gördüğünüz gibi, birçok ayar var.

Ve en zevklisi, kümenin sanal bölgelere bölünmesidir. Bölgelerle çalışmak çok zor değil. Krokiyi yayınlamıyorum, kütüphane ile gelen örneklerde. Artık kümenin başındaki saati ve kalan modüllerde haber ticker'ını neredeyse sorunsuz bir şekilde görüntüleyebilirsiniz.

Tahmin edebileceğiniz gibi, sorun Kiril harfleriyle ilgili. O da çözülebilir. Yakın önceki dosya aynı dizinde MD_MAX72xx_font.cpp dosyası bulunur. Bu bir yazı tipi dosyasıdır. İçindeki karakterler, kütüphanenin GFX yazı tipi dosyasına benzer şekilde oluşturulmuştur. Hafif bir fark var. Burada karakter boyutu 5 puandan az olabilir. Adafruit GFX Kitaplığında ünlem işaretiörneğin, diğer karakterler gibi 5 nokta genişliğindedir, yalnızca bir satır nokta kullanılır. Gerisi parlamaz, ancak bir sembol olarak kullanılır. Parola'da aynı ünlem işareti de bir satır nokta kaplar, yalnızca yakınlarda boş noktalar yoktur, ancak bitişik karakterler olabilir. Resmi anlamak daha net olacaktır.


Dosyayı, ilk düşünülen kitaplıktan dosyaya benzer şekilde Kiril karakterleriyle tamamlamak için zaman yoktur. Biri bunu yapıp bana bir dosya gönderirse bu yazıya ekleyeceğim ve hem ben hem de sitemin misafirleri size minnettar kalacağım.

Sonuç. Mark Rice'ın MAX72xx Panel kitaplığının kullanımı ve anlaşılması kolaydır, ancak işlevselliği zayıftır.

MajicDesigns'ın Parola kitaplığı daha karmaşıktır ve hemen hemen her uygulama için yeterli kapasiteye sahiptir.

Merhaba sevgili LPgenerator kullanıcıları!

Lütfen dikkat: yazı tipini bağlamak için standart bir şekilde, hazır aracı kullanın. Kullanımı kolaydır ve eklemenize izin verir. ek yazı tipleri ekstra çaba harcamadan:

Bu gönderide, kullanarak açılış sayfanıza nasıl fazladan bir yazı tipi ekleyeceğinizi öğreneceksiniz. Google hizmeti Komut dosyaları ekleyerek yazı tipleri.

2. Alfabeyi, yani karakter setini belirttiğinizden emin olun.

Açılış sayfası Rusçaysa, Latince'yi seçin ( Latince) ve Kiril ( Kiril):

3. Beğendiğiniz yazı tiplerini seçin ve " +":

4. Eklenen yazı tipleri koleksiyonuna gidin. Bunu yapmak için aşağıdaki siyah çubuğa tıklayın:

5. Açılan pencerede, ilk öğe önceden seçilmiş yazı tiplerini görüntüler.

Unutmayın: kullanın Büyük bir sayı farklı Google Yazı Tipleri, açılış sayfanızın yüklenmesini yavaşlatabilir. Seçilen stillerin sayfa yükleme hızı üzerindeki etkisi sağda görüntülenir.

6. Ayarlanmışsa ve görünüm eklenen yazı tiplerinden memnunsanız, "EMBED" bölümüne gidin ve "STANDART" alanının içeriğini tamamen kopyalayın:

kapatma Google sekmesi Yazı tipleri, hala ihtiyacımız var.

LPgenerator düzenleyicide istediğiniz açılış sayfasını açın ve araca tıklayın "Kodlar":

  • açılan pencerede tıklayın "Yeni Komut Dosyası Ekle";
  • betiğin adını yazın;
  • komut dosyasının konumunu seçin "HEAD etiketinin içinde";
  • kopyalanan kodu yapıştırın;
  • değişikliklerinizi kaydetmeyi unutmayın.

7. Google Yazı Tipleri sekmesine dönün.

Yüklenen yazı tiplerini kullanmak için oluşturulan CSS kodunu kopyalayın.

Her yazı tipi kendi CSS'sini kullanır.

Örneğin, Lobster yazı tipi için kod şöyle görünür: yazı tipi ailesi: "Istakoz", el yazısı;

8. LPgenerator düzenleyicisine dönün ve indirilen yazı tipini uygulamak istediğiniz öğeye (metin veya düğme) tıklayın.

Bir açılış sayfasının farklı öğelerine stil uygulama özellikleri vardır.

CTA öğeleri

Düğmedeki yazı tipi stilini değiştirmek için üzerine tıklayın ve sağdaki gelişmiş özelliklerde yazı tipi için CSS'yi ekleyin (sekizinci adımda kopyalanır).

Açılış sayfası metin blokları

Yazı tipini değiştirmiş olduğunuz bir metin bloğuna harici bir yazı tipi uygulamak için, gelişmiş özelliklerinde stili ayarlamak yeterli değildir. Geçerli biçimlendirmeyi de sıfırlamanız gerekir. Bunu yapmak için metni seçin ve metin düzenleme bloğundaki "Biçimlendirmeyi Kaldır" düğmesini tıklayın.

Dikkat: Bu, boyut, yazı tipi stili, hizalama vb.'de yapılan tüm değişiklikleri sıfırlayacaktır.

Bundan sonra boyutu, hizalamayı ve diğer nitelikleri yeniden belirleyebilirsiniz.

Eğer Metin bloğuüzerinde Açılış sayfası ilk kez oluşturuldu ve yazı tipini değiştirmediyseniz, metne tıklayın ve öğenin gelişmiş özelliklerine yazı tipi için CSS ekleyin.

9. Değişiklikleri kaydedin ve sonuca hayran kalın.

Lütfen dikkat: LPgenerator düzenleyicisinde yazı tipi aynı kalacaktır, ek yazı tipleri yalnızca önizlemede ve yayınlanan açılış ziyareti sırasında görüntülenir.

13 Ocak 2017 18:15

Arduino için openGLCD kütüphanesinin Ruslaştırılması

  • Yeni başlayanlar için elektronik

ks0108 denetleyicisi veya analogları ile grafik ekranlara Rusça metin yazmak hala önemli zorluklar sunuyor. Resmi Arduino siteleri tarafından önerilen openGLCD kütüphanesi, ikincisinin orijinal konfigürasyonunda şu an sürüm hiçbir şey içermiyor Kiril yazı tipleri, cp437font8x8 yazı tipi hariç. Pratikte çok az kullanışlıdır, çünkü Rusça kısmında Win-1251 kodlamasını destekler. Bu nedenle, karakterleri bu yazı tipinde görüntülemek için metne sekizli veya sekizli olarak eklenmelidirler. onaltılık kodlar(ve hala bazı belirsizlikler var küçük harf Yazı tipinin yaratıcısının yorumda belirttiği gibi “ben”) veya yine de yazın ayrı işlev arduinec'in Adafruit-GFX kitaplığı için yaptığı gibi yeniden kodlama.

Diğer şeylerin yanı sıra cp437font8x8, 128x64 piksel ekranlar için çok büyük. en uygun boyut böyle bir ekrandaki yardımcı yazılar için yazı tipi System5x7 olarak kalır. Burada tam olarak Ruslaştırmaya odaklanacağız. sistem yazı tipi, ancak okuyucu bu örneğe göre başka herhangi bir yazı tipini bağımsız olarak Ruslaştırabilir (özellikle daha büyük bir ekranı varsa).

Sorun ne?

Öncelikle sorunun köküne inelim. Arduino IDE her zamanki gibi Metin düzeltici Windows'taki diğerleri gibi evrensel UTF-8 kodlamasında çalışan Windows modern versiyonlar Windows (örneğin Not Defteri). UTF-8, UNICODE çok baytlı karakter kümesinin ekonomik bir sürümüdür. UTF-8'de İngilizce karakterler, sayılar, noktalar, virgüller, parantezler ve diğer simgeler, standart ASCII kodlamasıyla aynı olan tek bir bayt ile temsil edilir. Bu nedenle, taslak kodundaki temsilleri herhangi bir zorluk yaratmaz: derlemeden sonra, İngilizce karakter dizisi, yüklenen hex dosyasına değişiklik yapılmadan aktarılır ve “çeviri olmadan” dedikleri gibi 8 bit denetleyiciye anlaşılabilir.

Bu dönüşüm sürecinde, herhangi bir programlama dilindeki herhangi bir programda olduğu gibi, her karakter, doğrudan kodu biçiminde temsil edilir, yani. seri numarası programın karşılık gelen karakterin grafik yüzünü çıkardığı yazı tipi tablosunda. yazı tipi dosyasında sistem5x7.h openGLCD kitaplığı, bir değişken tarafından temsil edilen karakter sayısı font_Char_Count tip uint8_t, yani bir baytın boyutunu aşamaz. Bu nedenle, UTF-8'de iki bayt alan Kiril karakterleri normal şekilde denetleyiciye aktarılamaz.

Çözüm için önceki denemeler

Bunun her zaman böyle olmadığını unutmayın. Arduino 1.0.x sürümleri (ve söylentilere göre 1.6.0), iki baytlık bir kodu tek baytlık bir koda indirdi ve yüksek baytı (Kiril alfabesi için, aşağıdaki gibi UTF-8 tablosundan aşağıdaki gibi) attı. yukarıdaki bağlantı, 0xD0 veya 0xD1)'dir. Bu nedenle, ortamın bu sürümlerinde yazı tipini iyileştirmek için, yazı tipi dizisinin basitçe Kiril karakterleriyle desteklendiği eski GLCD v3 kitaplığı uygundur, böylece konumları UTF-8 kodlamasının düşük baytıyla çakışır (bayt 0x80 ila 0xBF). Bu modernizasyon, yazarın "Bir grafik ekranda metinle çalışma" makalesinde daha ayrıntılı olarak açıklanmaktadır. Tekrar ediyorum - GLCD v3 kitaplığı ile birlikte Arduino IDE 1.0.x sürümlerinden birine ihtiyacı var, daha modern sürümlerine değil.

Arduino IDE'nin yeni sürümlerinde, giderek daha zor hale geldi. Kitaplık, çift baytlık karakter sayılarını anlamayı kararlı bir şekilde reddediyor, bunun yerine boş bir alan gösteriyor, bu nedenle yazı tipinde basit bir değişiklik burada yapılmayacaktır. Bunu, çift baytlık karakterleri tek baytlık karakterlere dönüştürme işleviyle tamamlamamız gerekiyor.

Çözüm

Yazar, kütüphane işlevlerinin derinliklerine girmedi, ancak openGLCD için bir işlev şeklinde bir eklenti yazdı. outstr() giriş dizesinin tüm öğelerini yineleyen ve bunları bir select deyiminden geçiren değiştirmek. Bir dizeden Kiril karakterlerini yakalar ve bunları modernleştirilmiş yazı tipi dosyasına karşılık gelen tek baytlık kodlarla değiştirir. Sistem5x7R.h.

Örneğin, büyük Rus harfi "F" için, değiştirme dizesi şöyle olacaktır:

Durum "F": GLCD.PutChar(0xA4); kırmak;
Burada 0xA4, UTF-8'deki "F" harfinin kodlamasının düşük baytıdır (yukarıdaki bağlantıya bakın). Bu kodlamaya göre, yeni dosya yazı tipi Sistem5x7R.h. Prensip olarak, bu yaklaşımla, yazı tipine eklemek istediğiniz herhangi bir Rusça karakter kodlaması ve diğer glifler kullanılabilir. eğer sadece onlar toplam tutar 128 parçayı geçmedi: tablonun başlangıcından 0x7F karakterine (127, standart ASCII tablosunun son karakteridir), yazı tipini olduğu gibi bırakmanız önerilir.

Doğru, birkaç özgürlükle ASCII tablosu kendime izin verdim. Mesele şu ki, içinde orijinal yazı tipi sistem5x7.h derece simgesi yerleştirilir son satır Kiril alfabesine atıfta bulunduğumuz 0x80 sembolünü işgal eden tablolar. Kiril tablosunun UTF-8'e göre oluşturulma sırasını bozmamak için bu satır dosyadan atılır. Ve bunun yerine derece simgesi eklenir ASCII karakteri Yazı tipinde zaten amacına uygun olarak kullanılmayan "~" (0x7E sayısı). Ancak böyle bir değiştirme, taslak metnindeki derece işaretini doğrudan klavyeden “~” sembolü şeklinde girmenize izin verir.

Başka bir özgürlük, yazarın, ADPU ve tek renkli metin ekranlarının zamanlarının arkaik olan üstü çizili sıfıra müsamaha göstermemesi gerçeğiyle bağlantılıdır. Bu nedenle, modernize edilmiş yazı tipindeki sıfır, "O" harfinin glifi ile değiştirilir. Sade ilkelere bağlı olanlar, yazı tipi dosyasında basitçe silebilirler. Sistem5x7R.h bu ek (eğik çizgili sıfırın eski glifi orada yorumlanmıştır, kodu 0x30'dur).

Modernize edilmiş kütüphanede openGLCD, makalenin sonundaki bağlantıdan indirebileceğiniz başka bir düzeltme yapıldı - ks0108 denetleyicili ekranlar için bağlantı pinlerinin sırası değiştirildi. Bu sıranın neden kütüphanenin yazarı tarafından seçildiği (resmi Arduino web sitesindeki bağlantıdaki tabloya bakın) bilinmiyor. Yükseltilmiş versiyonda, ekran bağlantısı (örneğin, popüler MT-12864J seçilir) aşağıdaki şemaya göre gerçekleştirilir:

Bağlantı şeması MT-12864J


Değişken direnç R1 buraya üreticinin tavsiyelerine göre bağlanır ve direnç R2, 5 V'luk bir voltaja değil, doğrudan giriş güç kaynağına (Arduino Vin pini) bağlıysa arka ışığın akımını sınırlamaya yarar. daha yüksek bir voltaj.

Latince ile karıştırılmış Rus alfabesinin yanı sıra MT-12864J ekranında sayılar ve bir derece simgesinin görüntülenmesine bir örnek fotoğrafta gösterilmektedir:


Bu örnek için taslak metni:

Rus alfabesinin çıktısı ile eskiz metni

#Dahil etmek //kütüphaneyi dahil et #include //Rus harfleri için çıktı işlevli dosya #include //Rus harflerinin kodlarını içeren dosya void setup() ( GLCD.Init(); //GLCD.ClearScreen(); ) void loop() ( GLCD.SelectFont(System5x7R); // GLCD.CursorTo yazı tipini seç( 0, 0); // imleci şuna ayarla başlangıç ​​pozisyonu//karışık İngilizce-Rus dizileri çıktısı: outstr("ABC AUGDEZHZIKLMNOP\n"); outstr("PRQ RSTUFFHTSCSHSCHIYYYUYA\n"); outstr("nts abvgdejjklmnop\n"); outstr("xyz rstufxchshshchyyeyuya\n"); GLCD.println("1234567890"); GLCD.CursorTo(19,4); //imleci 5. satırın sondan bir önceki konumuna ayarlayın GLCD.print("~C"); //derece C GLCD.println("@;/.,|<>()=-_()\"""); GLCD.CursorTo(4,7); // imleci 8. satırın 4. konumuna getirin GLCD.print("MT-12864J"); )


İşlevi olan dosyalar outstr.h ve yazı tipi Sistem5x7R.h yerleştirildi kök dizini modernize edilmiş kütüphanenin, daha sonra yönergeyi kullanarak taslağın başında üzerlerine ayrı bağlantılar yerleştirilmelidir. #Dahil etmek. İngilizce yazıtlar için, kullanımı hala uygundur standart özellikler println/print, ancak Rusça metindeki bir satırı çevirmeniz gerekiyorsa, "\n" sembolünü açıkça belirtmelisiniz.

Kütüphanenin düzeltilmiş sürümünü indirebilirsiniz.

LED Matrisi, görüntülemek için kullanılabilecek bir grafik göstergedir. basit görüntüler, harfler ve sayılar. Matris göstergeleri cihazı ile ayrıntılı olarak tanıştık. Sonra birkaç matrisi bir arada gruplandırmanın kolay bir iş olmadığı anlaşıldı. Her biri için yeni satır veya bir matris sütunu için, teller ve dirençlerle birlikte yeni bir kaydırma yazmacı ve iyi bir şekilde bir ULN2003 yongası eklemeniz gerekir.

Neyse ki, mühendisler uzun zamandan beri özel mikro devrelerçeşitli göstergeleri yönetmek için. Bu dersimizde MAX7219 çipli matrix modülüne bakacağız. Daha sonra netleşeceği gibi, böyle bir modülle çalışmak bir zevktir.

1. MAX7219 çipli LED matris modülü

Modül, mikro devreli bir pano, bunun için gerekli çember ve aslında bir matris göstergesidir. Genellikle gösterge panoya lehimlenmez, konektöre takılır. Bu, bir grup modülün önce vidalarla bir yüzeye sabitlenebilmesi ve ardından matrislerin bunlara yerleştirilebilmesi için yapılır.

Modül zaten matrisle böyle görünüyor.

Modülün her iki tarafında beş pin bulunur. Bir yandan modüle veri girer, diğer yandan modülden çıkar ve bir sonrakine aktarılır. Bu, y matrislerini zincirlemenizi sağlar.

Giriş konektörü:

  • VCC, GND - güç;
  • DIN - veri girişi;
  • CLK - saat darbesi.

Çıkış soketi:

  • VCC, GND - güç;
  • DOUT - veri çıkışı;
  • CS - modül seçimi (çip seçimi);
  • CLK - saat darbesi.

Modül 5 voltluk bir voltajla çalışır.

Bağ

Matrix modülünü Arduino Uno kontrolörüne aşağıdaki gibi bağlarız:

MAX7219 ile 8×8 LED Matrisi VCC GND cin CS CLK
Arduino Uno +5V GND 11 9 13

devre şeması

Düzen görünümü

2. Max72xxPanel kitaplığını kullanarak piksel çıktısı alın

MAX7219 çipini kontrol etmek için kütüphaneyi kullanacağız. Max72xxPanel. Dersin sonundaki bağlantılardan indirebilirsiniz.

Kütüphaneyi kurun ve yazın küçük program x=3 ve y=4 koordinatlarına sahip yalnızca bir nokta görüntüleyecektir. Nokta 600 milisaniyelik bir süre ile yanıp sönecektir.

#Dahil etmek #Dahil etmek #Dahil etmek int pinCS = 9; intYatayGörüntülerin sayısı = 1; // yatay matris sayısı int numberOfVerticalDisplays = 1; // dikey matris sayısı Max72xxPanel matrix = Max72xxPanel(pinCS, NumberOfHorizontalDisplays, numberOfVerticalDisplays); void setup() ( matrix.setIntensity(4); // 0'dan 15'e parlaklık) void loop() ( matrix.drawPixel(3, 4, HIGH); // pikseli (3,4) matrisinde aydınlat. write(); // tüm pikselleri matris delay(300); matrix.drawPixel(3, 4, LOW); // piksel matrisini boş bırak. write(); delay(300); )

Daha önce bahsedildiği gibi, MAX7219 çipli matris modülleri kolaylıkla birleştirilebilir. Bu amaçla programın başında matrislerin sayısını yatay ve dikey olarak belirledik. İÇİNDE bu durum bir matris kullanılır, bu nedenle bu parametrelerin her ikisi de 1'e eşit olacaktır.

Pikselleri açtıktan ve kapattıktan sonra, çizmekPiksel, işlevi çağırmanız gerekir yazı yazmak. Yazma işlevi olmadan pikseller matriste yanmaz!

Şimdi matris üzerinde geçmişten bir gülen yüz gösterecek bir program yazalım. Sekiz baytlık bir dizi kullanarak gülümsemeyi şifreleyeceğiz. Dizinin her baytı, matris satırından ve bayttaki her bit satırdaki bir noktadan sorumlu olacaktır.

#Dahil etmek #Dahil etmek #Dahil etmek int pinCS = 9; intYatayGörüntülerin sayısı = 1; // yatay matris sayısı int numberOfVerticalDisplays = 1; // dikey matris sayısı Max72xxPanel matrix = Max72xxPanel(pinCS, NumberOfHorizontalDisplays, numberOfVerticalDisplays); const bayt verisi = ( 0b00111100, 0b01000010, 0b10100101, 0b10000001, 0b10100101, 0b10011001, 0b01000010, 0b00111100); void setup() ( matrix.setIntensity(7); // 0'dan 15'e parlaklık matrix.fillScreen(LOW); // matrisi (int y = 0; y için temizleme)< 8; y++) { for (int x = 0; x < 8; x++) { // зажигаем x. piksel içinde y-inci çizgi matrix.drawPixel(x, y, veri[y] & (1<

Not. Max72xxPanel kitaplığında, matris üzerindeki görüntü yönünü ayarlayan bir setRotation işlevi vardır. Örneğin, ifadeyi 90 derece döndürmek istiyorsak, uygun argümanlarla setIntensity işlevini çağırdıktan hemen sonra setRotation'ı çağırmamız gerekecek:

matrix.setRotation(0, 1);

ilk parametre matrisin indeksidir, bizim durumumuzda sıfıra eşittir; ikinci parametre, 90 derecelik dönüş sayısıdır.

3. Adafruit-GFX-Library kullanarak metin çıktısı

Benzer şekilde, matris üzerinde başka herhangi bir sembolü, örneğin bir harfi görüntüleyebilirsiniz. Ancak İngiliz alfabesinin herhangi bir harfini görüntüleyebilmek için programda 26 adede kadar sekiz baytlık dizi tanımlamamız gerekecek! Bu çok kasvetli ve elbette birileri bunu bizden önce yaptı.

Popüler Adafruit-GFX-Library'de, grafikler ve metinlerle çalışma işlevlerine ek olarak, tüm noktalama işaretleri ve diğer hizmet karakterlerinin yanı sıra büyük ve küçük harflerle Latin harflerinin bir tabanı da vardır. Kütüphane bağlantısı dersin sonundadır.

Fonksiyonu kullanarak bir matris üzerinde bir sembol görüntüleyebilirsiniz. çizmekKarakter.

drawChar(x, y, karakter, renk, arka plan, boyut);

Fonksiyonun ilk iki parametresi, karakterin sol üst köşesinin koordinatlarından sorumludur. Üçüncü parametre sembolün kendisidir. Bizim durumumuzdaki sembolün rengi, matris iki renkli olduğu için 1 veya YÜKSEK olacaktır. Arka plan 0 veya DÜŞÜK. Son parametre olan "size"yi 1'e eşitleyelim.

"HELLO WORLD!" ifadesinin tüm harflerini sırayla gösterecek bir program yazalım.

#Dahil etmek #Dahil etmek #Dahil etmek int pinCS = 9; intYatayGörüntülerin sayısı = 1; int SayıOfDikeyGörüntüler = 1; Max72xxPanel matrisi = Max72xxPanel(pinCS, NumberOfHorizontalDisplays, numberOfDikeyEkranlar); Dize bant = "MERHABA DÜNYA!"; int bekle = 20; void setup() ( matrix.setIntensity(7); // 0'dan 15'e parlaklık) void loop() ( for (int i = 0 ; i)< tape.length(); i++) { matrix.fillScreen(LOW); matrix.drawChar(0, 0, tape[i], HIGH, LOW, 1); matrix.write(); } delay(wait); }

Not. Adafruit_GFX kütüphanesi, grafiklerle çalışmak için birçok fonksiyona sahiptir. Örneğin, drawCircle(3, 3, 2, HIGH), merkezi (3,3) ve yarıçapı 2 olan bir daire çizecektir. Son parametre renktir, ancak monokrom bir matris durumunda 1 veya YÜKSEK'tir. drawLine(0, 0, 3, 6, HIGH) işlevi, (0,0) ve (3,6) noktaları arasında bir çizgi çizecektir.

3. Program. max7219 üzerinde çalışan çizgi

Birkaç harfi aynı anda görüntülemek için birkaç LED matrisini bir zincire bağlamamız gerekir. Daha önce de belirtildiği gibi, bunu yapmak çok kolaydır. Altı modülü bağlama şeması şöyle görünecektir.

devre şeması

Düzen görünümü

programı

Harflerin koordinatlarını kaydırarak sürünen bir çizgi oluşturacağız. Harfi istenilen koordinatlarda görüntülemek için aynı drawChar işlevini kullanıyoruz.

#Dahil etmek #Dahil etmek #Dahil etmek int pinCS = 9; intYatayGörüntülerin sayısı = 6; // şimdi yatay olarak 6 matrisimiz var int numberOfVerticalDisplays = 1; // dikey olarak, hala bir Max72xxPanel matrisi = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays); Dize bant = "site"; // kayan metin int wait = 20; // harflerin aşırı hareketleri arasındaki süre int spacer = 1; // harfler arasındaki boşluk int genişlik = 5 + boşluk; // font boyutu void setup() ( matrix.setIntensity(7); // parlaklık ) void loop() ( for (int i = 0 ; i)< width * tape.length() + matrix.width() - 1 - spacer; i++) { matrix.fillScreen(LOW); int letter = i / width; int x = (matrix.width() - 1) - i % width; int y = (matrix.height() - 8) / 2; // center the text vertically while (x + width - spacer >= 0 && harf >= 0) ( if (harf< tape.length()) { matrix.drawChar(x, y, tape, HIGH, LOW, 1); } letter--; x -= width; } matrix.write(); delay(wait); } }

Programı Arduino Uno'ya yüklüyoruz ve çalışan çizgiyi gözlemliyoruz!

Görevler

  1. Dijital saat. Dört LED matrisinden ve gerçek zamanlı bir saat modülünden oluşan bir devre kurun. Arduino için matrislerden saat ve dakikayı ekranda gösterecek bir program yazınız.
  2. Yılan oyunu. Dört LED matrisinden 16 × 16 piksel çözünürlüğe sahip bir ekran oluşturun. Arduino'da "yılan" (veya "python") gibi iyi bilinen bir oyun uygulayın. Hareket yönünü kontrol etmek için şemaya dört düğmenin yanı sıra elma yeme olayını bildirmek için bir zil eklemek gerekir.

Çözüm

max7219'da matrix modüllerini birbirine bağlayarak, yeterince büyük ekranlar monte edebilir ve bunları parlak görüntülerin gerekli olduğu Arduino projelerinde kullanabilirsiniz. LED ekranlar, sıvı kristal ekranların aksine, Düşük sıcaklık. Örneğin, 30 derecelik donda bile sokakta çalışan bir matris dizisi yerleştirilebilir.

max7219'daki tek renkli matris modüllerine ek olarak, başkaları da var benzer cihazlar. Örneğin, 32x16 ve hatta 64x32 piksel çözünürlüğe sahip üç renkli LED ekranlar. Bu tür modüllerden sonraki derslerde ve makalelerde bahsedeceğiz.

kullanışlı bağlantılar

1. Kitaplık Max72xxPanel:

2. Kitaplık Adafruit-GFX-Kütüphane.