Bagaimana cara menangani karakter unicode dengan tampilan LCD karakter?

8

Saya ingin membeli layar LCD dari Arduino untuk menampilkan beberapa hasil dari panggilan http web; API Web mengembalikan teks JSON yang disandikan dalam UTF-8.

Saya telah membaca bahwa ICU adalah cara untuk menangani Unicode dalam program C / C ++ untuk Arduino.

Pertanyaan saya:
Apakah saya dapat menampilkan karakter UTF-8 ke layar seperti ini ?
Apakah ada layar LCD karakter (terjangkau) yang dapat menampilkan karakter UTF-8?

systempuntoout
sumber
3
Apakah kita bicara tentang tampilan grafis atau tampilan karakter tersegmentasi? Pada tampilan tersegmentasi, Anda tidak dapat dengan jelas menampilkan anytign yang tidak sesuai dengan pola segmen. Untuk penggunaan non-ascii "barat", Anda mungkin dapat kembali ke karakter dasar (tidak beraksen, dll.). Untuk skrip lain, kemungkinan besar Anda kurang beruntung.
drxzcl

Jawaban:

6

Saya tidak begitu akrab dengan Arduino, tapi mari kita melihatnya dari perspektif LCD.

Hampir semua LCD karakter populer menggunakan pengontrol HD44780 hari ini (itulah yang didukung oleh perpustakaan LiquidCrystal ). Pengontrol ini tidak mendukung UTF-8 secara langsung, setiap karakter diwakili oleh satu byte.

Dengan demikian Anda perlu mengkonversi karakter UTF-8 ke 8-bit secara manual. Pengontrol memiliki generator karakter bawaan dengan 208 5x8 dan 32 5x10 karakter, ditambah hingga 8 karakter yang ditentukan pengguna (lihat createChar ). Anda perlu memetakan setiap karakter input ke salah satu karakter yang telah ditentukan / kustom - jelas Anda hanya dapat menampilkan subset karakter UTF8, Anda harus memutuskan karakter mana yang Anda inginkan / dapat tampilkan.

Konversi itu sendiri harus sangat mudah - Anda hanya perlu beralih di atas string UTF8, memetakan setiap karakter ke satu byte. Kemungkinan besar Anda ingin menggunakan tabel pencarian agar tetap sederhana. Beritahu saya jika ini perlu penjelasan lebih lanjut.

Pelukis Kode
sumber
Terima kasih; Menurut Anda apakah jenis tampilan grafis Tft ini dapat menawarkan dukungan unicode yang lebih baik?
systempuntoout
1
Ini adalah tampilan grafis, sejauh yang saya bisa lihat, sehingga dapat menampilkan hampir semua yang Anda inginkan. Perpustakaan yang disediakan menyediakan fungsi untuk melukis teks juga, tetapi sekali lagi mendukung karakter 8-bit saja. Jadi, dengan tampilan ini Anda perlu jenis konversi yang sama seperti yang dijelaskan di atas dan menggunakan perpustakaan apa adanya, atau Anda harus memodifikasi perpustakaan untuk mendukung UTF8. Perlu diingat, bahwa menggunakan tampilan grafik akan membuat kode Anda lebih besar - Anda memerlukan pustaka ekstra, font, dll. Tetapi setidaknya Anda memiliki kontrol penuh dari set karakter yang tersedia - font adalah bagian dari perangkat lunak.
Pelukis Kode
4

Unicode itu rumit dan besar, secara keseluruhan itu terlalu besar untuk Arduino. Dalam versi saat ini ada total lebih dari 100.000 karakter, termasuk huruf paku, hieroglif, Klingon, dan belum lagi ribuan karakter Cina.

Jadi, jika Anda benar-benar ingin menunjukkan beberapa karakter Unicode pada Arduino:

  • Dapatkan tampilan grafik. Yang Anda sebutkan adalah tampilan karakter, itu hanya dapat menampilkan sebagian besar set tetap 256 karakter.

  • Tetapkan sebagian kecil karakter yang ingin Anda tangani. Ada beberapa himpunan bagian yang telah ditetapkan, misalnya Himpunan Bahasa Eropa Multibahasa terlihat bagus.

  • Dapatkan beberapa font dan strip ke set yang Anda butuhkan. Perhatikan bahwa menampilkan bahkan bisa jauh lebih rumit daripada yang biasa Anda lakukan dari ASCII, karena menggabungkan karakter, penulisan dua arah dan semacamnya. Best mungkin untuk tetap berpegang pada karakter latin tanpa menggabungkan aksen. Cyrillic dan yunani juga harus ok, seperti halnya apa pun yang merupakan urutan karakter kiri-ke-kanan yang sederhana.

  • Mungkin Anda bisa menggunakan memori eksternal untuk menyimpan font.

Lalu ada banyak topik lain yang mungkin tidak Anda butuhkan, misalnya menyortir dan mencari, lihat standar Unicode dan lampirannya (ini besar!).

Lupakan ICU, ini membutuhkan megabita memori.

starblue
sumber
Saya harus mencoba menempatkan (subset!) ICU di Arduino .. harus menyenangkan.
Steven R. Loomis