Arduino: max7219 sürücülü LED matris. LPgenerator'da ek yazı tiplerini açılış sayfalarına bağlama

  • 13.04.2019

Nihayet Orta Krallık matris modüllerinden geldi. Her modül bir MAX7219 () mikro devreden, bir LED matrisinden oluşur; çemberde bir kapasitör ve bir direnç vardır.


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


Kümedeki mikro devreler seri olarak bağlanmıştır. İnternette mümkün olan en yüksek seri bağlantı sadece 8 adet MAX7219'a izin verir. İnanma. 16 modülü bağladım ve her şey harika çalışıyor.

Ali'de sunulan modüller birkaç versiyonda gelir. En popüler olanları 2 tiptir: DIP'de ve SOIC paketlerinde bir mikro devreli. DIP Çip Modülü daha büyük boyut ve bir kümeye bağlanırken çok uygun değil. Bir grup kabloyla bağlanmanız gerekecek.


Bir SOIC paketinde mikro devreli modüller bir LED matrisinin boyutundadır ve lehimleme veya jumper'larla bağlanır. Güzel ve düzgün bir şekilde ortaya çıkıyor.


Matrisler ve kümelerle çalışmak için en ünlü kitaplıklar MAX72xx Panel Mark Rice ve MajicDesigns tarafından Parola: ilk kitaplığın kullanımı daha kolaydır, ikincisi daha fazla özellikle daha karmaşıktır. Daha detaylı yazacağım.

MAX72xx Paneli

MAX72xx Panel kullanılırken kitaplık kurulumu gereklidir Adafruit gfx.

Metni Ruslaştırmak için indirmeniz gerekecek BU DOSYA ve değiştir standart dosya Arduino / Libraries / Adafruit-GFX-Library-master dizinindeki glcdfont.c. Ayrıca bu dosya, ayrıca istediğin harfler ve sayılar, bir sürü sembol. Hepsi faydalı olamaz. Aşağıdaki resim, sembollerin nasıl oluştuğunu açıklamaktadır.

Gerekirse, kendi sembollerinizi oluşturabilir ve bunları dosyada kullanılmayan sembollerle değiştirebilirsiniz. Çeşitli kitaplıklarda kullanılan hemen hemen tüm bitmap yazı tipleri bu şekilde oluşturulur.

Böylece MAX72xx Panel ve Adafruit GFX kitaplıkları kurulur, glcdfont.c dosyası değiştirilir. Başlatmak Arduino IDE, aç DOSYA ... Çizim, utf8rus işlevini içerir. Karakter tablosunun Rus dili için dönüştürülmesini sağlar. Sadece programdan, yani programdan normal çıktı için gereklidir. istenen metin Rusça yazılmış. Metin COM bağlantı noktası üzerinden girilirse, karakter kodlarının düzeltilmesi Serial_Read işlevinde gerçekleşir. Geliştiriciler, IDE'de ve konsolda farklı kodlamalar kullandılar.

Dosyanın başında kitaplığın çalışması için gerekli satırlar vardır.

int numberOfHorizontalDisplays \u003d 1;

int numberOfVerticalDisplays \u003d 16;

SOIC paketinde mikro devreli modüllerim var. Küçük bir tuhaflıkları var. Modüllerin matrisi 90 derece döndürülerek kurulur. Bu, bağlantının rahatlığı için bir ücrettir. Kitaplıklarla birlikte gelen çizimleri çalıştırırsanız, her modülde aşağıdan yukarıya metin göstereceklerdir. Metin zikzaklarla görüntülenecektir. Bu rahatsızlığı tedavi etmek için, kütüphaneye 16 dikey ekran olduğu "söylenmelidir" (fiziksel olarak yatay olarak yerleştirilmiştir). Ve sonra void Kurulumunda kitaplığı belirtin.

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

Her matrisi programlı olarak çevirir. Ve her şey iyi görüntülenecek.

