HD44780'de LCD'de sürünen çizgi.

C'de çalışan hat için "hazır çözüm" arayışı herhangi bir sonuç vermedi. Bu yüzden kendim yapmak zorunda kaldım.

Bu kod "parçası", HD44780 denetleyici veya benzeri LCD ekranlarda, herhangi bir yerde ve herhangi bir sayıda tanıdık alanı kullanarak sürünen bir çizgiyi (sağdan sola) görüntülemenizi sağlar.

İlk söylenecek şey, C dilinin "doğrudan" dizelerle çalışmanıza izin vermediğidir. Yani, atama operatörünü kullanarak bir karakterin bir dizeden diğerine kopyalanması imkansızdır ( = ) ... bunun için özel bir işlev kullanmanız gerekir strncpy (). Genel olarak konuşursak, C'deki dizeleri işlemek için kullanılan birkaç işlev vardır. Bu işlevlerin Kendi Kendine Eğitmenler'de kullanımına ayrı bir bölüm ayrılmıştır. CV_AVR'deki Yardım'da, dizelerle çalışmaya yönelik işlevlerin açıklaması bölümde yer almaktadır. "Dize İşlevleri"... Bu işlevlerin prototipleri dosyadadır string.h.

"... orijinal satır ..." - "sürünen" satırda görüntülenmesini istediğiniz karakter satırı;

"... görüntülenen karakterler ..." gerçek sürünen çizgidir.

Sürünen çizgiyi düzenlemek için aşağıdaki algoritma seçildi:

1. Görüntülenen karakterler sağdan sola kaydırılır. Aşırı sol "kayıptır".

2. Kaydırmadan sonra, orijinal dizeden sonraki karakter en sağdaki karaktere kopyalanır.

3. Orijinal satırın sonuna ulaşıldığında, orijinal satırın ilk karakteri sonraki olur.

Karakterleri kaydırmak için - kaydırılan hücre için, karakter kodu HD44780 ekran RAM'inden (DDRAM) okunur ve soldaki RAM hücresine yazılır.

HD44780'deki Veri Sayfasına göre, üst satırın sol karakteri 0x00 DDRAM adresine sahip ve alt satırın sol karakteri 0x40'tır. Özel olarak ekran RAM'ine başvurmak için (ve karakter üreteci RAM'ine değil), RS bitinin 1'e eşit olması gerektiği unutulmamalıdır (RS, adres baytındaki en önemli bittir, bkz. Veri Sayfası).

Sonuç olarak, soldan üst satırın ikinci karakterini "adreslemek" için, adresle "çalışmak" gerektiğini anlıyoruz. 0x01 | 0x80 \u003d 0x81.

HD44780'in "dahili içeriğini" yazmak ve okumak için işlevler kitaplıkta (prototipler) lcd.h) .... bu nedenle ... programın kendisi:

/ * CV_AVR için

Bu örnekte, kayan çizgi, 16 bitlik bir göstergenin alt satırının 8'den (0xC7) 16'sına kadar olan rakamlarla görüntülenir.

. ......

#Dahil etmek

işaretsiz karakter n_sim \u003d 1, m_end \u003d 43; // 43 - örnekteki satır uzunluğu
...........

beg_stroka () (
işaretsiz karakter i;

// sürünen çizgiyi kaydır

eğer (beg_str) (
için (i \u003d 0; i<9;i++)lcd_write_byte(0xC7+i,lcd_read_byte(0xC8+i));
beg_str \u003d 0;

// sonraki karakteri en sağdaki konuma yaz

lcd_gotoxy (15,1);
lcd_putchar (ish_str);
eğer (++ n_sim\u003e m_end) n_sim \u003d 1;
}
}

Sözlük:

n_sim - kaynak dizedeki geçerli karakterin konumuna işaretçi;

m_end, kaynak dizedeki toplam karakter sayısıdır;

beg_str - biraz "müsaadeli" kayma. "Koşu" hızını ayarlamak için kullanılabilir;

ish_str orijinal dizedir.

Büyük olasılıkla, mevcut C derleyicilerinin her biri, HD44780 ile çalışmak için kitaplık işlevlerine sahiptir. Bu nedenle, "sizin" derleyiciniz için programı "yeniden yapmak" zor olmayacaktır.

İyi bilinen "HD44780.exe" yardımcı programını kullanarak orijinal satırı "hazırlıyorum". Bunu kullanırken yorumlarda satır uzunluğu belirtilir: "/ * Maksimum satır uzunluğu: 43 bayt * /"

QAPASS LCD 1602, Rusça yazı tipini desteklemez, ancak Kiril alfabesini kendi sembollerinizi oluşturarak Arduino üzerinde görüntüleyebilirsiniz. Arduino LCD ekran üzerinde Kiril alfabesiyle herhangi bir sembol ve harfin nasıl yapılacağını düşünelim. Bunu yapmak için, değişkeni çizimde kullanmamız gerekir. bayt ve işlev lcd.createChar ()... Hemen, işaretler için Arduino'daki bellek miktarının yalnızca sekiz karakterle sınırlı olduğunu not ediyoruz.

Karakterinizi LCD 1602'de nasıl görüntülersiniz?

Karakter üretme tablosu (CGROM), sembolünüzün veya Kiril harfinin ekranda görüntülenmesine yardımcı olacaktır. Arduino'daki bu tür bellek, CGRAM gibi kendi sembollerini saklayabilir, ancak bellek boyutu sınırlıdır ve yalnızca 8 yerel sembolü tutabilir. Bir ev hava durumu istasyonu oluşturmak için kullanışlı olan standart olmayan sembollerden biri derece işaretidir. Bir sembol çizelim.


Önce bir kağıt parçası alın ve üzerine 5 sütun ve 8 satırlık bir tablo çizin. Ardından, ekranda vurgulanması gereken tablodaki hücreleri gölgeleyin (yukarıdaki fotoğrafa bakın). Bunun nedeni, ekrandaki her karakterin piksellerden oluşmasıdır (5 piksel genişlik ve 8 piksel yükseklik). Daha sonra, sembolümüzü sekiz öğeden - sekiz satırdan oluşan bir veri dizisi olarak temsil ederiz.

LCD 1602'de kendi sembolümüzü sergiliyoruz

Ders için aşağıdaki ayrıntılara ihtiyacımız var:

  • arduino Uno / Arduino Nano / Arduino Mega kartı;
  • LCD monitör 1602;
  • baba-anne kabloları.

LCD ekran, I2C aracılığıyla dört “klasörden ana” kabloyla bağlanır - 2 veri kablosu ve 2 güç kablosu. Bir Ardiuno UNO ekranı bağlarsanız, aşağıdaki diyagramı kullanın - çıktı SDA A4 portuna bağlanır, pin SCL - A5 ve iki güç kablosuna - GND ve 5V. QAPASS 1602, I2C veriyolu üzerinden Arduino Mega'ya bağlanırsa, kartta karşılık gelen bağlantı noktaları bulunur - SDA ve SCL.

LCD I2C'de bir karakter oluşturmak için çizim

