Garis lari. Arduino. Max7219 dan sepasang kabel. Pelajaran Arduino: membuat ticker menggunakan mikrokontroler Ticker pada layar 1602
Garis merayap di LCD pada HD44780.
Pencarian “solusi siap pakai” untuk ticker di C tidak membuahkan hasil apa pun. Jadi saya harus melakukannya sendiri.
“Potongan” kode ini memungkinkan Anda untuk menampilkan garis lari (dari kanan ke kiri), di mana saja dan menggunakan sejumlah familiar, dalam indikator LCD dengan pengontrol HD44780 atau serupa.
Hal pertama yang perlu Anda tunjukkan adalah bahwa bahasa C tidak mengizinkan Anda bekerja dengan string "secara langsung". Artinya, tidak mungkin menyalin karakter dari satu string ke string lainnya menggunakan operator penugasan ( = )... untuk ini, Anda perlu menggunakan fungsi khusus strncpy(). Secara umum, beberapa fungsi digunakan untuk bekerja dengan string di C. Di Self-Tormentors, bab terpisah dikhususkan untuk penggunaan fungsi-fungsi ini. Di Bantuan"e di CV_AVR, deskripsi fungsi untuk bekerja dengan string ada di bagian "Fungsi String". Prototipe fungsi-fungsi ini ada di file string.h.
"...string sumber..." - serangkaian karakter yang harus ditampilkan di baris "berjalan";
"...karakter yang ditampilkan..." - "garis merayap" yang sebenarnya.
Untuk mengatur garis merayap, algoritma berikut dipilih:
1. Karakter yang ditampilkan bergeser dari kanan ke kiri. Yang paling kiri adalah “hilang” dalam kasus ini.
2. Setelah pergeseran, karakter berikutnya dari string sumber disalin ke karakter paling kanan.
3. Ketika akhir baris sumber tercapai, karakter pertama baris sumber menjadi karakter berikutnya.
Untuk menggeser karakter - untuk sel yang digeser, kode karakter dibaca dari layar RAM (DDRAM) HD44780 dan ditulis ke sel RAM sebelah kiri.
Menurut DataSheet pada HD44780, karakter kiri baris atas memiliki alamat DDRAM 0x00, dan karakter kiri baris bawah memiliki alamat 0x40. Harus diingat bahwa untuk mengakses RAM layar (dan bukan RAM penghasil karakter), bit RS harus sama dengan 1 (RS adalah bit paling signifikan dalam byte alamat, lihat DataSheet).
Hasilnya, kami mendapatkan bahwa untuk "mengalamatkan" karakter kiri kedua dari baris atas, Anda perlu "bekerja" dengan alamat tersebut 0x01 | 0x80 = 0x81.
Fungsi untuk menulis dan membaca "konten internal" HD44780 ada di perpustakaan (prototipe di LCD.h.... oleh karena itu.. program itu sendiri:
/* untuk CV_AVR Dalam contoh ini, garis merayap ditampilkan dalam bit 8 (0xC7) hingga 16 dari garis terbawah indikator 16-bit. . ...... #termasuk karakter yang tidak ditandatangani n_sim=1,m_end=43; //43 - panjang garis pada contoh mohon_stroka())( // menggeser garis merayap jika(mohon_str)( // menulis karakter selanjutnya ke posisi paling kanan lcd_gotoksi(15,1); |
Glosarium: n_sim - penunjuk ke posisi karakter saat ini dalam string sumber; m_end - jumlah total karakter dalam string sumber; mohon_str- sedikit "aktifkan" shift. Dengan bantuannya Anda dapat mengatur kecepatan lari; ish_str - string sumber. |
Kemungkinan besar, masing-masing kompiler C yang ada memiliki fungsi perpustakaan untuk bekerja dengan HD44780. Oleh karena itu, “membuat ulang” program untuk kompiler “Anda” tidak akan sulit.
Saya "menyiapkan" string sumber menggunakan utilitas terkenal "HD44780.exe". Saat menggunakannya, panjang garis ditunjukkan di komentar: "/* Panjang maksimum garis: 43 byte */"
Setiap tahun, panel dipasang pada rambu toko, jalan, dan lorong yang menampilkan pesan iklan dalam bentuk teks. Lampu pada panel menyala dengan cara berbeda: garis bergerak ke atas, bawah, ke kanan dan kiri. Gambar bercahaya juga relevan.
Orang yang lewat tidak akan mengabaikan aksesori tersebut. Banyak insinyur elektronik pemula yang tertarik dengan cara kerja desain ini dan apa yang diperlukan untuk membuatnya. Produk ini dapat dengan mudah dibuat di rumah. Artikel ini akan memperkenalkan prinsip-prinsip pengoperasian ticker kepada pecinta perangkat elektronik pemula, di mana Arduino digunakan sebagai komponen utamanya.
Ticker pada Arduino merupakan produk elektronik berbasis mikrokontroler Arduino. Area kerja perangkat ditutupi dengan LED. Tujuan utamanya adalah untuk menyiarkan gambar dan pesan teks. Data bisa statis atau animasi.
String ringan dibuat menggunakan modul. Ukuran defaultnya adalah 32x16 cm. Luas permukaan kerja secara langsung bergantung pada jumlah modul dan ukurannya.
Selain itu, pengontrol dimasukkan ke dalam saluran, yang berperan untuk mengontrol gambar. Perangkat beroperasi secara offline. Untuk mengubah pesan teks atau gambar, ticker terhubung ke komputer. Profil aluminium menahan seluruh struktur.
Berdasarkan skema warnanya, ada 2 jenis ticker di Arduino:
- Monokrom atau warna tunggal.
- Berbagai corak - biasanya 8 warna, latar belakang hitam juga disertakan.
Kebanyakan orang lebih menyukai warna merah karena warnanya paling jenuh. Warna putih juga tak kalah populernya. Jika lampu putih bersinar terang dengan latar belakang hitam, teks terlihat lebih rapi.
Pengguna menempatkan semua data dalam memori mikrokontroler. Ada beberapa metode untuk memperbarui gambar atau garis:
- Dasar - melalui kabel USB. Mikroprosesor Arduino dihubungkan melalui port USB ke perangkat komputer. Dari komputer, pengembang mentransfer kode programnya ke memori mikroprosesor.
- Melalui jaringan melalui kabel Lan. Metode ini disediakan untuk pengguna yang terus-menerus memperbarui string elektronik. Teknik penyambungannya mirip dengan poin sebelumnya.
Berdasarkan jenisnya, ada papan lari yang dibuat untuk penggunaan di dalam dan luar ruangan. Yang di luar ruangan sering kali dilindungi dengan kanopi khusus untuk mencegah air hujan masuk ke LED.
Seperangkat alat dan bahan yang diperlukan
Di bawah ini adalah tabel yang merinci alat yang Anda perlukan untuk membuat lampu berjalan di Arduino.
Alat | Keunikan |
Nano merupakan model yang ukurannya paling kecil di antara jajaran Arduino. Berdasarkan sifatnya, platform ini mirip dengan kerabatnya - . Insinyur elektronik pemula umumnya membuat model perangkat mereka yang ringkas, sehingga Nano yang ringkas berguna untuk ini. Soket untuk daya eksternal tersembunyi di dalam. Pekerjaan dilakukan melalui port USB. Ciri-ciri lainnya mirip dengan model Uno. Parameter Teknis:
Ada 2 cara untuk memberdayakan platform:
|
|
pita LED | Strip LED dihubungkan secara paralel, di beberapa bagian. Panjang setiap segmen tidak boleh lebih dari 5 m. Selain itu, di toko-toko dijual dengan standar ini. Jika Anda perlu membuat garis yang membutuhkan 10 atau bahkan 15 meter, Anda harus mengotak-atiknya. Dalam situasi apa pun, bagian pertama tidak boleh dihubungkan ke awal bagian kedua. Dipercaya bahwa 5 meter adalah panjang yang menunjukkan perhitungan di mana jalur pita itu ditahan. Jika Anda memberi beban pada selotip, selotip itu akan pecah dan produk jadinya akan rusak. Dan dari sisi yang terawat, teks track akan terlihat jelek karena cahayanya tidak merata: di awal track cahayanya akan terang, tetapi di akhir akan redup. |
Kabel | Kumpulan kabel untuk menghubungkan komponen |
Papan kendali proses | Mikroprosesor dan bagian lain untuk produk jadi (misalnya Troika Shield) ditempatkan pada platform kontrol. |
Gambar dan diagram
Untuk mengontrol strip LED, pertama-tama, Anda perlu menerapkan tegangan ke anoda port bernomor 2 hingga 9. Setelah itu, tegangan disuplai langsung ke katoda. Untuk melakukan ini, Anda memerlukan blok transistor.
Perhatian! Output dari platform ini adalah 5 Volt. Untuk menghubungkan anoda di papan, Anda perlu menggunakan resistor yang beroperasi pada 220 Ohm. Pada saat yang sama, untuk menghubungkan blok transistor ke output, diperlukan 1 resistor KOhm.
Proyek ini mencakup penggunaan transistor bipolar 2N2904. Jika Anda menghubungkan semua transistor ke kontak Anda pada platform matriks, Anda hanya memerlukan 10 transistor. Saat merancang perangkat elektronik, transistor jenis ini adalah yang paling populer dan memenuhi semua kriteria dan ketentuan untuk mengembangkan ticker di Arduino. Tegangan kecil akan disuplai ke sistem yang dibuat.
Mari kita jelaskan bagaimana lampu pada pita itu menyala. 1 kontak dipilih, yang bertanggung jawab untuk memasok sinyal ke anoda LED. Bersamaan dengan tindakan sebelumnya, sinyal disuplai ke basis emitor dari lubang keluaran di penghitung. Oleh karena itu, tegangan dari kolektor transistor langsung menuju ke katoda LED. Pada permukaan matriks, anoda pada baris yang berdekatan terjalin dengan katoda pada kolom yang berdekatan. Oleh karena itu, pengguna dapat mengamati fenomena di mana seluruh ticker menyala secara bersamaan.
Ada pilihan lain:
Diagramnya akan terlihat seperti ini:
Bagian perangkat lunak
Untuk implementasi pertama, kodenya mungkin terlihat seperti ini:
Batalkan pengaturan())( int i; untuk(i = 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
>i)&B00000001);
penundaanMikrodetik(800);<= 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); } }
digitalWrite(jam,TINGGI);
penundaanMikrodetik(5);
- digitalWrite(jam,RENDAH);
- ) ) ) ) )
- Kode program untuk mengimplementasikan proyek “crawling line on Arduino” pada kasus kedua adalah sebagai berikut:
- Ke dalam RGB1 =12; ke dalam RGB2 =11; ke dalam RGB3 =10; ke dalam RGB4 =9; ke dalam RGB5 =8; ke dalam RGB6 =7; ke dalam RGB7 =6; ke dalam RGB8 =5; ke dalam RGB9 =4; ke dalam RGB10 =3; int kunci1 =A3; int kunci2 =A2; int kunci3 =A1; int kunci4 =A0; batal setup() ( Serial.begin(9600); pinMode(RGB1, OUTPUT); pinMode(RGB2, OUTPUT); pinMode(RGB3, OUTPUT); pinMode(RGB4, OUTPUT); pinMode(RGB5, OUTPUT); pinMode(RGB6 , KELUARAN); pinMode(RGB8, OUTPUT); pinMode(RGB10, KELUARAN); pinMode(kunci2, INPUT_PULLUP); INPUT_PULLUP); pinMode(kunci4, INPUT_PULLUP); = analogRead(key2); int key3Value = analogRead(key3); int key4Value = analogRead(key4);
Petunjuk langkah demi langkah untuk membuat perangkat
Algoritma untuk membuat ticker Arduino:
Kami memuat kode program yang dijelaskan di atas ke dalam mikroprosesor menggunakan kabel USB dan komputer.
Kami juga menempatkan strip LED pada platform kontrol.
Kami menghubungkan semua bagian menjadi satu.
Nyalakan daya. | Di video terakhir Anda dapat memahami cara kerja skema versi kedua: |
---|---|
Kontrol ponsel cerdas |
#termasuk [ , 8 , 9 , 10 , 11 ]); Lampu LED dapat dikontrol dari smartphone. Untuk mengimplementasikan rencana ini, Anda memerlukan Bluetooth dan modul khusus - HC-06, yang dirancang untuk Arduino. Tapi kita akan melakukan ini di pelajaran berikutnya. Proyek bagus untuk semua orang. Untuk bekerja dengan tampilan grafik karakter, kami menyarankan menggunakan perpustakaan LiquidCrystal, yang disertakan dalam set Arduino IDE standar dan dirancang untuk bekerja melalui antarmuka paralel 8-bit (4-bit). Jika layar Anda terhubung ke Arduino melalui bus I2, maka Anda perlu menginstal perpustakaan LiquidCrystal_I2C (sebagian besar fungsinya mengulangi fungsi perpustakaan pertama).} Tampilan yang didukung:
|
batalkan pengaturan())( |
#termasuk #termasuk lcd.mulai(16 , 2);// Penjelasan: batalkan pengaturan())(, 16 , 2); Lampu LED dapat dikontrol dari smartphone. Untuk mengimplementasikan rencana ini, Anda memerlukan Bluetooth dan modul khusus - HC-06, yang dirancang untuk Arduino. Tapi kita akan melakukan ini di pelajaran berikutnya. Proyek bagus untuk semua orang. OBJEK.mulai(NUM_COLUMN, NUMBER_ROWS); ) } Tampilan yang didukung: |
OBYEK Kristal Cair(RS, E, D0, D1, D2, D3, D4, D5, D6, D7); dengan antarmuka I2C (hijau) |
#termasuk #termasuk lcd.mulai(16 , 2);// Penjelasan: batalkan pengaturan())(, 16 , 2); Lampu LED dapat dikontrol dari smartphone. Untuk mengimplementasikan rencana ini, Anda memerlukan Bluetooth dan modul khusus - HC-06, yang dirancang untuk Arduino. Tapi kita akan melakukan ini di pelajaran berikutnya. Proyek bagus untuk semua orang. OBJEK.mulai(NUM_COLUMN, NUMBER_ROWS); ) } Tampilan yang didukung: |
LCD2004 - tampilan karakter (20x04 karakter), dengan antarmuka paralel (biru) |
#termasuk LCD Kristal Cair(2 , 3 , 4 , 5 , 6 , 7[ , 8 , 9 , 10 , 11 ]); Lampu LED dapat dikontrol dari smartphone. Untuk mengimplementasikan rencana ini, Anda memerlukan Bluetooth dan modul khusus - HC-06, yang dirancang untuk Arduino. Tapi kita akan melakukan ini di pelajaran berikutnya. Proyek bagus untuk semua orang. lcd.mulai(20, 4);} Tampilan yang didukung: // Jika 8 kabel bus data digunakan, tunjukkan semuanya |
LCD2004 I2C - tampilan karakter (20x04 karakter), batalkan pengaturan())( |
#termasuk #termasuk lcd.mulai(16 , 2);// Penjelasan: batalkan pengaturan())(, 20 , 4); Lampu LED dapat dikontrol dari smartphone. Untuk mengimplementasikan rencana ini, Anda memerlukan Bluetooth dan modul khusus - HC-06, yang dirancang untuk Arduino. Tapi kita akan melakukan ini di pelajaran berikutnya. Proyek bagus untuk semua orang. OBJEK.mulai(NUM_COLUMN, NUMBER_ROWS); ) } Tampilan yang didukung: |
#1 Contoh
Kami menampilkan tulisan pada layar LCD1602 yang terhubung melalui bus I2C. Untuk bekerja dengan layar LCD2004, Anda perlu mengubah baris 3 menjadi LiquidCrystal_I2C lcd(0x27,20,4);
#termasuk
#2 Contoh
Kami menampilkan tulisan pada layar LCD1602 yang terhubung melalui bus paralel 4-bit. Untuk bekerja dengan tampilan LCD2004, Anda perlu mengubah baris 5 menjadi lcd.begin(20, 4);
#termasuk
#3 Contoh
Kami menampilkan tulisan "Bahasa Rusia" pada layar LCD1602 yang terhubung melalui bus I2C:
#termasuk
#4 Contoh
Kami menampilkan waktu yang berlalu setelah permulaan pada layar LCD1602 yang terhubung melalui bus I2C:
#termasuk
// Jika tulisan tidak muncul, ganti alamat 0x27 dengan 0x3F void setup())( // lcd.init(); // Mulai bekerja dengan layar LCD lcd.backlight(); // Nyalakan lampu latar layar Layar LCD ) // // void loop())( // // Dapatkan waktu yang telah berlalu sejak awal: // tim = millis() / 1000; // Dapatkan jumlah total detik (maksimum 4"294"967 detik ≈ 49,7 hari). tim_S = tim % 60 ; // Dapatkan detik: sisa membagi semua detik dengan menit (60 detik). tim = (tim-tim_S) / 60; tim % 60; menit per jam (60 menit) tim = (tim-tim_M) / 60; // Dapatkan jumlah total jam hari // Menampilkan waktu yang telah berlalu sejak awal: // if (millis()%1000)
- Fungsi umum pada perpustakaan LiquidCrystal dan LiquidCrystal_I2C: mulai( ); kolom, baris,
- – Menginisialisasi tampilan dengan jumlah kolom, baris, dan ukuran karakter. jernih();
- – Menghapus tampilan dengan kursor pada posisi 0,0 (Membutuhkan banyak waktu!). rumah();
- – Mengatur kursor ke posisi 0,0 (Membutuhkan banyak waktu!). menampilkan();
- – Menghidupkan tampilan dengan cepat (tanpa mengubah data di RAM). tidak ada Tampilan();
- – Mematikan tampilan dengan cepat (tanpa mengubah data di RAM). berkedip();
- – Menghidupkan kursor yang berkedip (dengan frekuensi sekitar 1 Hz). tidak adaBlink();
- – Matikan kursor yang berkedip. kursor();
- – Aktifkan garis bawah kursor. tidak ada Kursor();
- – Nonaktifkan garis bawah kursor. gulirDisplayLeft();
- – Menggulir tampilan ke kiri. Pergeseran tampilan koordinat satu kolom ke kiri (tanpa mengubah RAM). gulirDisplayRight();
- – Menggulir tampilan ke kanan. Pergeseran tampilan koordinat satu kolom ke kanan (tanpa mengubah RAM). kiriKeKanan();
- – Menentukan untuk selanjutnya menggeser posisi kursor, setelah menampilkan karakter berikutnya, satu kolom ke kanan. kananKeKiri();
- – Menentukan untuk selanjutnya menggeser posisi kursor, setelah menampilkan karakter berikutnya, satu kolom ke kiri.– Menentukan bahwa teks akan disejajarkan ke kiri posisi kursor di masa mendatang (seperti biasa).
- gulir otomatis();– Menunjukkan bahwa teks akan disejajarkan ke kanan dari posisi kursor di masa mendatang.
- buatChar( nomor, susunan ); – Tulis karakter khusus ke tampilan CGRAM di bawah nomor yang ditentukan.
- set Kursor( kolom, baris ); – Tempatkan kursor pada posisi yang ditunjukkan oleh kolom dan nomor baris.
- mencetak( teks ); – Menampilkan teks, simbol, atau angka pada tampilan layar. Sintaksnya mirip dengan fungsi kelas Serial dengan nama yang sama.
Fungsi yang hanya diterapkan di perpustakaan LiquidCrystal_I2C:
- init();– Menampilkan inisialisasi. Harus menjadi perintah perpustakaan LiquidCrystal_I2C pertama setelah pembuatan objek. Sebenarnya fungsi ini juga ada di perpustakaan LiquidCrystal, namun di perpustakaan itu dipanggil secara otomatis (secara default) ketika sebuah objek dibuat.
- lampu latar();– Nyalakan lampu latar tampilan.
- tidak adaLampu Latar();– Mematikan lampu latar tampilan.
- setLampu Latar( bendera ); – Kontrol lampu latar (benar - nyalakan / salah - matikan), digunakan sebagai pengganti fungsi tanpa lampu latar dan lampu latar.
Koneksi:
// Untuk bus I2C: |
Parameter:
|
// Untuk bus paralel 4 kabel: #termasuk Kristal Cair LCD( R.S. , E , D4 , D5 , D6 , D7 ); Menampilkan lcd.mulai( kol , baris ); } |
Parameter:
|
// Untuk bus paralel 8 kabel: #termasuk Kristal Cair LCD( R.S. , E , D0 , D1 , D2 , D3 , D4 , D5 , D6 , D7 ); Menampilkan lcd.mulai( kol , baris ); } |
|
Fungsi umum pada perpustakaan LiquidCrystal dan LiquidCrystal_I2C: kol ,
baris ,
);
Menginisialisasi tampilan dengan dimensi dan karakter layar. |
Parameter:
|
Fungsi kontrol tampilan:
– Mengatur kursor ke posisi 0,0 (Membutuhkan banyak waktu!). Menghidupkan tampilan setelah dimatikan oleh fungsi noDisplay. |
Catatan: Fungsi ini berjalan cepat dan tidak mengubah tampilan RAM. |
– Menghidupkan tampilan dengan cepat (tanpa mengubah data di RAM). Mematikan layar. Data pada tampilan tidak akan ditampilkan sampai fungsi tampilan dipanggil, tetapi tidak akan dihapus dari memori RAM, dan setelah fungsi tampilan dipanggil, data tersebut akan ditampilkan kembali. |
Catatan: Fungsi ini berjalan cepat dan tidak mengubah tampilan RAM. |
– Nonaktifkan garis bawah kursor. Menggeser koordinat tampilan satu kolom ke kiri. |
|
– Menggulir tampilan ke kiri. Pergeseran tampilan koordinat satu kolom ke kiri (tanpa mengubah RAM). Menggeser tampilan koordinat satu kolom ke kanan. Memanggil fungsi ini secara terus-menerus akan menciptakan efek garis merayap. Koordinatnya digeser baik untuk informasi yang tersedia di layar maupun untuk informasi yang akan ditampilkan nanti. |
Catatan: Fungsi ini berfungsi tanpa mengubah tampilan RAM. Jika Anda memanggil fungsi tersebut 40 kali berturut-turut, koordinatnya akan kembali ke titik semula |
– Menginisialisasi tampilan dengan jumlah kolom, baris, dan ukuran karakter. Menghapus tampilan dengan mengatur kursor ke posisi 0,0. Informasi pada tampilan akan dihapus secara permanen. |
Catatan: Membutuhkan waktu yang lama. |
lampu latar(); Nyalakan lampu latar tampilan. |
|
tidak adaLampu Latar(); Matikan lampu latar tampilan. |
Catatan: Fungsi ini hanya diterapkan di perpustakaan LiquidCrystal_I2C. |
setLampu Latar( bendera );
Kontrol lampu latar (bukan fungsi noBacklight dan lampu latar). |
Parameter:
|
Fungsi kontrol kursor:
set Kursor( kol ,
baris );
Menempatkan kursor pada posisi yang ditentukan. |
Parameter:
|
– Menghapus tampilan dengan kursor pada posisi 0,0 (Membutuhkan banyak waktu!). Mengatur kursor ke posisi 0,0. Bekerja seperti fungsi setCursor(0,0); |
Catatan: Membutuhkan waktu yang lama. |
– Mematikan tampilan dengan cepat (tanpa mengubah data di RAM). Aktifkan kursor berkedip. |
Catatan: Kursor menempati seluruh bidang karakter dan berkedip dengan frekuensi sekitar 1 Hz, pada posisi yang telah ditetapkan sebelumnya. |
– Menghidupkan kursor yang berkedip (dengan frekuensi sekitar 1 Hz). Matikan kursor yang berkedip. |
Catatan: Kursor menjadi tidak terlihat, namun posisinya tetap dipertahankan. |
– Matikan kursor yang berkedip. Aktifkan garis bawah kursor. |
Catatan: Kursor berbentuk karakter garis bawah dan terletak pada posisi penempatannya sebelumnya. |
– Aktifkan garis bawah kursor. Matikan garis bawah kursor. |
Catatan: Kursor menjadi tidak terlihat, namun posisinya tetap dipertahankan. |
Fungsi yang menunjukkan arah dan kesejajaran:
– Menggulir tampilan ke kanan. Pergeseran tampilan koordinat satu kolom ke kanan (tanpa mengubah RAM). Menentukan bahwa setelah setiap karakter baru, posisi kursor harus berpindah satu kolom ke kanan. |
Catatan: Jika menampilkan teks “abc” maka tampilan akan menampilkan “abc” dan teks berada di sebelah kanan posisi kursor semula. (Seperti biasanya) |
– Menentukan untuk selanjutnya menggeser posisi kursor, setelah menampilkan karakter berikutnya, satu kolom ke kanan. Menentukan bahwa setelah setiap karakter baru, posisi kursor harus berpindah satu kolom ke kiri. |
Catatan: Jika menampilkan teks “abc” maka tampilan akan menampilkan “cba” dan teks berada di sebelah kiri posisi kursor semula. (Menulis dari kanan ke kiri) |
– Menentukan untuk selanjutnya menggeser posisi kursor, setelah menampilkan karakter berikutnya, satu kolom ke kiri. Menunjukkan bahwa di masa mendatang, teks harus disejajarkan di sebelah kiri posisi kursor aslinya. |
Catatan: jika Anda menempatkan kursor pada posisi 10.0 dan menampilkan teks, maka karakter pertama dari teks yang ditampilkan akan berada pada posisi ini. (Seperti biasanya) |
gulir otomatis(); Menunjukkan bahwa di masa depan, teks harus disejajarkan di sebelah kanan posisi kursor aslinya. |
Catatan: jika Anda menempatkan kursor pada posisi 10.0 dan menampilkan teks, kursor akan ditempatkan pada posisi ini. (Koordinat tampilan akan digeser ke kiri, seolah-olah Anda memanggil fungsi scrollDisplayLeft sebanyak huruf pada teks keluaran) |
Fungsi input teks dan simbol:
createChar(angka,array); Menulis karakter khusus ke CGRAM tampilan dengan nomor yang ditentukan. Jika Anda ingin menampilkan teks (menggunakan fungsi cetak) yang berisi karakter yang Anda tetapkan, tentukan garis miring dan nomor di mana karakter ini ditulis: print("C\1MBO\2"). |
Parameter:
|
mencetak(teks); Menampilkan teks, simbol, atau angka pada tampilan layar. |
Parameter:
|
Setiap orang telah lama terbiasa dengan kenyataan bahwa setiap perangkat elektronik memiliki layar, yang dengannya ia memberikan segala macam informasi berguna kepada seseorang. Pemutar MP3 menunjukkan nama trek yang sedang diputar, remote control quadcopter menampilkan telemetri penerbangan, bahkan mesin cuci menampilkan waktu hingga pencucian selesai, dan smartphone biasanya menampung seluruh desktop komputer pribadi! Kemungkinan besar, perangkat Anda berikutnya juga dapat menggunakan layar kecil :) Mari kita coba membuat jam elektronik sederhana! Dan sebagai papan skor kami menggunakan layar kristal cair karakter 1602 yang umum dan murah. Ini dia, seperti pada gambar: Selain 16x2, tampilan karakter 20x4 (masing-masing empat baris 20 karakter), serta tampilan grafis dengan resolusi 128x64 piksel dinilai cukup populer. Ini dia dalam gambarnya:
1. Menghubungkan layar LCD karakter 1602
Layar 1602 memiliki 16 pin. Biasanya diberi nomor dari kiri ke kanan, jika dilihat seperti pada gambar. Terkadang pin ditandatangani, seperti: DB0, DB1, EN, dll. Dan terkadang mereka hanya menunjukkan nomor keluaran. Bagaimanapun, daftar pin selalu sama: 1 - "GND", ground (minus daya); 2 - "Vcc", catu daya +5V; 3 - "VEE", kontras; pemilihan register; 5 - "R/W", arah transfer data (tulis/baca); 15 - anoda lampu latar (+5V); 16 — katoda lampu latar (tanah). Jalur VEE, RS dan empat jalur data DB4, DB5, DB6, DB7 terhubung ke output digital pengontrol. Kita akan menghubungkan jalur “R/W” ke “ground” pengontrol (karena kita hanya memerlukan fungsi penulisan ke memori tampilan). Kami tidak akan menghubungkan lampu latar untuk saat ini, saya rasa Anda dapat dengan mudah mengetahuinya sendiri :) Diagram skema untuk menghubungkan layar ke Arduino UnoPenampilan tata letak
Untuk jaga-jaga, juga berupa tanda:
Layar LCD 1602 | 1 | 2 | 4 | 6 | 11 | 12 | 13 | 14 | 15 | 16 |
Arduino Uno | GND | +5V | 4 | 5 | 6 | 7 | 8 | 9 | +5V | GND |
2. Pemrograman “Halo, dunia!”
Untuk bekerja dengan layar LCD dengan berbagai ukuran dan tipe, editor Arduino IDE memiliki perpustakaan khusus Kristal Cair. Untuk menyertakan perpustakaan, kami menulis ekspresi berikut di baris pertama program kami: #include3. Memprogram jam
Sekarang tampilannya berfungsi dengan baik, mari kita coba mengubah perangkat sederhana kita menjadi jam tangan elektronik sungguhan. Perhatian! Untuk menampilkan waktu, kita memerlukan perpustakaan Waktu. Jika belum diinstal, Anda dapat mengunduh arsipnya dari tautan. Mari kita hubungkan: #include- year() - akan mengembalikan tahun kepada kita;
- bulan() — bulan;
- hari() - hari;
- jam() - jam;
- menit() - mengembalikan menit;
- kedua() - kedua.
QAPASS LCD 1602 tidak mendukung font Rusia, tetapi Anda dapat menampilkan alfabet Cyrillic di Arduino dengan membuat karakter Anda sendiri. Mari kita lihat cara membuat simbol dan huruf apa pun dalam Cyrillic di layar LCD Arduino. Untuk melakukan ini, kita perlu menggunakan variabel dalam sketsa byte dan fungsi lcd.createChar(). Mari kita segera perhatikan bahwa kapasitas memori pada Arduino untuk karakter dibatasi hanya delapan karakter.
Cara menampilkan karakter Anda pada LCD 1602
Tabel pembuat karakter (CGROM) akan membantu Anda menampilkan simbol atau huruf Sirilik di layar. Jenis memori di Arduino seperti CGRAM dapat menyimpan karakter asli, namun ukuran memorinya terbatas dan hanya dapat menampung 8 karakter asli. Salah satu simbol nonstandar yang berguna untuk membuat stasiun cuaca rumah adalah tanda derajat. Mari kita menggambar sebuah simbol.
Untuk memulai, ambil selembar kertas dan gambarlah sebuah meja di atasnya dengan 5 kolom dan 8 baris. Selanjutnya, arsir sel-sel dalam tabel (lihat foto di atas) yang akan muncul di layar. Faktanya adalah setiap karakter pada layar terdiri dari piksel (lebar 5 piksel dan tinggi 8 piksel). Selanjutnya, bayangkan simbol kita sebagai larik data yang terdiri dari delapan elemen - delapan baris.
Kami menampilkan simbol kami sendiri di LCD 1602
Untuk pelajaran ini kita memerlukan rincian berikut:
- Papan Arduino Uno / Arduino Nano / Arduino Mega;
- monitor LCD 1602;
- kabel pria-wanita.
Layar LCD dihubungkan melalui I2C menggunakan empat kabel pria-wanita - 2 kabel data dan 2 kabel daya. Jika Anda menghubungkan layar Ardiuno UNO, gunakan pin sirkuit berikut SDA terhubung ke port A4, keluaran SCL– ke port A5 dan dua kabel daya – GND dan 5V. Jika QAPASS 1602 terhubung melalui bus I2C ke Arduino Mega, maka board memiliki port yang sesuai - SDA dan SCL.
Sketsa untuk membuat simbol pada LCD I2C
#termasuk// mencetak karakter pada baris pertama
- ) putaran kosong () ( )
- Penjelasan untuk kodenya: menggunakan array byte simvol = ( ); kami mengenkripsi tanda derajat yang kami gambar sebelumnya di selembar kertas; fungsi lcd.createChar(angka, data); membuat simbol khusus untuk LCD, dengan tanda kurung ditentukan nomor— simbol nomor dan
- data
— data tentang array.
setiap baris array dimulai dengan 0b - “nol” dan huruf besar “b”.
Menampilkan font Rusia pada LCD 1602
#termasuk// mencetak karakter pada baris pertama
- lcd.setCursor(6,0);
- // atur kursor ke karakter ke-6 pada baris pertama lcd.print(char(2)); lcd.cetak(" ");
- lcd.print(char(1));