DIP mikro devre paketine sahip modüller buna sahip değildir. Bir grup kablo dışında her şey güzel.

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

MajicDesigns tarafından Parola.

Bir SOIC paketinde mikro devreli modül sahipleri de bir kümedeki modüllerin oryantasyonu sorunuyla karşı karşıya kalacaktır. Sadece MAX72xx'tekinden biraz farklı görünüyor. Burada modüller sıra dışı görünecek.


Kitaplıkla birlikte verilen örneklerden HelloWorld çizimi.

Eskizde bu rahatsızlığı programlı olarak tedavi edemedim. Onu farklı şekilde iyileştirdim. Sondaki Adruino / libraries / MD_MAX72xx_lib.h dosyasında satırları resimdeki gibi bulmanız gerekir.


Ve vurgulanan satırı 1'den 0'a sabitleyin. Dosyayı kaydedin. Arduino IDE'nin yeniden başlatılmasına gerek yoktur. Doldur, bak.


Artık 24 animasyon efektini kullanabilirsiniz. Animasyon, P.displayText komutuyla başlatılır ("Görüntülenecek metin", "metin hizalama", hız, gecikme, fade in, fade out). Gördüğünüz gibi birçok ayar var.

Ve en zevkli olanı, kümenin sanal bölgelere bölünmesidir. Bölgelerle çalışmak çok zor değil. Krokiyi göndermiyorum, kitaplıkla birlikte gelen örneklerde. Artık saati kümenin başlangıcında ve kalan modüllerdeki haberlerle birlikte çalışan hattı neredeyse hiç problem yaşamadan görüntüleyebilirsiniz.

Tahmin edebileceğiniz gibi, Kiril harflerinde bir sorun var. Aynı zamanda çözülebilir. Yakın önceki dosya MD_MAX72xx_font.cpp dosyası aynı dizinde bulunur. Bu bir yazı tipi dosyasıdır. İçindeki semboller, GFX kütüphanesinin yazı tipi dosyasına benzer şekilde oluşturulur. Ufak bir fark var. Burada sembol boyutu 5 puandan az olabilir. Adafruit GFX kütüphanesinde ünlem işaretiörneğin, diğer herhangi bir karakter gibi 5 nokta genişliğindedir, yalnızca bir sıra nokta kullanılır. Geri kalanı yanmaz, ancak sembolün altında kullanılır. Parolada, aynı ünlem işareti de bir sıra noktayı kaplar, yalnızca yakınlarda boş noktalar yoktur, ancak bitişik semboller durabilir. Resmi anlamak daha net olacak.


İlk incelenen kitaplıktaki dosyaya benzer Kiril karakterleri içeren dosyayı eklemek için zaman yoktur. Biri bunu yapıp bana bir dosya gönderirse, onu bu yazıya ekleyeceğim ve ben ve sitemin misafirleri size minnettar olacağız.

Sonuç olarak. 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 yeteneklere sahiptir.

13 Ocak 2017, 18:15

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

  • Yeni Başlayanlar için Elektronik

Ks0108 kontrol cihazı veya analogları ile grafik ekranlara Rusça metin yazmak hala önemli zorluklar sunmaktadır. Resmi Arduino siteleri tarafından önerilen openGLCD kütüphanesi, ikincisinin orijinal konfigürasyonunda şu an sürümü, cp437font8x8 yazı tipi dışında herhangi bir Kiril yazı tipi içermez. Pratikte çok az kullanılıyor, çünkü Rusça bölümünde Win-1251 kodlamasını destekliyor. Bu nedenle, böyle bir yazı tipindeki karakterleri görüntülemek için, ya sekizlik olarak metne eklenmeleri gerekir ya da onaltılık kodlar (ve aynı zamanda belirsizlikler kalır küçük harf Yazı tipini oluşturan kişinin yorumda da belirttiği gibi "ben") veya yine de ayrı işlev arduinec'in Adafruit-GFX kitaplığı için yaptığı gibi kod dönüştürme.