#Dahil etmek #Dahil etmek // kendi sembolümüzü oluşturup "simvol" olarak adlandırın bayt simvol \u003d (0b01100, 0b10010, 0b10010, 0b01100, 0b00000, 0b00000, 0b00000, 0b00000); geçersiz kurulum () (lcd.init (); // LCD ekranı başlat lcd.backlight (); lcd.createChar (1, simvol); lcd.setCursor (0,0); // imleci ilk satırın 1 karakterine koy lcd.print (karakter (1)); // ilk satırdaki karakteri yazdır ) boşluk döngüsü () ()

Kod için açıklamalar:

  1. bayt dizisini kullanarak simvol \u003d (); daha önce çizdiğimiz derece işaretini bir kağıda şifreledik;
  2. lcd.createChar (num, data) işlevi; parantezlerin gösterdiği LCD için özel bir karakter oluşturur num - sembol numarası ve veri - dizi hakkındaki veriler.
  3. dizideki her satır 0b - "sıfır" ve büyük "b" ile başlar.

LCD 1602'de Rusça yazı tipinin görüntülenmesi

QAPASS ekranı 5'e 8 pikselde 8 yeni karakteri (0'dan 7'ye numaralandırılmış) destekler. Sembol gibi Kiril harfleri, karşılık gelen dizeyi karakterize eden sekiz baytlık bir dizi olarak belirtilebilir. 8 karaktere kadar ekleyebilirsiniz, bu nedenle örnekte olduğu gibi çıktıda Latin ve Kiril harflerinin bir kombinasyonunu kullanın. "Ben bir siteyim" etiketli bir çizim yükleyin

LCD I2C'de Rusça harflerle eskiz

#Dahil etmek // I2C aracılığıyla cihazları kontrol etmek için kitaplık #Dahil etmek // LCD 1602 için kitaplığı dahil et LiquidCrystal_I2C lcd (0x27,20,2); // 20x2 ekran için bir lcd adı atayın // Kiril alfabesiyle bir kalp ve dört harfli sembol oluşturun bayt kalbi \u003d (0b00000, 0b01010, 0b11111, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000); bayt I \u003d (0b01111, 0b10001, 0b10001, 0b01111, 0b00101, 0b01001, 0b10001, 0b00000); bayt B \u003d (0b11111, 0b10000, 0b10000, 0b11110, 0b10001, 0b10001, 0b11110, 0b00000); bayt N \u003d (0b10001, 0b10001, 0b10011, 0b10101, 0b11001, 0b10001, 0b10001, 0b00000); bayt F \u003d (0b01110, 0b10101, 0b10101, 0b10101, 0b01110, 0b00100, 0b00100, 0b00000); geçersiz kurulum () (lcd.init (); // LCD ekranı başlat lcd.backlight (); // ekran arka ışığını aç // karakterlere bir sıra numarası atayın lcd.createChar (1, kalp); lcd.createChar (2, I); lcd.createChar (3, B); lcd.createChar (4, N); lcd.createChar (5, F); lcd.setCursor (6.0); // imleci ilk satırın 6. karakterine ayarlayın lcd.print (karakter (2)); lcd.print (""); lcd.print (karakter (1)); lcd.setCursor (0,1); // imleci ikinci satırın başlangıcına ayarla lcd.print ("P"); lcd.print ("O"); lcd.print (karakter (3)); lcd.print ("O"); lcd.print ("T"); lcd.print ("E"); lcd.print ("X"); lcd.print ("H"); lcd.print (karakter (4)); lcd.print ("K"); lcd.print ("A"); lcd.print ("1"); lcd.print ("8"); lcd.print ("."); lcd.print ("P"); lcd.print (karakter (5)); ) boşluk döngüsü () ()

Kod için açıklamalar:

  1. Bayt işlevindeki dizge dizileri simvol \u003d (); bir dizeye yazılabilir;
  2. Kelime İnternet sitesi bir dizi Rus ve Latin harf kullanır.
  3. Void loop () prosedürü çizimde kullanılmaz, ancak yine de mevcuttur.

Her yıl mağaza tabelalarına, sokaklara ve geçitlere panolar yerleştirilerek reklam kayıtlarını metin biçiminde yansıtır. Panellerdeki ışıklar farklı şekillerde yanar: çizgiler yukarı, aşağı, sağa ve sola hareket eder. Parlayan resimler de önemlidir.

Yoldan geçenler bu tür aksesuarları göz ardı etmeyecektir. Birçok acemi elektronik mühendisi, bu tasarımın nasıl çalıştığı ve onu yaratmak için neyin gerekli olduğu ile ilgileniyor. Ürün evde kolaylıkla yapılır. Makale, elektronik cihazların acemi amatörünü, Arduino'nun ana bileşen olarak kullanıldığı sürünen hattın ilkeleri hakkında bilgilendirecek.

Arduino üzerindeki sürünen hat, Arduino mikrodenetleyicisine dayanan elektronik bir üründür. Cihazın çalışma alanı ledlerle kaplıdır. Temel amaç, görüntüleri ve metin mesajlarını yayınlamaktır. Veriler statik veya hareketli olabilir.

Işık dizeleri modüller kullanılarak oluşturulur. Varsayılan boyut 32x16 cm'dir Çalışma yüzeyi için tasarlanan alan doğrudan modül sayısının oranına ve boyutlarına bağlıdır.

Ek olarak, çizgiye resmi kontrol etme görevi olan bir kontrolör yerleştirilir. Cihaz çevrimdışı çalışıyor. Bir metin mesajını veya bir resmi değiştirmek için, kayan çizgi bilgisayara bağlanır. Alüminyum profil tüm yapıyı tutar.

Arduino'da renge göre 2 tip sürünen çizgi vardır:

  1. Tek renkli veya düz renk.
  2. Çeşitli tonlar - genellikle 8 renk, siyah arka plan da buraya dahildir.

Çoğu insan en yoğun olduğu için kırmızıyı tercih eder. Ayrıca beyaz daha az popüler değil. Beyaz ışıklar siyah bir arka plan üzerinde parlak bir şekilde parlarsa metin daha temiz görünür.

Kullanıcı tüm verileri mikro denetleyici belleğine yerleştirir. Bir resmi veya satırı güncellemenin birkaç yöntemi vardır:

  1. Temel - USB kablosuyla. Arduino mikroişlemcisi bir USB bağlantı noktası üzerinden bir bilgisayar cihazına bağlanır. Geliştirici bilgisayardan program kodunu mikroişlemcinin belleğine aktarır.
  2. LAN kablosuyla ağ üzerinden. Yöntem, elektronik hattı sürekli güncelleyen kullanıcılar için sağlanmıştır. Bağlantı tekniği önceki noktaya benzer.

Türüne göre, iç ve dış mekan kullanımı için yapılmış basamaklar vardır. Sokakta olanlar yağmur suyunun LED'lere girmesini önlemek için genellikle özel bir vizörle korunur.

Gerekli araç ve gereç seti

Aşağıda, Arduino üzerinde yanan ışıklar inşa etmek için gerekli olacak araçların ayrıntılı bir açıklamasını içeren bir tablo bulunmaktadır.

