воскресенье, 13 декабря 2015 г.

Сказ о том, как русские символы добавлял в arduino library Liquid Crystal i2c

Началось всё с того, что появилась необходимость добавить поддержку некоторых кириллических символов в библиотеке.
Имелся экран с i2c модулем и ардуинка.

Скачать библиотеку для ардуино можно по ССЫЛКЕ

Для создания кастомных символов используется массив вида : 
uint8_t n[8]  = {0x0, 0x0, 0x11, 0x11, 0xff, 0x11, 0x11, 0x0};
Элементы массива начиная с 0го связаны с номером строки. 0ой элемент - первая строка, первый - вторая и т.д.
На рисунке мы видим наглядное изображение этого массива (это буква н :). Откуда же брать HEX(шестнадцатеричные0 значения? Всё просто. 
Открываем например Каукулятор виндоус и выбираем на нём режим программера (мыж программисты).
Далее, выбрав BIN, забиваем последовательность пикселей в строке с лева направо. 1 - горит, 0 - не горит. 
Например - для 5ой строки 11111. Для 4ой - 10001. Понятно да?
В разделе HEX увидим нужную нам циферку. Остаётся поставить её в массив в виде 0x1F (0xFF даёт аналогичный результат)
Вот пример моего примитивного, но работающего кода:

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
 
uint8_t n[8]  = {0x0, 0x0, 0x11, 0x11, 0xff, 0x11, 0x11}; //н
uint8_t mya[8]  = {0x0, 0x0, 0x10, 0x10, 0x1e, 0x11, 0x1e}; // ь
uint8_t j[8] = {0x0, 0x0, 0x15, 0x15, 0xe, 0x15, 0x15}; //ж
uint8_t Te[8] = {0x0, 0x1F, 0x4, 0x4, 0x4, 0x4, 0x4,0x0}; //т
uint8_t m[8]  = {0x0, 0x0, 0x11, 0x1B, 0x15, 0x11, 0x11};  //м
uint8_t p[8] = {0x0, 0x0 ,0xFF, 0x11, 0x11, 0x11, 0x11};//п
uint8_t u[8] = {0x0, 0x0, 0x11, 0x11, 0xf, 0x1, 0xe}; //у
uint8_t l[8] = {0x0, 0x0, 0x7, 0x9, 0x11, 0x11, 0x11}; // л
 
 
LiquidCrystal_I2C lcd(0x27, 16, 2);
 
void setup()
{
lcd.begin();
lcd.backlight();
lcd.createChar(0, n);
lcd.createChar(1, mya);
lcd.createChar(2, j);
lcd.createChar(3, Te);
lcd.createChar(4, m);
lcd.createChar(5, p);
lcd.createChar(6, u);
lcd.createChar(7, l);
lcd.home();
 
//температура 
lcd.write(3);
lcd.print("e");
lcd.write(4);
lcd.write(5);
lcd.print("e");
lcd.print("p");
lcd.print("a");
lcd.print("m");
lcd.write(6);
lcd.print("p");
lcd.print("a");
lcd.setCursor(0, 1);
lcd.print("B");
lcd.write(7);
lcd.print("a");
lcd.write(2);
lcd.write(0);
lcd.print("o");
lcd.print("c");
lcd.print("m");
lcd.write(1);
}
 

void loop()
{
//ничего не делаем
}
 
 
 



Комментариев нет:

Отправить комментарий