Diğer şeylerin yanı sıra cp437font8x8, 128x64 piksel ekranlar için çok büyük. Optimal boyut böyle bir ekrandaki yardımcı etiketler için yazı tipi System5x7 olarak kalır. Burada Ruslaştırma üzerine odaklanacağız. sistem yazı tipiancak okuyucu bu örneğe dayalı olarak başka herhangi bir yazı tipini bağımsız olarak ruslaştırabilir (özellikle daha büyük bir ekrana sahipse).

Sorun ne?

Önce sorunun kökenine inelim. Arduino IDE normal metin düzeltici Windows, diğer ülkelerde olduğu gibi evrensel UTF-8 kodlamasında çalışır. modern versiyonlar Windows (örneğin Not Defteri). UTF-8, çok baytlı UNICODE kodlamasının düşük maliyetli bir sürümüdür. UTF-8'de İngilizce karakterler, sayılar, virgül-parantezler ve diğer her tür simge, standart ASCII kodlamasına uyan tek bir bayt ile temsil edilir. Bu nedenle, eskiz kodundaki gösterimleri herhangi bir zorluk yaratmaz: derlemeden sonra, yüklenen onaltılık dosyaya bir dizi İngilizce karakter değiştirilmeden aktarılır ve dedikleri gibi 8 bitlik denetleyiciye anlaşılabilir olduğu ortaya çıkar. , "Çeviri olmadan".

Bu dönüştürme 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 stilini çıkardığı yazı tipi tablosunda. Yazı tipi dosyasında System5x7.h openGLCD kitaplıkları karakterlerin sayısı bir değişkenle temsil edilir font_Char_Count tip uint8_tyani bir bayt boyutunu aşamaz. Bu nedenle, UTF-8'de iki bayt alan Kiril karakterleri, denetleyiciye normal şekilde iletilemez.

Bir çözüm için önceki girişimler

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 kodu bir bayta kısalttı ve yüksek baytı (Kiril alfabesi için aşağıdaki UTF-8 tablosunda gösterildiği gibi) attı. yukarıdaki bağlantı, 0xD0 veya 0xD1'dir). Bu nedenle, eski GLCD v3 kitaplığı, ortamın bu sürümlerinde yazı tipini geliştirmek için uygundur; burada yazı tipi dizisi Kiril karakterleri ile desteklenir, böylece konumları UTF-8 kodlamasının düşük baytıyla çakışır (0x80'den baytlar) 0xBF'ye kadar). Bu yükseltme, yazarın "Grafik Ekrandaki Metinle Çalışma" adlı makalesinde daha ayrıntılı olarak açıklanmıştır. Tekrar ediyorum - GLCD v3 kitaplığıyla bağlantılı olarak Arduino IDE 1.0.x sürümlerinden birine ihtiyaç duyuyor, daha modern sürümlerine değil.

Arduino IDE'nin daha yeni sürümleriyle işler daha karmaşık hale geldi. Kütüphane, çift baytlık karakter sayılarını anlamayı kararlı bir şekilde reddeder, bunun yerine boş alan gösterir, bu nedenle yazı tipinin basit bir şekilde değiştirilmesi burada yeterli olmayacaktır. Çift baytlık karakterleri tek baytlık karakterlere dönüştürme işlevi ile tamamlamalıyız.

Karar

Yazar, kütüphane işlevlerinin derinliklerine inmedi, ancak bir işlev biçiminde openGLCD için bir eklenti yazdı outstr ()giriş dizesinin tüm öğeleri üzerinde yinelenen, bunları seçme operatöründen geçiren Değiştirmek... Dizeden Kiril karakterlerini yakalar ve modernize edilmiş yazı tipi dosyasına karşılık gelen tek baytlık kodlarla değiştirir. System5x7R.h.