Araç Özellikleri:
Nano, Arduino serisindeki en küçük modeldir. Doğası gereği, bu platform akrabasına benzer -. Acemi elektronik mühendisleri çoğunlukla cihazlarının kompakt modellerini oluşturur, bu nedenle kompakt Nano bunun için kullanışlıdır. Harici güç soketi içeride gizlidir. Çalışma USB bağlantı noktaları üzerinden yapılır. Özelliklerin geri kalanı Uno modeline benzer.

Teknik özellikler:

  • cihaza güç vermek için gereken voltaj - 5 volt;
  • ağırlık - 7 gram;
  • boyut - 19x42 mm;
  • çalışma frekansı - 16 MHz;
  • flash bellek - 16 Kb;
  • rAM - 2 Kb;
  • dijital pinler - 14 adet ve 6 adet PWM çıkışı olarak kullanılabilir
  • girişte gerekli güç kaynağı yaklaşık 12 volttur.

Platforma güç vermenin 2 yolu vardır:

  1. Mikro USB veya mini USB ile.
  2. Toplam voltajın 6 ila 20 volt olduğu harici bir güç kaynağı kullanırken. Neredeyse hiç titreşim dalgası yok.
LED şerit LED şerit, birkaç bölümde paralel bir şekilde bağlanır. Her bölümün uzunluğu 5 metreden fazla olmamalıdır. Ayrıca bu ölçü ile mağazalarda satılmaktadır. 10 hatta 15 metre gerektiren bir hat oluşturmanız gerekiyorsa, tamir etmeniz gerekecektir. Hiçbir koşulda birinci parçayı ikinci parçanın başlangıcına bağlayamazsınız. Bant izlerinin tutulduğu hesaplamayı gösteren uzunluğun 5 metre olduğuna inanılmaktadır. Bandı yüklerseniz, kırılma meydana gelir ve yapılan ürün bozulacaktır.

Ve tımarın yanından, düzensiz parıltı nedeniyle metin izi çirkin görünecek: pistin başında ışık parlak olacak ve sonunda kararacak.

Teller Bileşenleri bağlamak için kablo seti
Proses kontrol panosu Mikroişlemci ve bitmiş ürün için diğer parçalar (örn. Troika Shield) kontrol platformuna yerleştirilir.

Çizimler ve diyagramlar

LED şeridi kontrol etmek için öncelikle 2'den 9'a kadar numaralandırılmış portların anotlarına voltaj vermeniz gerekir. Bundan sonra, voltaj doğrudan katotlara verilir. Bu, bir transistör bloğu gerektirir.

Dikkat! Platform 5 volt verir. Anotları panoya bağlamak için 220 ohm'da çalışacak dirençler kullanmanız gerekir. Aynı zamanda, transistör bloğunu çıkışlara bağlamak için 1K ohm direnç gereklidir.

Proje, 2N2904 bipolar transistörlerin kullanımını içermektedir. Tüm transistörleri matris platformundaki bağlantınıza bağlarsanız, yalnızca 10 adet transistöre ihtiyacınız vardır. Elektronik cihazları tasarlarken, bu tip transistör en popüler olanıdır ve Arduino'da bir tarama hattı geliştirmek için tüm kriterler ve koşullar için uygundur. Oluşturulan sisteme küçük bir voltaj uygulanacaktır.

Kasetteki ışıkların nasıl yandığını açıklayalım. LED'in anotuna sinyal sağlamaktan sorumlu 1 kontak seçilir. Vericinin tabanında, önceki işlemle eşzamanlı olarak, sayaç üzerindeki çıkış deliğinden bir sinyal gönderilir. Bu nedenle, transistörün toplayıcısından voltaj doğrudan LED'lerin katotlarına gider. Matris yüzeyinde, bitişik çizgilerdeki anotlar, bitişik sütunların katotları ile iç içe geçmiştir. Bu nedenle kullanıcı, tüm tarama çizgisi aynı anda yandığında olguyu gözlemleyebilir.

Bir sürüm daha var:

Şema şöyle görünecek:

Yazılım bölümü

İlk seçenek için kod şu şekilde görünebilir:

Void kurulumu () (int i; for (i \u003d 2; i< 10; i++) pinMode(i,OUTPUT); pinMode(clock,OUTPUT); pinMode(reset,OUTPUT); digitalWrite(reset,HIGH); delayMicroseconds(5); digitalWrite(reset,LOW); } void display_symbol(int loops) { for(x=0;x-1; y -) (bayt sıcaklığı \u003d semboller [x] [y]; bayt temp_2 \u003d semboller [y]; bayt değeri \u003d (sıcaklık<\u003e 7-z); for (int i \u003d 0; i<8; i++) digitalWrite(i+2, (val>\u003e i) & B00000001); gecikme Mikrosaniye (800); digitalWrite (saat, YÜKSEK); gecikme Mikrosaniye (5); digitalWrite (saat, DÜŞÜK); )))))

İkinci durumda "arduino üzerinde sürünen hat" projesinin uygulanması için program kodu aşağıdaki gibidir:

