Векторная графика и шрифт на Ардуино

Тема в разделе "Глядите, что я сделал", создана пользователем yul-i-an, 27 окт 2018.

  1. yul-i-an

    yul-i-an Гик

    Вывод векторных изображений и шрифта на OLED 0.96'




    [​IMG]
    [​IMG]
    [​IMG]
    [​IMG]
    [​IMG]
    Код попозже выложу.
     
    Последнее редактирование: 28 окт 2018
    ИгорьК, sys и Tomasina нравится это.
  2. Tomasina

    Tomasina Сушитель лампочек Модератор

    Сколько памяти отъедает?
    Или буфера нету?
     
  3. yul-i-an

    yul-i-an Гик

    В первом видео free mem свободная рам. Сам скетч занимает 14к, но в нем еще родные растровые шрифты остались. Под первым видео ссылка на форум где жуем это дело.
     
  4. yul-i-an

    yul-i-an Гик

  5. yul-i-an

    yul-i-an Гик

    Недобиблиотека VF
    Пользоваться так
    Код (C++):
    #include <Adafruit_GFX.h>//библиотеки OLED
    #include <Adafruit_SSD1306.h>//библиотеки OLED
    #define OLED_RESET 4
    Adafruit_SSD1306 display(OLED_RESET);
    #include <VF.h>//векторный шрифт
    void setup() {
      display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
      display.display();
    }

    void loop() {
      setCursorVF(0, 0);//позиция по умолчанию 0,0
      //можно так
      setSizeVF(15);//размер текста в пикселях по у (высота символа)
      printVFln("Hello World");
      setSizeVF(11, 10);//размер символа в пикселях по х и у
      printVFln("Hello World");
      bold = 1;//толстый вкл
      setSizeVF(12);//размер текста в пикселях по у
      printVFln("Hello World");
      bold = 0;//толстый выкл
      italic = 1;//курсив вкл
      setSizeVF(13);//размер текста в пикселях по у
      printVFln("Hello World");
      italic = 0;//курсив выкл
      display.display();
      delay(250);
      display.clearDisplay();
    }
    Еще один тест VF
    Код (C++):
    #include <Adafruit_GFX.h>
    #include <Adafruit_SSD1306.h>
    #define OLED_RESET 4
    Adafruit_SSD1306 display(OLED_RESET);
    #include <VF.h>//векторный шрифт
    void setup() {
      display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
      display.display();
    }

    void loop() {
      byte x = 1;
      while (x != 18) {
        setCursorVF(0, 24);//позиция
        display.clearDisplay();
        setSizeVF(x, 15);//размер символа в пикселях по х и у
        printVF("VF Test");
        display.display();
        //delay(250);
        x = x + 1;
      }
      delay(1000);
      x = 1;
      bold = 1;//толстый
      while (x != 15) {
        setCursorVF(40, 24);//позиция
        display.clearDisplay();
        setSizeVF(8, x);//размер символа в пикселях по х и у
        printVF("Bold");
        display.display();
        //delay(250);
        x = x + 1;
      }
      bold = 0;//толстый
      delay(1000);
      x = 1;
      italic = 1;//курсив
      while (x != 15) {
        setCursorVF(30, 24);//позиция
        display.clearDisplay();
        setSizeVF(8, x);//размер символа в пикселях по х и у
        printVF("Italic");
        display.display();
        //delay(250);
        x = x + 1;
      }
      italic = 0;//курсив

      display.display();
      delay(2000);
      display.clearDisplay();
    }
    Если подряд вкл Bold & Italic соответственно получим толстый курсив.
    [​IMG]
    Вектор VS растр
    [​IMG]
     
    Последнее редактирование: 13 ноя 2018
    ИгорьК нравится это.
  6. yul-i-an

    yul-i-an Гик

    Обновил архив. Добавил подсветку синтаксиса и примеры.
     
  7. ostrov

    ostrov Гуру

    Рисует быстрее растррвых? Руссиш ииеется?
     
  8. yul-i-an

    yul-i-an Гик

    Зависит от масштаба шрифта. Bold два раза прорисовывается. В среднем полный экран гдето до 30мс.
    Кирилицы Кока нет, работаю.
     
  9. ostrov

    ostrov Гуру

    Почему бы сразу болд двойной точкой не ричовать?
     
  10. yul-i-an

    yul-i-an Гик

    Для прорисовки используются функции библиотеки Adafruit-GFX в ней двойной точки нет, поэтому прорисовывается линией смещенной, в два прохода, но во втором проходе горизонтальные линии не прорисовываются.
     
    Последнее редактирование: 4 ноя 2018
  11. yul-i-an

    yul-i-an Гик

    Занялся кирилицей
    [​IMG]
     
  12. yul-i-an

    yul-i-an Гик

    Добавил заглавную кирилицу
    Архив
    [​IMG]
    [​IMG]
     
  13. parovoZZ

    parovoZZ Гуру

    а без библиотек абдурины смогешь такое же сотворить?
     
  14. yul-i-an

    yul-i-an Гик

    Библиотеки нужны чтобы на разные экраны выводить (для совместимости). Если отказаться от библиотеки то под каждый экран придется адаптировать.
    Сам думал об этом. Оставить минимум чтобы память не жрало.
     
  15. parovoZZ

    parovoZZ Гуру

    Библиотека же одна, а экраны разные. Что-то ты не договариваешь)))
     
  16. yul-i-an

    yul-i-an Гик

    На днях попробую придумать чтонибудь.
     
  17. yul-i-an

    yul-i-an Гик

    Сидел разбирался, всеровно придется городить буфер для вывода, как минимум размером с символ, писать функцию растеризации линии, ну и соответственно выводить из буфера как битмап.
    Буду пробовать.
     
  18. parovoZZ

    parovoZZ Гуру

    Экранного буфера в дисплее нет, от того он и дешевый.