Örneğin, büyük Rusça harf "F" için, ikame dize şu şekilde olacaktır:

Durum "F": GLCD.PutChar (0xA4); kırmak;
Burada 0xA4, UTF-8'de kodlanan "F" harfinin alt baytıdır (yukarıdaki bağlantıya bakın). Bu kodlamaya uygun olarak derlendi yeni dosya yazı tipi System5x7R.h... Prensip olarak, bu yaklaşımla, yazı tipindeki yazı tipine eklemek istediğiniz herhangi bir Rusça karakter kodlamasını ve diğer glifleri kullanabilirsiniz. Keşke onlar toplam 128 parçayı geçmedi: tablonun başından 0x7F karakterine (127, standart ASCII tablosunun son karakteridir), yazı tipini olduğu gibi bırakmanız önerilir.

Doğru, birkaç özgürlük aSCII tablosu Kendime izin verdim. Mesele şu ki orijinal yazı tipi System5x7.h derece simgesi görüntülendi son satır Kiril alfabesinde zaten bahsettiğimiz 0x80 karakterini işgal eden tablolar. Kiril tablonun UTF-8'e göre yapım sırasını ihlal etmemek için bu satır dosyadan atıldı. Ve yerine derece simgesi eklenir aSCII karakteri Yazı tipinde hala amaçlandığı gibi kullanılmayan "~" (Sayı 0x7E). Ancak bu tür bir değiştirme, çizim metnindeki derece simgesini doğrudan klavyeden "~" simgesi biçiminde girmenize olanak tanır.

Başka bir özgürlük, yazarın üstü çizili sıfırı - ACPU'nun arkaik zamanları ve tek renkli metin gösterimleri - tolere etmemesi gerçeğiyle bağlantılıdır. Bu nedenle, modernize edilmiş yazı tipindeki sıfır, "O" harfinin glifi ile değiştirilmiştir. Saf ilkelere bağlı kalanlar yazı tipi dosyasından kolayca silebilirler. System5x7R.h bu ek (eski üstü çizili sıfır glif orada yorumlanmış olarak bırakılır, kodu 0x30'dur).

Modernize edilmiş bir kütüphanede openGLCDmakalenin sonundaki bağlantıdan indirebileceğiniz, başka bir düzeltme daha yapıldı - ekranlar için pimlerin ks0108 denetleyicisine bağlanma sırası değiştirildi. Kütüphane yazarının neden bu siparişi seçtiği (resmi Arduino web sitesindeki bağlantıdaki tabloya bakın) bilinmiyor. Modernize edilmiş versiyonda, ekran bağlanır (örneğin, popüler MT-12864J seçildi) aşağıdaki şemaya göre gerçekleştirilir:

Bağlantı şeması MT-12864J


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

Fotoğrafta, Latin ile karıştırılmış Rus alfabesinin MT-12864J ekranının yanı sıra sayılar ve derece simgesinin bir örneği gösterilmektedir:


Bu örnek için taslak metni:

Eskiz metni, Rus alfabesinin çıktısı ile

#Dahil etmek // kitaplığı dahil et #include // Rusça harflerin çıktısını alma işlevine sahip 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çin (0, 0); // imleci başlangıç \u200b\u200bpozisyonu // karışık İngilizce-Rusça dizeleri göster: outstr ("ABC AUGDEZIKLMNOP \\ n"); outstr ("PRQ РСТУФХЦЧØЩessionЬЭyuЯ \\ n"); outstr ("nts abvgdezhziyklmnop \\ n"); outstr ("xyz rstufhtschshshch'yueyuya \\ n"); GLCD.println ("1234567890"); GLCD.CursorTo (19.4); // imleci 5. satırın sondan bir önceki konumuna ayarlayın GLCD.print ("~ C"); // derece С GLCD.println ("@; /., |<>() \u003d -_ () \\ "" "); GLCD.CursorTo (4,7); // imleci 8. satırın 4. konumuna ayarlayın GLCD.print (" MT-12864J ");)