Int RGB1 \u003d 12; int RGB2 \u003d 11; int RGB3 \u003d 10; int RGB4 \u003d 9; int RGB5 \u003d 8; int RGB6 \u003d 7; int RGB7 \u003d 6; int RGB8 \u003d 5; int RGB9 \u003d 4; int RGB10 \u003d 3; int anahtar1 \u003d A3; int anahtar2 \u003d A2; int key3 \u003d A1; int key4 \u003d A0; void setup () (Serial.begin (9600); pinMode (RGB1, OUTPUT); pinMode (RGB2, OUTPUT); pinMode (RGB3, OUTPUT); pinMode (RGB4, OUTPUT); pinMode (RGB5, OUTPUT); pinMode (RGB6 , OUTPUT); pinMode (RGB7, OUTPUT); pinMode (RGB8, OUTPUT); pinMode (RGB9, OUTPUT); pinMode (RGB10, OUTPUT); pinMode (key1, INPUT_PULLUP); pinMode (key2, INPUT_PULLUP); pinMode (key3 INPUT_PULLUP); pinMode (key4, INPUT_PULLUP);) void loop () (int key1Value \u003d analogRead (key1); int key2Value \u003d analogRead (key2); int key3Value \u003d analogRead (key3); int key4Value \u003d analogRead (key4); if ( key1Value<= 100) { delay(30); if (key1Value <= 100) { digitalWrite(RGB5,HIGH); digitalWrite(RGB6, HIGH); delay(50); digitalWrite(RGB4, HIGH); digitalWrite(RGB7,HIGH); delay(50); digitalWrite(RGB3, HIGH); digitalWrite(RGB8, HIGH); delay(50); digitalWrite(RGB2,HIGH); digitalWrite(RGB9, HIGH); delay(50); digitalWrite(RGB1, HIGH); digitalWrite(RGB10, HIGH); delay(1000); } else { digitalWrite(RGB1, LOW); digitalWrite(RGB2, LOW); digitalWrite(RGB3, LOW); digitalWrite(RGB4, LOW); digitalWrite(RGB5, LOW); digitalWrite(RGB6, LOW); digitalWrite(RGB7, LOW); digitalWrite(RGB8, LOW); digitalWrite(RGB9, LOW); digitalWrite(RGB10, LOW); } } if (key2Value <= 100) { digitalWrite(RGB1,HIGH); digitalWrite(RGB6, HIGH); delay(40); digitalWrite(RGB2, HIGH); digitalWrite(RGB7,HIGH); delay(40); digitalWrite(RGB3, HIGH); digitalWrite(RGB8, HIGH); delay(40); digitalWrite(RGB4,HIGH); digitalWrite(RGB9, HIGH); delay(40); digitalWrite(RGB5, HIGH); digitalWrite(RGB10, HIGH); delay(1000); } else { digitalWrite(RGB1, LOW); digitalWrite(RGB2, LOW); digitalWrite(RGB3, LOW); digitalWrite(RGB4, LOW); digitalWrite(RGB5, LOW); digitalWrite(RGB6, LOW); digitalWrite(RGB7, LOW); digitalWrite(RGB8, LOW); digitalWrite(RGB9, LOW); digitalWrite(RGB10, LOW); } if (key3Value <= 100) { digitalWrite(RGB1,HIGH); delay(90); digitalWrite(RGB1, LOW); digitalWrite(RGB2, HIGH); delay(90); digitalWrite(RGB2, LOW); digitalWrite(RGB3, HIGH); delay(90); digitalWrite(RGB3, LOW); digitalWrite(RGB4, HIGH); delay(90); digitalWrite(RGB4, LOW); digitalWrite(RGB5,HIGH); delay(90); digitalWrite(RGB5, LOW); digitalWrite(RGB6,HIGH); delay(90); digitalWrite(RGB6, LOW); digitalWrite(RGB7,HIGH); delay(90); digitalWrite(RGB7, LOW); digitalWrite(RGB8,HIGH); delay(90); digitalWrite(RGB8, LOW); digitalWrite(RGB9,HIGH); delay(90); digitalWrite(RGB9, LOW); digitalWrite(RGB10,HIGH); delay(1000); } else { digitalWrite(RGB1, LOW); digitalWrite(RGB2, LOW); digitalWrite(RGB3, LOW); digitalWrite(RGB4, LOW); digitalWrite(RGB5, LOW); digitalWrite(RGB6, LOW); digitalWrite(RGB7, LOW); digitalWrite(RGB8, LOW); digitalWrite(RGB9, LOW); digitalWrite(RGB10, LOW); } if (key4Value <= 100) { digitalWrite(RGB1,HIGH); delay(50); digitalWrite(RGB1, LOW); digitalWrite(RGB2, HIGH); delay(50); digitalWrite(RGB2, LOW); digitalWrite(RGB3, HIGH); delay(50); digitalWrite(RGB3, LOW); digitalWrite(RGB4,HIGH); delay(50); digitalWrite(RGB4, LOW); digitalWrite(RGB5, HIGH); delay(50); digitalWrite(RGB5, LOW); digitalWrite(RGB6, HIGH); delay(50); digitalWrite(RGB6, LOW); digitalWrite(RGB7,HIGH); delay(50); digitalWrite(RGB7, LOW); digitalWrite(RGB8, HIGH); delay(50); digitalWrite(RGB8, LOW); digitalWrite(RGB9, HIGH); delay(50); digitalWrite(RGB9, LOW); digitalWrite(RGB10,HIGH); delay(50); digitalWrite(RGB10, LOW); digitalWrite(RGB9, HIGH); delay(50); digitalWrite(RGB9, LOW); digitalWrite(RGB8, HIGH); delay(50); digitalWrite(RGB8, LOW); digitalWrite(RGB7,HIGH); delay(50); digitalWrite(RGB7, LOW); digitalWrite(RGB6, HIGH); delay(50); digitalWrite(RGB6, LOW); digitalWrite(RGB5, HIGH); delay(50); digitalWrite(RGB5, LOW); digitalWrite(RGB4,HIGH); delay(50); digitalWrite(RGB4, LOW); digitalWrite(RGB3, HIGH); delay(50); digitalWrite(RGB3, LOW); digitalWrite(RGB2, HIGH); delay(50); digitalWrite(RGB2, LOW); digitalWrite(RGB1, HIGH); delay(50); digitalWrite(RGB1, LOW); delay(1000); } else { digitalWrite(RGB1, LOW); digitalWrite(RGB2, LOW); digitalWrite(RGB3, LOW); digitalWrite(RGB4, LOW); digitalWrite(RGB5, LOW); digitalWrite(RGB6, LOW); digitalWrite(RGB7, LOW); digitalWrite(RGB8, LOW); digitalWrite(RGB9, LOW); digitalWrite(RGB10, LOW); } }

Bir cihaz oluşturmak için adım adım talimatlar

Arduino tasarım algoritması sürünen çizgi:

  1. Yukarıda açıklanan programın kodunu bir USB kablosu ve bir bilgisayar kullanarak mikroişlemciye yüklüyoruz.
  2. LED şeridi de kontrol platformuna yerleştiriyoruz.
  3. Tüm detayları birbirine bağlıyoruz.
  4. Gücü açıyoruz.

Son videoda, planın ikinci versiyonunun nasıl çalıştığını anlayabilirsiniz:

Akıllı telefon kontrolü

LED ışıklar bir akıllı telefondan kontrol edilebilir. Planı uygulamak için Bluetooth'a ve Arduino için tasarlanmış özel bir modüle (HC-06) ihtiyacınız olacak. Ama bunu sonraki derslerde zaten yapacağız. Hepsi iyi projeler.

Karakter grafik ekranlarıyla çalışmak için, standart Arduino IDE setinde bulunan ve 8 bitlik (4 bit) paralel arabirim üzerinde çalışmak üzere tasarlanmış LiquidCrystal kitaplığını kullanmanızı öneririz. Ekranınız Arduino'ya I2 veriyolu üzerinden bağlıysa, LiquidCrystal_I2C kütüphanesini kurmanız gerekir (fonksiyonlarının çoğu ilk kütüphane ile aynıdır).

Desteklenen ekranlar:

Görüntüle Bağlantı ve başlatma
LCD1602 - karakter ekranı (16x02 karakter),


#Dahil etmek
[ , 8 , 9 , 10 , 11 ]);
geçersiz kurulum () ( lcd.begin (16, 2);}

// Açıklama:

geçersiz kurulum () ( OBJECT.begin (NUMBER_COLUMNS, NUMBER_LINE); )


LiquidCrystal OBJECT (RS, E, D0, D1, D2, D3, D4, D5, D6, D7);


i2C arayüzlü (mavi)

#Dahil etmek
#Dahil etmek
LiquidCrystal_I2C lcd (0x27 veya 0x3F, 16 , 2);
geçersiz kurulum () ( lcd.init (); }

// Açıklama:



LCD1602 I2C - karakter ekranı (16x02 karakter),
i2C arayüzlü (yeşil)

#Dahil etmek
#Dahil etmek
LiquidCrystal_I2C lcd (0x27 veya 0x3F, 16 , 2);
geçersiz kurulum () ( lcd.init (); }

// Açıklama:
LiquidCrystal_I2C OBJECT (ADDRESS_I2C, NUMBER_COLUMNS, NUMBER_LINE);
// ADDRESS_I2C, 0x27 veya 0x3F olabilir