İşleve sahip dosyalar outstr.h ve yazı tipi System5x7R.h içinde barındırılan kök dizini yükseltilmiş kütüphane, daha sonra direktif kullanılarak taslak başlangıcına ayrı bağlantılar yerleştirilmelidir. #Dahil etmek... İngilizce yazıtlar için hala kullanımı uygundur standart fonksiyonlar println / baskı, ancak Rusça metinde bir satır beslemeniz gerekiyorsa, açıkça "\\ n" karakterini belirtmelisiniz.

Kitaplığın revize edilmiş versiyonunu indirebilirsiniz.

Merhaba sevgili LPgenerator kullanıcıları!

Lütfen dikkat: yazı tipini bağlamak için standart bir şekildehazır bir alet kullanın. Kullanımı kolaydır ve zahmetsizce ek yazı tipleri eklemenize olanak tanır:

Bu yazıda, açılış sayfanıza nasıl ek yazı tipi ekleyeceğinizi öğreneceksiniz. google hizmeti Komut dosyaları ekleyerek yazı tipleri.

2. Alfabeyi, yani karakter kümesini belirttiğinizden emin olun.

Açılış sayfası Rusça ise Latince'yi ( Latince) ve Kiril ( Kiril):

3. En sevdiğiniz yazı tipini (veya yazı tiplerini) seçin ve " +":

4. Eklenen yazı tipi galerisine gidin. Bunu yapmak için alttaki siyah çubuğa tıklayın:

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

Unutmayın: kullanma büyük bir sayı çeşitli google yazı tipleri Yazı tipleri, açılış sayfanızın yüklenmesini yavaşlatabilir. Sağda, seçilen stillerin sayfa yükleme hızı üzerindeki etkisinin bir göstergesi görüntülenir.

6. Set 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ı tiplerine hala ihtiyacımız var.

LPgenerator düzenleyicisinde gerekli açılış sayfasını açın ve aracı tıklayın "Kodlar":

  • açılan pencerede tıklayın "Yeni komut dosyası ekle";
  • komut dosyasının 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 şuna benzer: font-family: "Istakoz", el yazısı;

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

Açılış sayfasının farklı öğeleri için stil uygulamanın bazı özellikleri vardır.

CTA öğeleri

Bir düğmedeki yazı tipi stilini değiştirmek için, üzerine tıklayın ve sağdaki genişletilmiş özelliklerdeki yazı tipi için CSS ekleyin (sekizinci adımda kopyalanır).

Açılış sayfası metin blokları

Yazı tipini zaten değiştirdiğiniz bir metin bloğuna harici bir yazı tipi uygulamak için, sadece gelişmiş özelliklerinde bir stil yazmak yeterli değildir. Ayrıca mevcut biçimlendirmeyi de sıfırlamalısınız. Bunu yapmak için metni seçin ve metin düzenleme bloğundaki Biçimlendirmeyi Kaldır düğmesini tıklayın.

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

Ardından boyutu, hizalamayı ve diğer nitelikleri yeniden belirleyebilirsiniz.

Eğer bir metin bloğu açılış sayfasında ilk kez oluşturulur ve yazı tipini değiştirmediniz, ardından metne tıklayın ve öğenin gelişmiş özelliklerinde yazı tipi için CSS ekleyin.

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

Lütfen unutmayın: yazı tipi LPgenerator düzenleyicide aynı kalacaktır, ek yazı tipleri yalnızca önizlemede ve yayınlanan açılış sayfasını ziyaret ederken görüntülenir.

LED Matrix, görüntülemek için kullanılabilecek bir grafik göstergedir. basit görüntüler, harfler ve sayılar. Matris göstergelerinin cihazını adresinde ayrıntılı olarak tanıdık. Sonra birkaç matrisi bir arada gruplamanın kolay bir iş olmadığı anlaşıldı. Her biri için yeni sıra veya bir matris sütunu, teller ve dirençlerle birlikte yeni bir kaydırma yazmacı ve dostane bir şekilde bir ULN2003 mikro devresi eklemeniz gerekir.

Neyse ki, mühendisler çoktan geliştirdiler özel mikro devreler çeşitli göstergeleri kontrol etmek için. Bu eğitimde MAX7219 IC ile matris modülüne bakacağız. İleride anlaşılacağı üzere böyle bir modül ile çalışmak büyük bir zevk.

1. MAX7219 mikro devreli LED matris modülü

Modül, mikro devresi, bunun için gerekli bir bağlayıcı ve aslında bir matris göstergesi olan bir karttır. Genellikle, gösterge karta lehimlenmez, ancak konektöre yerleştirilir. Bu, bir grup modülün önce bir yüzeye vidalarla sabitlenmesi ve ardından kalıpların bunlara yerleştirilebilmesi için yapılır.

Ve modül matrisle böyle görünüyor.

Modülün her iki tarafında beş pim vardır. Bir yandan veri modüle girer, diğer yandan veri modülden çıkar ve bir sonrakine aktarılır. Bu, matrislerin birbirine zincirlenmesine izin verir.

Giriş konnektörü:

  • VCC, GND - güç kaynağı;
  • DIN - veri girişi;
  • CLK - senkronizasyon darbesi.

Çıkış Konnektörü:

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

Modül, 5 voltluk bir voltajla güçlendirilmiştir.

Bağ

Matrix modülünü Arduino Uno controller'a aşağıdaki gibi bağlarız:

MAX7219 ile 8x8 LED Matrix VCC GND CIN CS CLK
Arduino Uno + 5V GND 11 9 13

Şematik diyagram

Düzen görünümü

2. Max72xxPanel kitaplığını kullanarak pikselleri görüntüleme

MAX7219 mikro devresini kontrol etmek için kütüphaneyi kullanacağız Max72xxPanel... Dersin sonundaki bağlantıları kullanarak indirebilirsiniz.

Kitaplığı kurun ve yazın küçük program, x \u003d 3 ve y \u003d 4 koordinatlarına sahip yalnızca bir nokta görüntüler. Nokta, 600 milisaniyelik bir süre ile yanıp sönecektir.

#Dahil etmek #Dahil etmek #Dahil etmek int pinCS \u003d 9; int numberOfHorizontalDisplays \u003d 1; // yatay matris sayısı int numberOfVerticalDisplays \u003d 1; // dikey matris sayısı Max72xxPanel matrix \u003d Max72xxPanel (pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays); void setup () (matrix.setIntensity (4); // 0'dan 15'e parlaklık) void loop () (matrix.drawPixel (3, 4, HIGH); // pikseli koordinatlar (3,4) matrisiyle aydınlat. write (); // tüm pikselleri matris gecikmesine çıkar (300); matrix.drawPixel (3, 4, LOW); // piksel matrix.write (); gecikme (300);)

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

İşlevi kullanarak pikselleri açıp kapattıktan sonra drawPixel, işlevi aramanız gerekiyor yazmak... Yazma işlevi olmadan pikseller matriste görüntülenmeyecektir!

Şimdi matris üzerinde geçmişten bir smiley görüntüleyecek bir program yazalım. Gülümsemeyi sekiz baytlık bir dizi kullanarak şifreleyelim. Dizinin her bir baytı, bir matris satırından ve bir bayttaki her bit, bir satırdaki bir noktadan sorumlu olacaktır.

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

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

matrix.setRotation (0, 1);

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

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

Aynı şekilde, matriste başka herhangi bir sembolü, örneğin bir harfi görüntüleyebilirsiniz. Ancak İngilizce alfabenin herhangi bir harfini görüntüleyebilmek için, programda 26 adet sekiz baytlık dizi tanımlamamız gerekecek! Bu çok kasvetli ve elbette birisi bunu bizden önce yaptı.