LCD2004 - karakter ekranı (20x04 karakter),
paralel arabirimli (mavi)

#Dahil etmek
LiquidCrystal lcd (2, 3, 4, 5, 6, 7[ , 8 , 9 , 10 , 11 ]);
geçersiz kurulum () ( lcd.begin (20, 4);}

// Açıklama:
LiquidCrystal OBJECT (RS, E, D4, D5, D6, D7);
void setup () (OBJECT.begin (NUMBER_ OF COLUMNS, NUMBER_ OF ROWS);)

// 8 veri yolu kablosu kullanılıyorsa, hepsini belirtin
LiquidCrystal OBJECT (RS, E, D0, D1, D2, D3, D4, D5, D6, D7);

LCD2004 I2C - karakter ekranı (20x04 karakter),
i2C arayüzlü (mavi)
#Dahil etmek
#Dahil etmek
LiquidCrystal_I2C lcd (0x27 veya 0x3F, 20 , 4);
geçersiz kurulum () ( lcd.init (); }

// Açıklama:
LiquidCrystal_I2C OBJECT (ADDRESS_I2C, NUMBER_COLUMNS, NUMBER_LINE);
// ADDRESS_I2C, 0x27 veya 0x3F olabilir

# 1 Örnek

I2C veri yolu ile bağlanan LCD1602 ekranındaki yazıyı görüntüleriz. LCD2004 ekranla çalışmak için, 3. satırı LiquidCrystal_I2C lcd (0x27,20,4) olarak değiştirmeniz gerekir;

#Dahil etmek // I2C veri yolu LiquidCrystal_I2C lcd (0x27,16,2) aracılığıyla LCD ekranla çalışmak için kitaplığı bağlarız; // Görüntüleme parametrelerini belirterek kütüphane nesnesini bildirin (I2C adresi \u003d 0x27, sütun sayısı \u003d 16, satır sayısı \u003d 2) // Yazı görünmezse, 0x27 adresini 0x3F void setup () (// lcd.init () ile değiştirin; // LCD ekranla çalışmaya başlayın lcd.backlight (); // LCD ekran arka ışığını açın lcd.setCursor (0, 0); // İmleci konumuna getirin (0 sütun, 0 satır) lcd.print ("LCD"); // Ayarlanan imleç konumundan başlayarak "LCD" metnini görüntüleyin lcd.setCursor (0, 1); // İmleci konuma getirin (0 sütun, 1 satır) lcd.print ("www.iarduino.ru"); // Ayarlanmış imleç konumundan başlayarak "www.iarduino.ru" metnini görüntüleriz) // // void loop () () // Döngü işlevinin içindeki kod sürekli olarak yürütülür. Ancak statik metin görüntülediğimiz için, döngü kodunu kullanmadan başlangıçta onu yalnızca 1 kez görüntülememiz gerekir.

# 2 Örnek

Yazıyı 4 bit paralel veri yolu ile bağlanan LCD1602 ekranda görüntüleriz. LCD2004 ekranıyla çalışmak için 5. satırı lcd olarak değiştirmeniz gerekir. Başlar (20, 4);

#Dahil etmek // LiquidCrystal kütüphanesini LCD ekran LiquidCrystal lcd (2,3,4,5,6,7) ile çalışmak için bağlarız; // Ekran pimlerini (RS, E, D4, D5, D6, D7) gösteren kütüphane nesnesini bildirin // Veri yolunun 8 kablosu kullanılıyorsa, (RS, E, D0, D1, D2, D3, D4, D5, D6, D7) void setup () (// lcd.begin (16, 2); // Numarayı (sütunlar, satırlar) belirterek LCD ekranla çalışmaya başlayın lcd.setCursor (0, 0); // İmleci konuma getirin (0 sütun, 0 satır) lcd.print ("LCD2004"); // Ayarlanan imleç konumundan başlayarak "LDC1602" metnini görüntüleyin lcd.setCursor (0, 1); // İmleci konuma getirin (0 sütun, 1 satır ) lcd.print ("www.iarduino.ru"); // Ayarlanan imleç konumundan başlayarak "www.iarduino.ru" metnini görüntüleyin) // // void loop () () // Döngü işlevinin içindeki kod sürekli çalıştırılır ... Ancak statik metin görüntülediğimiz için, döngü kodunu kullanmadan başlangıçta onu yalnızca 1 kez görüntülememiz gerekir.

# 3 Örnek

I2C veri yolu ile bağlanan LCD1602 ekranda "Rusça" yazısını görüntülüyoruz:

#Dahil etmek // I2C veriyolu ile çalışmak için kitaplığı bağlarız #include // I2C veri yolu LiquidCrystal_I2C lcd (0x27,16,2) aracılığıyla LCD ekranla çalışmak için kitaplığı bağlarız; // Görüntüleme parametrelerini belirterek kütüphane nesnesini bildirin (I2C adresi \u003d 0x27, sütun sayısı \u003d 16, satır sayısı \u003d 2) // uint8_t sembolü \u003d (// 6 kendi sembolden oluşan bir dizi (k ve th z s), her sembol 8 bayttan (0, 0,18,20,24,20,18,0), // ila (0, 0,17,19,21,25,17,0), // ve (10, 4 , 17,19,21,25,17,0), // d (0, 0,15,17,15, 5, 9, 0), // i (0, 0, 0,14,17, 6,17 , 14, 0), // s (0, 0,17,17,29,19,29,0)); // s // void setup () (// lcd.init (); // LCD ekranla çalışmaya başlayın lcd.backlight (); // LCD ekran arka ışığını açın lcd.createChar (1, sembol); // 1 Yükle ekran RAM'indeki "k" karakteri lcd.createChar (2, sembol); // 2. "ve" ekran RAM'ine yükle lcd.createChar (3, sembol); // Ekran RAM lcd.createChar 3. "th" karakterini yükle (4, sembol); // Ekran RAM'ına 4. "i" sembolünü yükle lcd.createChar (5, sembol); // Ekran RAM'ına 5. karakter "z" yi yükle lcd.createChar (6, sembol); // 6 yükle RAM ekranındaki "s" karakteri lcd.setCursor (0, 0); // İmleci konumuna getirin (0 sütun, 0 satır) lcd.print ("Pycc \\ 1 \\ 2 \\ 3 \\ 4 \\ 5 \\ 6 \\ 1" ); // "Pycc" nin Latince olarak yazıldığı "Rus dili" metnini ve "ky dili" - ekran RAM'inden bir karakter çıkarmanız gerekiyorsa, \\ ve karakter numarasını yazın // void döngüsü ( ) () // Döngü işlevinin içindeki kod sürekli çalışır. Ancak statik metin görüntülediğimiz için, döngü kodunu kullanmadan başlangıçta onu yalnızca 1 kez görüntülememiz gerekir.

# 4 Örnek

I2C veriyolu ile bağlanan LCD1602 ekranda başlatıldıktan sonra geçen süreyi görüntüleriz:

#Dahil etmek // I2C veriyolu ile çalışmak için kitaplığı bağlarız #include // I2C veri yolu LiquidCrystal_I2C lcd (0x27,16,2) aracılığıyla LCD ekranla çalışmak için kitaplığı bağlarız; // Görüntüleme parametrelerini belirterek kitaplık nesnesini bildirin (I2C adresi \u003d 0x27, sütun sayısı \u003d 16, satır sayısı \u003d 2) // uint8_t tim_D, tim_H, tim_M, tim_S; // Günleri, saatleri, dakikaları ve saniyeleri depolamak için değişkenleri bildirin. uint32_t tim; // Başlangıçtan bu yana geçen toplam süreyi depolamak için bir değişken bildirin. // Yazı görünmezse, 0x27 adresini 0x3F ile değiştirin void setup () (// lcd.init (); // LCD ekranla çalışmayı başlatın lcd.backlight (); // LCD arka ışığını açın) // // void loop () (// // Başlangıçtan bu yana geçen süreyi alın: // tim \u003d millis () / 1000; // Toplam saniye sayısını alın (maksimum 4 "294" 967 saniye ≈ 49.7 gün) tim_S \u003d tim% 60 ; // Saniyeleri alın: tüm saniyelerin kalanı dakikaya bölünür (60 saniye). Tim \u003d (tim-tim_S) / 60; // Toplam dakika sayısını alın. Tim_M \u003d tim% 60; // Dakikaları alın: hepsinin kalanı saat başına dakika (60 dakika). tim \u003d (tim-tim_M) / 60; // Toplam saat sayısını alın. tim_H \u003d tim% 24; // Saatleri alın: tüm saatlerin geri kalanının güne (24 saat) bölümü. tim_D \u003d (tim-tim_H) / 24; // Toplam gün sayısını alın. // Başlangıçtan sonra geçen süreyi yazdırın: // if (millis ()% 1000<100){ // Условие выполняется в течении 100 первых миллисекунд каждой новой секунды. delay(100); lcd.setCursor(0, 0); // Устанавливаем курсор в позицию (0 столбец, 0 строка). lcd.print("Days: "); // Выводим текст. if(tim_D<10){lcd.print(0);} // Выводим 0 перед количеством дней. lcd.print(tim_D); // Выводим количество дней. lcd.setCursor(0, 1); // Устанавливаем курсор в позицию (0 столбец, 1 строка) lcd.print("Time: "); // Выводим текст. if(tim_H<10){lcd.print(0);} // Выводим 0 перед количеством часов. lcd.print(tim_H); // Выводим количество часов. lcd.print(":"); // Выводим символ. if(tim_M<10){lcd.print(0);} // Выводим 0 перед количеством минут. lcd.print(tim_M); // Выводим количество минут. lcd.print(":"); // Выводим символ. if(tim_S<10){lcd.print(0);} // Выводим 0 перед количеством секунд. lcd.print(tim_S); // Выводим количество секунд. } // } //

LiquidCrystal ve LiquidCrystal_I2C kitaplıklarında ortak olan işlevler:

  • başla (sütunlar, satırlar, ); - Sütun sayısını, satırları ve karakter boyutunu belirterek başlatmayı görüntüleyin.
  • açık (); - İmleç 0,0 konumunda iken ekranı temizler (Çok zaman alır!).
  • ev (); - İmleci 0,0 konumuna ayarlama (Çok zaman alır!).
  • görüntüle (); - Ekranın hızlı açılması (RAM'deki verileri değiştirmeden).
  • görüntü yok (); - Ekranı hızlı kapatın (RAM'deki verileri değiştirmeden).
  • goz kirpmak (); - Yanıp sönen imleci açın (yaklaşık 1 Hz frekansla).
  • noBlink (); - Yanıp sönen imleci kapatın.
  • imleç (); - İmleç alt çizgisini etkinleştirin.
  • noCursor (); - İmleç alt çizgisini kapatın.
  • scrollDisplayLeft (); - Ekranı sola kaydırır. Shift display, bir sütunu sola koordine eder (RAM'i değiştirmeden).
  • scrollDisplayRight (); - Ekranı sağa kaydırır. Ekranı kaydır, bir sütunu sağa koordine eder (RAM'i değiştirmeden).
  • soldan sağa (); - Gelecekte, bir sütun sağa bir sonraki karakteri görüntüledikten sonra imlecin konumunun kaydırılacağını belirtir.
  • sağdan sola (); - Bir sütun sola, sonraki karakteri görüntüledikten sonra imlecin konumunun daha fazla kaydırıldığını belirtir.
  • noAutoscroll (); - Metnin ileride imleç konumunun soluna hizalanacağını belirtir (her zamanki gibi).
  • otomatik kaydırma (); - Metni imleç konumunun sağına daha fazla yaslanacağını belirtir.
  • createChar (num, dizi ); - Belirtilen numara altında CGRAM ekranına özel bir karakter yazma.
  • setCursor (sütun, sıra ); - İmleci, sütun ve satır sayısı ile gösterilen konuma ayarlama.
  • yazdır (metin ); - Ekrandaki metni, sembolleri veya sayıları görüntüleyin. Sözdizimi, Serial sınıfındaki aynı adın işlevine benzer.

Yalnızca LiquidCrystal_I2C kitaplığında uygulanan işlevler:

  • içinde (); - Ekran başlatma. Nesne oluşturulduktan sonra LiquidCrystal_I2C kütüphanesinin ilk komutu olmalıdır. Aslında bu işlev LiquidCrystal kitaplığında da bulunur, ancak bu kitaplıkta nesne oluşturulduğunda otomatik olarak (varsayılan olarak) çağrılır.
  • arka ışık (); - Ekran arka ışığını açın.
  • noBacklight (); - Ekran arka ışığını kapatın.
  • setBacklight (bayrak ); - noBacklight ve arka ışık işlevleri yerine kullanılan arka ışık kontrolü (doğru - etkinleştir / yanlış - devre dışı bırak).

Bağ:

// I2C veriyolu için:
#Dahil etmek
#Dahil etmek
LiquidCrystal_I2C lcd (adres , col , kürek çekmek );
geçersiz kurulum () (
lcd.init ();
}

Parametre:
  • adres: I2C veriyolunda adresi göster - 0x27 veya 0x3F
  • col:
  • kürek çekmek:
// 4 telli paralel veri yolu için:
#Dahil etmek
Likit kristal lcd ( RS , E , D4 , D5 , D6 , D7 );
geçersiz kurulum () (
lcd.begin ( col , kürek çekmek );
}
Parametre:
  • RS: RS pininin bağlı olduğu arduino pin #
  • E: E pininin bağlı olduğu arduino pin numarası
  • D0 ... D3: D0-D3 pinlerinin bağlı olduğu Arduino pinlerinin sayısı
  • D4 ... D7: D4-D7 pinlerinin bağlı olduğu Arduino pinlerinin sayısı
  • col: ekran tarafından uygulanan sütun sayısı
  • kürek çekmek: ekran tarafından gerçekleştirilen satır sayısı
// Paralel 8 telli veri yolu için:
#Dahil etmek
Likit kristal lcd ( RS , E , D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 );
geçersiz kurulum () (
lcd.begin ( col , kürek çekmek );
}
başla (col , kürek çekmek , );
Ekran boyutları ve sembolleri ile ilklendirmeyi görüntüleyin.
Parametre:
  • col: ekran tarafından uygulanan sütun sayısı
  • kürek çekmek: ekran tarafından gerçekleştirilen satır sayısı
  • boyut: bir sabitle belirtilen karakter boyutu:
    LCD_5x8DOTS (varsayılan) veya LCD_5x10DOTS
/ * I2C veriyolu için: * / #include // I2C veriyolu ile çalışmak için kitaplığı bağlarız #include // LCD ekranla çalışmak için kütüphaneyi I2C veri yolu LiquidCrystal_I2C lcd (0x3F, 20.4) aracılığıyla bağlarız; // Görüntüleme parametrelerini belirterek kütüphane nesnesini bildirin (I2C adresi \u003d 0x3F, sütun sayısı \u003d 20, satır sayısı \u003d 4) // void setup () (// lcd.init (); // LCD ekranla çalışmayı başlatın lcd.backlight (); // LCD ekranın arka plan ışığını açın ... // Başlangıçta görüntülenmesi gereken bilgileri görüntüleyin) // // void loop () () // ... // Kodunuzun algoritmasına göre değişmesi gereken bilgileri görüntüleyin) // / * 4 telli paralel veri yolu için: * / #include // LiquidCrystal kütüphanesini LCD ekran LiquidCrystal lcd (2,3,4,5,6,7) ile çalışmak için bağlarız; // Ekran pimlerini (RS, E, D4, D5, D6, D7) gösteren kütüphane nesnesini bildirin // Veri yolunun 8 kablosu kullanılıyorsa, (RS, E, D0, D1, D2, D3, D4, D5, D6, D7) void setup () (// lcd.begin (16, 2); // Numarayı belirterek (sütunlar, satırlar) LCD ekranla çalışmayı başlatın ... // Başlangıçta görüntülenmesi gereken bilgileri görüntüleyin) / / // void loop () () // ... // Kodunuzun algoritmasına göre değişmesi gereken bilgileri görüntüleyin) //

Ekran kontrol fonksiyonları:

görüntüle ();
NoDisplay işlevi tarafından kapatıldıktan sonra ekranı açar.
Not: İşlev hızlı bir şekilde ve ekran RAM'inde değişiklik yapmadan çalışır.
görüntü yok ();
Ekranı kapatır.
Ekrandaki veriler, ekran işlevi çağrılıncaya kadar görüntülenmeyecek, ancak RAM belleğinden silinmeyecek ve ekran işlevi çağrıldıktan sonra tekrar görüntülenecektir.
Not: İşlev hızlı bir şekilde ve ekran RAM'inde değişiklik yapılmadan yürütülür.
scrollDisplayLeft ();
Kaydırır koordinatları bir sütun sola doğru görüntüler.



scrollDisplayRight ();
Kaydırır koordinatları bir sütun sağa doğru görüntüler.
Bu fonksiyonun sürekli çağrılması, sürünen bir çizginin etkisini yaratacaktır.
Koordinatlar, hem ekranda bulunan bilgiler için hem de daha sonra görüntülenecek bilgiler için kaydırılır.
Not: İşlev, ekran RAM'i değiştirilmeden gerçekleştirilir.
Fonksiyonu art arda 40 kez çağırırsanız, koordinat orijinal noktaya geri dönecektir.
açık ();
İmleç 0,0'a ayarlandığında ekranı temizler.
Ekrandaki bilgiler kalıcı olarak silinecektir.
Not: Uzun zaman alır.
arka ışık ();
Ekran arka ışığını açar.
noBacklight ();
Ekran arka ışığını kapatın.
Not: Bu işlev yalnızca LiquidCrystal_I2C kitaplığında uygulanır.
setBacklight (bayrak );
Arka ışık kontrolü (noBacklight ve arka ışık işlevleri yerine).
Parametre:
  • bayrak: etkinleştirmek için true, arka ışığı devre dışı bırakmak için false.
Not: Bu işlev yalnızca LiquidCrystal_I2C kitaplığında uygulanır.
/ * Ekran kontrol işlevlerini izlemek için bir yazı görüntüleyin: * / lcd.cursor (0,0); // İmleci ekranın en üst köşesine ayarlayın (0 sütun, 0 satır) lcd.print ("iarduino.ru"); // "iarduino.ru" metnini görüntüleyin (ilk harf "i" "0,0" konumunda ve son "u" "10,0" konumunda, görünmez imleç "11,0" konumunda olacaktır) // lcd.noDisplay (); // Ekranı kapatın (yazı ekrandan kaybolacaktır) lcd.display (); // Ekranı açın (yazı ekranda aynı yerde görünecektir) lcd.scrollDisplayLeft (); // Sütunların koordinatlarını sola kaydırın (ekranda ilk harf "i" olmadan "arduino.ru" gösterilir, bu ekranın ötesine geçer ancak RAM'inde kalır) lcd.scrollDisplayRight (); // Sütunların koordinatlarını sağa kaydırın (ekran, orijinal olarak görüntülendiği yerde "iarduino.ru" u gösterecektir) lcd.clear (); // Ekranı temizleyin (yazı, ekrandan kalıcı olarak kaybolacaktır) lcd.noBacklight (); // Ekran arka ışığını devre dışı bırakın lcd.backlight (); // Ekran arka ışığını aç lcd.setBacklight (0); // Ekran arka ışığını kapat lcd.setBacklight (1); // Ekran arka ışığını aç

İmleç kontrol fonksiyonları:

setCursor (col , kürek çekmek );
İmleci belirtilen konuma ayarlar.
Parametre:
  • col: sütun numarası (0'dan başlar).
  • kürek çekmek: satır numarası (0'dan başlar)
ev ();
İmleci 0,0 konumuna ayarlama. SetCursor (0,0) gibi çalışır;
Not: Uzun zaman alır.
goz kirpmak ();
Yanıp sönen imleci açar.
Not: İmleç, sembolün tüm alanını kaplar ve önceden ayarlandığı konumda yaklaşık 1 Hz frekansta yanıp söner.
noBlink ();
Yanıp sönen imleci kapatın.
Not: İmleç görünmez hale gelir ancak konumu kalır.
imleç ();
İmleç alt çizgisini etkinleştirin.
Not: İmleç bir alt çizgi karakteri haline gelir ve daha önce yerleştirildiği konumdadır.
noCursor ();
İmleç alt çizgisini kapatın.
Not: İmleç görünmez hale gelir ancak konumu kalır.
lcd.setCursor (0, 1); // İmleci ikinci satırın ilk karakterine konumlandırın (satır ve sütun numaralandırması 0'dan başlar) lcd.home (); // İmleci ilk satırın ilk karakterine konumlandırın (lcd.setCursor (0,0) çağırırken olduğu gibi;) lcd.blink (); // İmleci görünür yapın (imleç konumunda bir dikdörtgen yanıp söner) lcd.noBlink (); // İmleci görünmez yapın (yanıp sönen dikdörtgeni kaldırın) lcd.cursor (); // İmleci görünür yapın (imleç konumunda bir alt çizgi görünecektir) lcd.noCursor (); // İmleci görünmez yapın (alt çizgiyi kaldırın) // İmleç bir karakterin olduğu yere çarparsa, bu durumda bu karakter kaybolmaz

Yönü ve hizalamayı gösteren işlevler:

soldan sağa ();
Her yeni karakterden sonra imleç konumunun bir sütun sağa kaydırılması gerektiğini belirtir.
Not: "abc" metnini yazarsanız, ekran "abc" gösterecek ve metin, orijinal imleç konumunun sağında olacaktır.
(Normalde)
sağdan sola ();
Her yeni karakterden sonra, imlecin konumunun bir sütun sola kaydırılması gerektiğini belirtir.
Not: "abc" metnini yazdırırsanız, ekran "cba" gösterecek ve metin orijinal imleç konumunun solunda olacaktır.
(Sağdan sola yazarak)
noAutoscroll ();
Gelecekte metnin orijinal imleç konumundan sola hizalanması gerektiğini belirtir.
Not: İmleci 10.0 konumuna getirirseniz ve metni görüntülerseniz, görüntülenen metnin ilk karakteri bu konumda olacaktır.
(Normalde)
otomatik kaydırma ();
Gelecekte metnin orijinal imleç konumundan sağa hizalanması gerektiğini belirtir.
Not: İmleci 10.0 konumuna getirip metni görüntülerseniz, imleç bu konumda olacaktır.
(ScrollDisplayLeft işlevini, görüntülenen metindeki harf sayısı kadar çağırmışsınız gibi, ekran koordinatları sola kaydırılacaktır)
lcd.leftToRight (); // İmlece sağa hareket etmesini söyle (Avrupa yazısında her zamanki gibi) lcd.clear (); lcd.setCursor (5.0); lcd.print ("ABC"); // Ekranda şunu göreceğiz: "ABC" ("A" dan sonra imleç sağa hareket etti ve "B" yi gösterdi, ardından imleç sağa hareket etti ve "C" olarak görüntülendi) lcd.rightToLeft (); // İmlece sola hareket etmesini söyle (Sağdan sola yazarken olduğu gibi) lcd.clear (); lcd.setCursor (5.0); lcd.print ("ABC"); // Ekranda şunu göreceğiz: "CBA" ("A" dan sonra imleç sola hareket etti ve "B" yi gösterdi, ardından imleç sola hareket etti ve "C" olarak görüntülendi) lcd.noAutoscroll (); // Hizalamayı sola ayarlayın (Her zamanki gibi) lcd.clear (); lcd.setCursor (5.0); lcd.print ("ABC"); // Ekran şunu gösterecektir: "ABC" (Her zamanki gibi) lcd.autoscroll (); // Hizalamayı sağa ayarlayın (Ekran koordinatları, görüntülenen karakter sayısı kadar sola kaydırılır) lcd.clear (); lcd.setCursor (5.0); lcd.print ("ABC"); // Ekranda şunu göreceğiz: "ABC" (Ekranın koordinatları 3 karakter sola kaydırılacaktır, çünkü her karakterden sonra scrollDisplayLeft işlevi çağrılır)

Metin ve simge girme işlevleri:

createChar (num, dizi);
CGRAM ekranına belirtilen numara altında özel bir karakter yazma.
Yüklediğiniz karakterin içinde olması gereken metni (yazdırma işlevini kullanarak) görüntülemek istiyorsanız, eğik çizgiyi ve bu karakterin altına yazıldığı sayıyı belirtin: print ("C \\ 1MBO \\ 2").
Parametre:
  • num: karakterin yazılacağı sayı.
  • dizi: yazılacak karakteri temsil eden bir dizi.
Not: Dizi, sayısı bir karakterdeki satır sayısına eşit olan birkaç bayttan oluşur. Bir bayt setinin her biti, bir dizi (görüntülenen) karakter pikseline karşılık gelir.
baskı (metin);
Görüntü ekranında metin, karakter veya sayıları görüntüler.
Parametre:
  • metin: görüntülenecek bir karakter, sayı veya dize.
Not: Sözdizimi, Serial sınıfındaki aynı adın işlevine benzer.
#Dahil etmek // I2C veriyolu ile çalışmak için kitaplığı bağlarız #include // I2C veri yolu LiquidCrystal_I2C lcd (0x27,16,2) aracılığıyla LCD ekranla çalışmak için kitaplığı bağlarız; // Görüntüleme parametrelerini belirterek kütüphane nesnesini bildirin (I2C adresi \u003d 0x27, sütun sayısı \u003d 16, satır sayısı \u003d 2) // uint8_t symbol_d \u003d (0b00000, // "d" sembolünün 1 satırı 0b00000, // Sembolün 2 satırı "d "0b00110, // 3 karakter satırı" d "0b01010, // 4 satır karakter" d "0b01010, // 5 satır karakter" d "0b01010, // 6 karakter satırı" d "0b11111, // 7 karakter satırı" d "0b10001); // "d" sembolünün 8 dizisi Tüm dizi tek satırda yazılabilir: uint8_t symbol_d \u003d (0,0,6,10,10,10,31,17); // uint8_t symbol_i \u003d (0b00000, // sembolün 1 satırı "ve" 0b00000, // sembolün 2 satırı "ve" 0b10001, // sembolün 3 satırı "ve" 0b10011, // sembolün 4 satırı "ve" 0b10101, // 5 karakter dizisi "ve" 0b11001, // 6 karakter dizisi "ve" 0b10001, // 7 karakter dizisi "ve" 0b00000); // 8 sembol dizisi "ve" Dizinin tamamı tek satırda yazılabilir: uint8_t symbol_i \u003d (0,0,17,19,21,25,17,0); void setup () (// lcd.init (); // LCD ekranla çalışmaya başlayın lcd.backlight (); // LCD arka ışığını açın lcd.createChar (1, symbol_d); // İlk karakter olan lcd'yi ekran belleğine yükleyin .createChar (2, symbol_i); // İkinci sembolü ekran belleğine yükleyin lcd.clear (); // Ekranı temizleyin lcd.setCursor (0,0); // İmleci en üst köşeye ayarlayın lcd.print ("Pa \\ // void loop () (// lcd.setCursor (0,1); lcd.print (""); // tüm alt satırı sil lcd.setCursor (0,1); lcd.print ("i"); lcd.print ("arduino"); lcd.print (". ru"); // alt satır gecikmesinde "i" "arduino" ".ru" metnini görüntüleyin (2000); // 2 saniye bekleyin lcd.setCursor ( 0,1); lcd.print (""); // alt satırın tamamını sil lcd.setCursor (0,1); lcd.print (12.345); // 12.34 sayısını yazdır (2 ondalık hane görüntülenir) gecikme (2000 ); // 2 saniye bekleyin lcd.setCursor (0,1); lcd.pri nt (""); // alt satırın tamamını sil lcd.setCursor (0,1); lcd.print (12, HEX); // 12 sayısını onaltılık sayı gecikmesi olarak göster (2000); // 2 saniye bekleyin lcd.setCursor (0,1); lcd.print (""); // alt satırın tamamını sil lcd.setCursor (0,1); lcd.print (1); // 1 numaralı gecikmeyi göster (2000); // 2 saniye bekleyin)