Popüler Adafruit-GFX-Library'de, grafik ve metinle çalışma işlevlerine ek olarak, büyük ve küçük harflerle Latin harflerinin yanı sıra tüm noktalama işaretleri ve diğer hizmet karakterleri de vardır. Kitaplığa bağlantı eğitimin sonundadır.

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

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'tür. Son "size" parametresini 1'e eşit yapalım.

Şimdi matris üzerinde “MERHABA DÜNYA!” Cümlesinin tüm harflerini gösterecek bir program yazalım.

#Dahil etmek #Dahil etmek #Dahil etmek int pinCS \u003d 9; int numberOfHorizontalDisplays \u003d 1; int numberOfVerticalDisplays \u003d 1; Max72xxPanel matrix \u003d Max72xxPanel (pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays); Dize bandı \u003d "MERHABA DÜNYASI!"; int bekleme \u003d 20; void setup () (matrix.setIntensity (7); // 0'dan 15'e parlaklık) void loop () (for (int i \u003d 0; i< tape.length(); i++) { matrix.fillScreen(LOW); matrix.drawChar(0, 0, tape[i], HIGH, LOW, 1); matrix.write(); } delay(wait); }

Not. Adafruit_GFX kitaplığı, grafiklerle çalışmak için birçok işlev içerir. Örneğin, drawCircle (3, 3, 2, HIGH), merkezi (3,3) ve yarıçapı 2 olan bir daire çizecektir. Son parametre renktir, ancak tek renkli bir matris durumunda 1 veya YÜKSEK olur. DrawLine (0, 0, 3, 6, HIGH), (0,0) ve (3,6) noktaları arasında bir çizgi parçası çizecektir.

3. Program. Max7219'da sürünen çizgi

Aynı anda birkaç harfi 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ğlamak için şema böyle görünecektir.

Şematik diyagram

Düzen görünümü

Program

Harflerin koordinatlarını değiştirerek sürünen çizgiyi yapacağız. Harfi istenen koordinatlarda görüntülemek için aynı drawChar fonksiyonunu kullanıyoruz.

#Dahil etmek #Dahil etmek #Dahil etmek int pinCS \u003d 9; int numberOfHorizontalDisplays \u003d 6; // şimdi yatay olarak 6 matrisimiz var int numberOfVerticalDisplays \u003d 1; // ve dikey olarak, daha önce olduğu gibi, bir Max72xxPanel matrisi \u003d Max72xxPanel (pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays); Dize bandı \u003d "site"; // yüzen metin int wait \u003d 20; // harflerin aşırı hareketleri arasındaki zaman int spacer \u003d 1; // harfler arasındaki boşluk int genişlik \u003d 5 + boşluk bırakıcı; // yazı tipi boyutu void setup () (matrix.setIntensity (7); // parlaklık) void loop () (for (int i \u003d 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 >\u003d 0 && harf\u003e \u003d 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 sürünen çizgiyi gözlemliyoruz!

Görevler

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

Sonuç

Max7219'da matris modüllerini birbirine bağlayarak, yeterince büyük ekranları bir araya getirebilir ve parlak görüntülerin gerekli olduğu Arduino projelerinde kullanabilirsiniz. LED ekranlar, sıvı kristal ekranların aksine, şunlara dayanıklıdır. düşük sıcaklık... Örneğin, matrislerden sürünen bir çizgi, 30 derecelik donda bile dışarıya yerleştirilebilir.

Tek renkli matris modüllerine ek olarak, max7219'da başkaları da var benzer cihazlar... Örneğin, 32 × 16 ve hatta 64 × 32 piksel çözünürlüğe sahip üç renkli LED ekranlar. Bundan sonraki derslerde ve makalelerde bu tür modüller hakkında konuşacağız.

kullanışlı bağlantılar

1. Kitaplık Max72xxPanel:

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