Adafruit рисование шкалы

Здравствуйте. Использую TFT дисплей на ST7735 в связке с Arduino Nano.
Хочу реализовать прогресс бар со скруглениями (референс на фото), чтобы фон был более темным, чем указатель.
Было предпринято несколько попыток с разными алгоритмами реализации:

  1. Самый простой. Каждый раз отрисовываю фон (все с помощью fillRoundRect), затем уже сам “курсор”. Но при обновлении появляются мерцания (задержки не помогли).
  2. Рисовал фон от конца “курсора” (fillRoundRect), а потом уже сам указательный прямоугольник. Проблема с тем что при достаточно малой ширине прямоугольника менялось скругление из-за чего всегда скругления становились меньше.
  3. Рисовать при помощи кругов. Тут стало лучше. Но ничего не придумал кроме как использовать оператор for. Отрисовка по тому же алгоритму, что и в 2. Но здесь выявилась проблема скорости отрисовки - на месте пересечения фона и “курсора” на мгновение появлялся “полумесяц”.
for(int i=a;i<150;i++){ //a - положение указателя
    tft.fillCircle(i,5,5,GREEN_MAIN);
  }
  for(int i=5;i<a+1;i++){
    tft.fillCircle(i,5,5,GREEN_C);
  }

Также хотел попробовать canvas, но как понял он не подходит для данных примитивов.
К сожалению, поиск в интернете не помог мне.

Подскажите, как грамотнее реализовать такую задумку.

Если хотите сделать быстро и без мерцания, забудьте о стандартных примитивах типа прямоугольника или круга.


Самый быстрый способ - поточечно закрашивать прямоугольник от A до D. Притом, не используя PutPixel или подобные функции.

В принципе, если нужно только избавиться от мерцания и скорость вывода не очень волнует, а также с учетом, что прогрессбар всегда движется только слева направо, - просто рисуйте новое положение от самого начала (т. е. с левого конца, а не со старого текущего положения) до текущей точки. Очищать фон не нужно.

ac5d5fb5a1b995e135cd72474bc3ac04ae639d8c
Спрайты вот такие движем влево-вправо.

В моем случае он может и откатываться назад.
drawPixel подходит?

Самое неприятное, это когда условия игры меняются по ходу игры.
Если уж задаете вопрос, пишите ВСЕ необходимые условия.
В принципе, все указанное в начале моего сообщения, остается верным, отменяется лишь последний абзац.

Вообще-то я имел в виду, что нет.
Но Вы попробуйте, может, Вас и устроит. Опять же, результат зависит от того, как именно реализована эта drawPixel.

1 лайк

А каким ещё способом можно рисовать пиксель?

Можно в спрайте.

Можете подсказать, как правильно искать информацию о спрайтах? По моим запросам выдает что-то непонятное либо чересчур сложное без объяснений.

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

// РИСУНОК

#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_ST7735.h> // Hardware-specific library
#include <SPI.h>
#define TFT_CS     10
#define TFT_RST    9  
#define TFT_DC     8
static Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS,  TFT_DC, TFT_RST);
extern const unsigned char ris_1[];
extern const unsigned char ris_2[];

void setup(void) {
    // Используйте этот инициализатор, если вы используете 1,8-дюймовый TFT
  tft.initR(INITR_BLACKTAB);   // initialize a ST7735S chip, black tab
 tft.fillScreen(ST7735_BLACK);
 tft.setRotation(0);//ориентация экрана
  }
void loop() {
 tft.drawBitmap(0,0,ris_1, 128,160,tft.Color565(255,255,255),tft.Color565(0,0,0));
 tft.drawBitmap(0,0,ris_2, 128,160,tft.Color565(255,155,100),tft.Color565(0,0,0));
  }
 

Вот пример скетча (у меня старая версия библиотеки).
Ниже массивы картинок, их вставить в папку со скетчем файлом с расширением .с

#include <avr/pgmspace.h>

const unsigned char ris_1[]PROGMEM = {
0X00,0X00,0X00,0X00,0X80,0X00,0X00,0X05,0XB5,0X40,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X01,0X00,0X00,0X00,0X5A,0X40,0X94,0XA0,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X02,0X14,0X40,0X02,0XA8,0X08,0X55,0X0E,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X08,0X40,0X01,0X14,0XB1,0X03,0X08,0XA1,0XA4,0X80,0X00,0X00,0X00,
0X00,0X00,0X00,0X80,0X00,0X04,0X02,0XC0,0X2C,0X52,0X00,0XC0,0X08,0X00,0X00,0X00,
0X04,0X88,0X44,0X14,0X01,0X20,0X10,0XAA,0XB2,0XAB,0XAA,0X28,0X00,0X88,0X80,0X00,
0X10,0X01,0X00,0X00,0X08,0X00,0X0B,0XC0,0X55,0X54,0X90,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X10,0X40,0X04,0X42,0X93,0X54,0X82,0X26,0X12,0X40,0X00,0X01,0X00,
0X80,0X00,0X00,0X41,0X01,0X11,0X0B,0X45,0XA9,0X51,0X01,0X41,0X02,0X00,0X00,0X00,
0X00,0X08,0X24,0X00,0X04,0X00,0X45,0X4A,0XA2,0X0E,0XD4,0X80,0X08,0X00,0X00,0X00,
0X00,0X40,0X80,0X14,0X20,0XA1,0X55,0X76,0XB5,0XBB,0XFA,0X08,0X80,0X08,0X00,0X00,
0X04,0X00,0X00,0X80,0X81,0X08,0X96,0XAD,0X56,0XFF,0XAF,0XC0,0X20,0X20,0X00,0X00,
0X40,0X02,0X08,0X04,0X14,0XA2,0X55,0X5A,0XAD,0XF4,0X48,0X32,0X00,0X00,0X00,0X00,
0X00,0X10,0X01,0X12,0X8A,0X89,0X57,0X6A,0X5B,0XAF,0XB5,0X5C,0X24,0X00,0X00,0X00,
0X00,0X80,0X20,0X00,0X20,0X6A,0X57,0X5B,0X6F,0X5A,0XEA,0XA5,0X00,0X00,0X00,0X00,
0X04,0X00,0X84,0X94,0X0A,0X95,0X5A,0XEA,0XBA,0XFF,0XAD,0X52,0XC8,0X40,0X04,0X00,
0X80,0X04,0X00,0X01,0X55,0X55,0XB7,0X55,0XAD,0X4B,0XD5,0X55,0X41,0X00,0X00,0X00,
0X00,0X10,0X02,0X48,0X0A,0XBA,0XDB,0XBA,0XD6,0XBE,0XED,0X54,0X54,0X00,0X00,0X00,
0X10,0X40,0X90,0X02,0XB7,0XED,0X6D,0X6D,0X7A,0XAB,0X5F,0XAB,0X20,0X00,0X00,0X00,
0X01,0X00,0X02,0XA8,0X4A,0XBB,0X77,0XD7,0XAA,0XAA,0XEA,0XE9,0X49,0X00,0X00,0X00,
0X80,0X02,0X20,0X02,0XAD,0XF5,0XAD,0X7D,0XFF,0X5A,0XBF,0X7D,0X34,0X20,0X00,0X00,
0X04,0X00,0X09,0X14,0X2B,0XDE,0XDF,0XD6,0XB5,0XEB,0X55,0XAB,0X8E,0X80,0X00,0X00,
0X10,0X10,0X84,0X42,0XAF,0X77,0X7B,0X7F,0XEF,0X5D,0X55,0X74,0XF3,0X00,0X00,0X00,
0X40,0X00,0X21,0X11,0X55,0XDB,0XEF,0XFB,0X7D,0XEB,0XB5,0X5E,0X8D,0XA2,0X00,0X00,
0X00,0X44,0X04,0X4A,0X5B,0XBE,0XBD,0XDF,0XF7,0X7D,0X6A,0XA3,0X56,0X40,0X00,0X00,
0X00,0X00,0X81,0X24,0XAE,0XEB,0XF7,0XFF,0XDF,0XD7,0XD6,0XBD,0XD1,0X50,0X00,0X00,
0X82,0X10,0X10,0X52,0X57,0XBF,0XDF,0XFF,0XFF,0XFD,0X75,0XA6,0XB1,0XA0,0X04,0X00,
0X08,0X40,0X05,0X09,0XFA,0XFD,0XFF,0X76,0XFF,0XF7,0XBA,0XBB,0XFC,0X50,0X00,0X04,
0X00,0X02,0X40,0XA5,0X2F,0XDF,0X7B,0XFF,0XFD,0XBF,0XD7,0XCD,0X56,0X20,0X00,0X00,
0X20,0X00,0X0B,0X4A,0XF6,0XF7,0XDF,0XFF,0XEF,0XFD,0XFD,0X75,0XFD,0X14,0X00,0X00,
0X01,0X00,0X8A,0X95,0XDF,0XFD,0XFF,0XFF,0XFF,0XFF,0X6E,0XDB,0X57,0X90,0X00,0X00,
0X04,0X12,0X2B,0X2F,0X7D,0XFF,0XFF,0XFF,0XFF,0XFB,0XFB,0XB7,0XFE,0XDA,0X00,0X00,
0X40,0X00,0X0E,0X2B,0XFF,0XBF,0XFB,0X6F,0X7F,0XDF,0XDE,0XED,0X57,0XA8,0X00,0X00,
0X00,0X40,0XB8,0X77,0XDB,0XF7,0X7F,0XFF,0XFF,0XFF,0X77,0X7B,0XBD,0XCE,0X00,0X00,
0X01,0X02,0X59,0X5D,0X7F,0XFF,0XFF,0XFF,0XFD,0XBF,0XFD,0XDE,0XEE,0XA5,0X00,0X00,
0X04,0X01,0X69,0XB7,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XBF,0XEB,0X77,0XF2,0X80,0X00,
0X80,0X14,0XA2,0XAF,0XFF,0XDF,0XFF,0XFF,0XFF,0XF7,0XEE,0XBE,0XBD,0XB4,0X40,0X00,
0X00,0X02,0XA5,0X7F,0XF7,0X7F,0XFF,0XFF,0XFF,0XFD,0XFB,0XF7,0XD7,0XE9,0X10,0X00,
0X10,0X91,0X04,0XB6,0XFF,0XFF,0XFD,0XFF,0XEE,0XFF,0X6F,0XBD,0X7F,0X7D,0X02,0X00,
0X00,0X04,0X53,0XAF,0XFF,0XFF,0XEF,0XFF,0XFF,0XBF,0XFE,0XEF,0XAB,0XED,0X00,0X00,
0X02,0X42,0X4A,0XBF,0XDE,0XFF,0X7F,0XFF,0XFF,0XEF,0X6F,0XFA,0XFF,0XBA,0X00,0X02,
0X08,0X10,0X05,0X77,0X7F,0XFD,0XFF,0XFF,0XFF,0XFB,0XFD,0XAF,0X5E,0XFB,0X80,0X20,
0X21,0X4A,0X49,0XBF,0XFF,0XF7,0XFF,0XFF,0XBF,0XFE,0XF7,0XFD,0XEF,0XEC,0X80,0X00,
0X04,0XA0,0X0A,0XD7,0XFF,0XDF,0XFF,0XFD,0XFF,0X7F,0XBF,0XBF,0XBF,0X76,0X40,0X00,
0X18,0X04,0X85,0XBE,0XFF,0X7F,0XFF,0XFF,0XFD,0XEE,0XFD,0XFB,0X77,0XDF,0X20,0X00,
0X50,0X00,0X16,0XEF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XEF,0XEF,0XDF,0XF2,0X90,0X00,
0X42,0X41,0X02,0XBB,0XFF,0XFF,0XF6,0XDB,0XFF,0XFF,0XFF,0XFE,0XFD,0XAD,0X44,0X08,
0XA0,0X11,0X1A,0XC1,0X5B,0XED,0XBF,0XE4,0X55,0XED,0XB6,0XFB,0XBF,0XF6,0X80,0X00,
0X80,0X82,0X84,0X05,0X7F,0X7F,0XFD,0XAA,0XAA,0X7F,0XFF,0XDF,0XFF,0XBA,0XD4,0X80,
0X04,0X01,0X14,0X05,0X5F,0XFF,0XF7,0XDD,0X15,0XBF,0XF7,0X7A,0XDE,0XED,0X40,0X00,
0X01,0X4A,0X84,0X17,0XFD,0XF7,0X7F,0XFE,0XDF,0XFE,0XDD,0XFF,0XFF,0XF5,0X50,0X00,
0X12,0X02,0X08,0X49,0X5F,0XDF,0XFF,0XFF,0X7B,0X7F,0XFF,0XF6,0XBF,0XDA,0X90,0X80,
0X01,0X45,0X09,0X77,0XFF,0XFF,0XFF,0XFB,0XFF,0XFD,0XEF,0XFF,0XFF,0X6D,0X52,0X00,
0X04,0X02,0X8A,0XDF,0XF7,0XFF,0XFF,0XFF,0XFF,0XFF,0XBF,0XDD,0XB7,0XF5,0X54,0X00,
0X41,0X25,0X15,0XFA,0XBF,0XFF,0XFD,0XDF,0XFE,0XEF,0XFB,0X7F,0XFF,0XAD,0X28,0X90,
0X14,0X86,0X8B,0XEF,0XFD,0XFF,0XFF,0XFF,0XF7,0XFE,0XAF,0XF7,0XAF,0XFF,0X8A,0X00,
0X02,0X05,0X0E,0XFD,0XAF,0XFF,0XFF,0XFF,0XBF,0XFF,0XFF,0XFE,0XFF,0XED,0X65,0X40,
0X54,0X92,0X97,0XAB,0XF6,0XEF,0XFF,0XF5,0XEF,0XFF,0XBB,0X77,0XFF,0XBF,0XA9,0X54,
0X00,0X02,0X16,0XF5,0X5B,0XBF,0XFF,0XFE,0X95,0XFE,0XDF,0XFF,0XDD,0XFD,0XB2,0X50,
0X15,0X05,0X1B,0XAA,0XAD,0X7F,0XF7,0X75,0XED,0X7B,0XEF,0XDD,0X7F,0XFF,0X5A,0X94,
0X00,0X10,0X8F,0XD5,0X75,0X7F,0XFF,0XFE,0XBA,0XBF,0XBB,0X7F,0XFF,0XFB,0XEA,0X43,
0X10,0X42,0X16,0X4A,0XBE,0XBF,0XDF,0XB5,0XDF,0X7F,0XDF,0XF7,0XEF,0XEF,0XD2,0XA8,
0X09,0X04,0X1B,0X20,0XAB,0X2F,0XFD,0XF4,0X2D,0XDD,0XB7,0XBB,0X7E,0XFA,0XB9,0X51,
0X00,0X02,0X16,0X8F,0X56,0X9F,0XFE,0XAB,0XD2,0XEF,0XFD,0XFF,0XFF,0XFE,0XD4,0XA8,
0X08,0X08,0X1A,0X3C,0X2B,0X3F,0X75,0XD7,0X01,0X7F,0XDF,0X6B,0XDF,0XEB,0X5E,0XA4,
0X08,0X22,0X4A,0X78,0X1A,0X9F,0XFF,0X6F,0X26,0XB7,0XF7,0XFE,0XFD,0XFF,0XD2,0XAA,
0X08,0X84,0X14,0X28,0X9B,0X37,0XD7,0XDF,0X03,0X5E,0XFF,0XAF,0XF7,0XB5,0X6D,0X44,
0X40,0X0A,0X16,0XD0,0X35,0X3E,0XFF,0X7E,0X82,0XFF,0XED,0XFB,0X7F,0XDD,0XAB,0X69,
0X10,0X04,0X2B,0X28,0X55,0X5B,0XED,0XCB,0X2B,0X6D,0XFF,0XF7,0XEE,0XB6,0XB4,0XA0,
0X08,0X82,0X0A,0X57,0X6E,0X6F,0XBF,0X75,0XBD,0XBF,0XFF,0X7D,0XBF,0XDB,0X5A,0X5A,
0X00,0X08,0X54,0X0A,0XDA,0X3E,0XF7,0XBA,0XA6,0XD5,0XED,0XEF,0XFF,0X6D,0XEB,0X24,
0X10,0X00,0X2A,0XA5,0X6C,0XFB,0XFD,0XDF,0X7B,0X7F,0X7F,0XFA,0XFA,0XD5,0X5D,0X54,
0X00,0X04,0X01,0X4A,0XD8,0X2F,0XB7,0X6B,0XDD,0XD5,0XFB,0X5F,0XDF,0XBA,0XD5,0X95,
0X14,0X40,0X55,0XAD,0XE8,0XBE,0XEF,0XFE,0XFF,0XFF,0XEF,0XF5,0X75,0X68,0X35,0X54,
0X00,0X00,0X22,0XB7,0X54,0X7B,0XBD,0XF7,0XF6,0XAE,0XFD,0X5F,0XDA,0XDE,0X8D,0X6A,
0X00,0X00,0X52,0XDA,0XF8,0XDE,0XFF,0XDE,0XBF,0XEB,0XBB,0XF5,0X6D,0X6C,0XC5,0X56,
0X20,0X00,0X4A,0XB7,0X51,0X77,0XB7,0XFF,0XFB,0X7F,0XFD,0XBB,0XB7,0X3B,0X42,0XAB,
0X00,0X01,0X2D,0XFD,0XF1,0X7D,0X7D,0XFF,0XFF,0XFA,0XDB,0XDD,0X6D,0XAE,0XD4,0XDA,
0X42,0X00,0X1B,0X57,0X55,0XAF,0XAF,0XBE,0XFF,0XDF,0XFE,0XEB,0XAE,0XFA,0X42,0X6F,
0X00,0X08,0X6D,0XFD,0XF2,0XFA,0XFB,0XFF,0XFF,0XFF,0XD7,0X5D,0X55,0X3D,0XA9,0X5A,
0X00,0X20,0X37,0X57,0XA5,0XDF,0X5F,0X7F,0XFD,0XFF,0XFD,0XF6,0XAD,0X76,0XA9,0XB7,
0X00,0X00,0X5D,0XFD,0XC7,0X75,0XD7,0XFF,0XFF,0XFD,0XF6,0XAD,0X55,0XFF,0X9D,0X5A,
0X00,0X20,0X5F,0X57,0X55,0XFF,0X5B,0XEF,0XFF,0XFF,0XDE,0XF7,0X1B,0XBD,0XD4,0XFF,
0X00,0X80,0X6B,0XDF,0XAF,0XFF,0XED,0XFE,0XEF,0XDF,0XFB,0XAD,0X5F,0XFF,0X6E,0X57,
0X04,0X00,0X3E,0XEA,0XCB,0X6D,0XB6,0XFF,0XFF,0XFE,0XFD,0X75,0X55,0XED,0XFE,0X5D,
0X00,0X00,0X5B,0XBF,0X9F,0XFF,0XDB,0XFF,0XFE,0XFF,0XEE,0XAE,0XBF,0XFF,0X6D,0X3F,
0X00,0X00,0X37,0X6A,0XCB,0XFF,0X6E,0XBF,0XFF,0XF7,0XF7,0X75,0X4B,0XFD,0XFF,0X7F,
0X00,0X00,0X5D,0XBF,0X97,0XFF,0XFD,0XEF,0XFB,0XFF,0X7A,0XBA,0XB7,0XBE,0XF6,0XBA,
0X00,0X00,0X2E,0XD7,0X4D,0XFF,0XB7,0X7F,0X7F,0XBF,0XEF,0X56,0XDB,0X75,0X7B,0X3F,
0X00,0X00,0X35,0X7E,0X07,0X76,0XFF,0XBB,0XFF,0XFD,0XFD,0X7B,0X4F,0XFF,0X5E,0XBB,
0X01,0X00,0X2F,0XBB,0X53,0XDF,0XBF,0X6F,0XFF,0XF7,0XDF,0X55,0X77,0X6B,0XBB,0X7D,
0X00,0X00,0X28,0XEF,0X01,0X7A,0XA5,0XBE,0XF7,0X7F,0XBA,0XDA,0X9F,0XDA,0XED,0X3E,
0X00,0X08,0X2B,0XBE,0X92,0XDD,0XFE,0XFF,0XBF,0XFE,0XFF,0X6E,0XDF,0XB7,0XEE,0XF6,
0X00,0X00,0X2A,0XFF,0XE0,0XAB,0XFB,0XF6,0XFF,0XD7,0XF5,0X55,0XAE,0XEA,0XB5,0X5B,
0X04,0X40,0X2B,0X75,0X5A,0X7F,0XBF,0XBF,0XBB,0X7F,0XFE,0XBA,0XBF,0XB5,0X7B,0X7E,
0X20,0X00,0X25,0XDE,0XFF,0XED,0XEE,0XF7,0XDF,0XFD,0XDB,0X6F,0X57,0XA5,0X55,0XD5,
0X04,0X80,0X32,0XFB,0XB7,0XFE,0XFB,0XDE,0XEF,0XDF,0XFE,0XB5,0XBD,0X95,0X5A,0XBA,
0X00,0X00,0X15,0XAE,0XFE,0XF7,0XFF,0XF7,0X5A,0XF7,0X7B,0X6A,0XAF,0X6A,0X8A,0XCE,
0X00,0X00,0X52,0XFB,0XFF,0XDF,0XDE,0XDD,0XF7,0XDD,0XFE,0XBE,0XBB,0X95,0X55,0X4A,
0X00,0X00,0X35,0X57,0X77,0XFD,0XF7,0XFE,0XBF,0X7F,0XEB,0X55,0XBE,0XD0,0XAA,0X8A,
0X00,0X00,0X29,0XBB,0XBE,0XFF,0XFF,0XD7,0XDB,0XF7,0XFD,0X7E,0XBB,0X40,0X55,0X00,
0X00,0X00,0X2A,0XDE,0XFF,0XEF,0XFB,0X7E,0XED,0XBE,0XF6,0XAA,0XAE,0X80,0XA2,0X04,
0X00,0X10,0X11,0X2B,0XEB,0XFE,0XDF,0XEF,0X5E,0XFB,0XFD,0XDD,0X4D,0X00,0X14,0X10,
0X00,0X00,0X35,0XAE,0XBF,0XBB,0XFA,0XBB,0XF7,0XDF,0XDA,0X77,0X40,0X00,0X00,0X00,
0X04,0X00,0X15,0X55,0XFB,0XFF,0XBF,0XEE,0XBA,0XFB,0XF7,0XBA,0X80,0X00,0X00,0X00,
0X10,0X00,0X0A,0XA9,0X5D,0X6A,0XE5,0X3B,0XDF,0XEF,0X7D,0X5D,0X40,0X00,0X00,0X00,
0X00,0X00,0X15,0XC5,0X56,0XB5,0XB6,0XD6,0XED,0X7F,0XEE,0XF6,0X80,0X00,0X00,0X00,
0X00,0X00,0X09,0X68,0X49,0X4A,0X9B,0X59,0X5F,0XF7,0XBA,0XBA,0X80,0X00,0X00,0X00,
0X00,0X10,0X15,0XB4,0X22,0X51,0X55,0X25,0X76,0XDE,0XFE,0XED,0X00,0X00,0X00,0X00,
0X00,0X00,0X08,0XFA,0X05,0X6A,0XAE,0X90,0X9F,0XFB,0XFA,0XF4,0X00,0X00,0X00,0X00,
0X40,0X00,0X0A,0X7D,0X4A,0XBB,0X7B,0X60,0XED,0X7F,0XFD,0XBA,0X00,0X00,0X00,0X00,
0X00,0X00,0X0A,0XB7,0X2B,0XED,0XDD,0XA2,0XBB,0XEF,0XD6,0XE8,0X00,0X00,0X00,0X20,
0X00,0X80,0X06,0X7F,0X8E,0XBF,0X77,0XA2,0XD6,0XFB,0XFD,0XE0,0X00,0X04,0X20,0X80,
0X00,0X00,0X05,0X5E,0XD7,0XF5,0XDE,0XC5,0XFD,0XEF,0XFB,0X70,0X02,0X10,0X00,0X00,
0X00,0X00,0X83,0XBF,0X9A,0XBF,0X76,0X97,0X7B,0XFF,0X6D,0XC0,0X00,0X00,0X00,0X00,
0X84,0X00,0X02,0XAF,0XCF,0XEB,0XDE,0XAD,0XFF,0X57,0XFB,0XA0,0X00,0X00,0X00,0X00,
0X00,0X00,0X01,0X9F,0X8B,0X7D,0X6E,0XB7,0XEB,0XFF,0XF7,0X80,0X10,0X00,0X00,0X00,
0X00,0X04,0X01,0XDE,0XCF,0XD7,0XBB,0X5A,0XFE,0XEE,0XDE,0X00,0X00,0X00,0X00,0X00,
0X00,0X10,0X00,0X6B,0XCF,0X7D,0XDE,0X6F,0XFD,0XDF,0XF6,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0XD7,0XC7,0XD6,0XBD,0X55,0XDF,0XFF,0XDC,0X00,0X00,0X00,0X01,0X02,
0X20,0X80,0X00,0X6F,0XCD,0XFB,0XDA,0XDF,0XFF,0XAD,0XE8,0X00,0X40,0X20,0X08,0X00,
0X00,0X00,0X00,0X37,0XA7,0X6E,0XBD,0X57,0X7D,0XFF,0X50,0X01,0X00,0X00,0X40,0X00,
0X00,0X00,0X00,0X37,0XC7,0XF6,0XD5,0X7E,0XF7,0XAF,0XA0,0X20,0X00,0X00,0X00,0X00,
0X02,0X00,0X00,0X1A,0XC5,0X5B,0X7D,0X5B,0XFF,0XFE,0X80,0X00,0X00,0X00,0X00,0X08,
0X40,0X00,0X02,0X1B,0XE7,0XF6,0XB5,0XFF,0XFF,0XBF,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X0A,0XC2,0XEF,0X7A,0XB7,0XBF,0XF6,0X00,0X00,0X00,0X21,0X00,0X01,
0X00,0X00,0X00,0X0D,0XE3,0XB5,0XAB,0XFE,0XFD,0XBC,0X80,0X80,0X00,0X80,0X00,0X00,
0X00,0X04,0X20,0X05,0X61,0X6E,0XF7,0XDF,0XFF,0X7A,0X02,0X02,0X00,0X00,0X00,0X44,
0X00,0X20,0X00,0X04,0XD1,0XF5,0XAA,0XFF,0XF7,0XF0,0X00,0X00,0X00,0X00,0X02,0X01,
0X04,0X00,0X00,0X02,0XF0,0XB6,0XEF,0XFF,0XFE,0XD0,0X00,0X00,0X04,0X00,0X10,0X11,
0X00,0X00,0X00,0X40,0X50,0XDB,0XAF,0XFB,0XBF,0X60,0X00,0X00,0X00,0X00,0X80,0X04,
0X00,0X00,0X01,0X00,0X38,0X6D,0XAF,0XEF,0XFB,0X80,0X00,0X00,0X00,0X04,0X00,0X22,
0X00,0X00,0X04,0X01,0X2C,0X2B,0X5F,0XFF,0XED,0X00,0X04,0X22,0X20,0X20,0X00,0X89,
0X10,0X00,0X10,0X00,0X14,0X5D,0XBF,0XBE,0XFC,0X00,0X00,0X00,0X01,0X00,0X00,0X04,
0X00,0X41,0X00,0X00,0X0E,0X12,0XBF,0XFF,0XD8,0X00,0X20,0X00,0X00,0X00,0X02,0X51,
0X00,0X00,0X00,0X00,0X03,0X0A,0X7F,0XF7,0X70,0X00,0X00,0X00,0X00,0X00,0X00,0X88,
0X00,0X00,0X00,0X00,0X05,0X01,0XFE,0XFF,0XC0,0X00,0X00,0X00,0X80,0X00,0X48,0X22,
0X42,0X04,0X00,0X00,0X02,0XC5,0XFF,0XFD,0X80,0X01,0X00,0X88,0X04,0X11,0X02,0X88,
0X00,0X00,0X00,0X00,0X01,0X7F,0XDF,0XEF,0X00,0X00,0X00,0X00,0X00,0X40,0X02,0X52,
0X10,0X00,0X00,0X10,0X80,0XAB,0X7B,0XBC,0X00,0X00,0X00,0X00,0X00,0X00,0X11,0X09,
0X00,0X20,0X11,0X00,0X00,0X5D,0XEE,0XF8,0X00,0X08,0X08,0X02,0X10,0X00,0X04,0XA4,
0X00,0X00,0X40,0X00,0X00,0X27,0X7B,0XE0,0X00,0X00,0X00,0X88,0X00,0X00,0XA2,0X51,
0X00,0X01,0X00,0X00,0X00,0X09,0XAD,0X40,0X00,0X00,0X00,0X00,0X01,0X04,0X19,0X24,
0X02,0X00,0X00,0X00,0X00,0X02,0X55,0X00,0X00,0X40,0X20,0X00,0X04,0X11,0X45,0X49,
0X08,0X10,0X00,0X01,0X08,0X00,0X10,0X00,0X01,0X00,0X00,0X00,0X40,0X00,0X14,0X90,
0X00,0X00,0X00,0X08,0X01,0X00,0X84,0X00,0X00,0X00,0X00,0X44,0X00,0X05,0X4A,0X05,
0X00,0X00,0X00,0X20,0X23,0X02,0XF8,0X00,0X00,0X00,0X81,0X00,0X00,0X10,0XA5,0X68,
0X00,0X00,0X00,0X80,0X07,0XF0,0X20,0X00,0X10,0X00,0X00,0X00,0X08,0X85,0X11,0X01,
0X00,0X88,0X80,0X00,0X87,0XF0,0X00,0X00,0X40,0X00,0X00,0X00,0X80,0X12,0XAA,0X48,
0X10,0X00,0X04,0X00,0X27,0X41,0X80,0X04,0X00,0X00,0X00,0X04,0X00,0X09,0X15,0X25,
0X00,0X00,0X00,0X02,0X0C,0X05,0X00,0X00,0X00,0X00,0X08,0X20,0X04,0XA5,0X52,0X90,
0X00,0X80,0X00,0X00,0X9A,0X42,0X00,0X00,0X00,0X01,0X00,0X80,0X20,0X29,0X28,0X44,
0X02,0X04,0X00,0X04,0X10,0X08,0X00,0X20,0X00,0X04,0X00,0X00,0X80,0XAA,0XA5,0X22,
0X08,0X00,0X40,0X10,0X31,0X20,0X00,0X80,0X00,0X10,0X00,0X02,0X02,0X2A,0X2A,0XA9,
0X00,0X10,0X02,0X01,0X20,0X00,0X00,0X00,0X00,0X80,0X08,0X10,0X04,0XAA,0XA4,0X92,
0X00,0X00,0X00,0X08,0X64,0X80,0X04,0X00,0X02,0X00,0X01,0X00,0X01,0X55,0X2A,0X44,
0X10,0X00,0X00,0X22,0X00,0X00,0X00,0X00,0X20,0X00,0X00,0X00,0X2A,0XA4,0XA2,0X28,
0X40,0X81,0X10,0X80,0X49,0X00,0X00,0X00,0X80,0X00,0X20,0X24,0X01,0X2A,0XA8,0X82,
0X00,0X08,0X00,0X14,0X00,0X00,0X20,0X00,0X00,0X00,0X02,0X00,0XAA,0XA9,0X4A,0XA8,
0X02,0X00,0X00,0X40,0X10,0X04,0X00,0X00,0X00,0X01,0X00,0X00,0X02,0X54,0X44,0X41
};
const unsigned char ris_2[]PROGMEM = {
0X50,0X00,0X02,0X10,0X80,0X08,0X09,0X24,0X84,0X81,0X24,0X80,0X10,0X00,0X15,0X40,
0XA9,0X02,0XA8,0XA5,0X28,0X24,0X24,0X92,0X02,0X51,0X49,0X28,0XA5,0X54,0X49,0X2A,
0XA0,0X00,0X12,0X12,0X20,0X12,0X12,0XAA,0X85,0X42,0X24,0X90,0X08,0X89,0X25,0X50,
0X54,0X81,0X41,0X48,0X90,0X28,0X4A,0X49,0X44,0XA1,0X52,0X48,0X52,0X20,0X14,0X92,
0XA8,0X00,0X14,0X25,0X20,0X04,0X29,0X25,0X22,0X82,0X95,0X24,0X09,0X4A,0X45,0X48,
0XA2,0X01,0X49,0X48,0X90,0X28,0X4A,0XAA,0X82,0X50,0XA4,0XA8,0X52,0X24,0X88,0XAA,
0X58,0X80,0X22,0X25,0X20,0X14,0X29,0X54,0XA2,0XA2,0X92,0X94,0X08,0X89,0X02,0X24,
0XA1,0X01,0X14,0X90,0X81,0X20,0X4A,0X4A,0X82,0X81,0X54,0XA2,0X25,0X24,0X90,0X52,
0XA8,0X00,0X42,0X4A,0X50,0X14,0X29,0X52,0X42,0X62,0X4A,0X48,0X28,0X92,0X0F,0XAC,
0X52,0X08,0X94,0X92,0X82,0X28,0X55,0X4A,0XA2,0X81,0X55,0X2A,0X12,0X4A,0X8A,0XDA,
0XA8,0X80,0X22,0X48,0X40,0X08,0X4A,0XAA,0XA2,0XA5,0X45,0XA4,0X25,0X22,0X8D,0X68,
0XA2,0X08,0X49,0X25,0X44,0X28,0X54,0XAA,0X82,0XAF,0X28,0XA8,0X12,0X40,0X4F,0X95,
0X58,0X80,0X24,0X95,0X02,0X24,0X52,0XAA,0XA2,0XB5,0XD1,0X64,0X49,0X22,0X0D,0XD0,
0XA2,0X08,0X2A,0X52,0XA4,0X14,0X2A,0XAA,0XA2,0XAE,0XAE,0X54,0X2A,0X90,0X2A,0X8A,
0X50,0X80,0X41,0X49,0X02,0X28,0X55,0X55,0X42,0XAA,0XFF,0XAA,0X12,0X42,0XA5,0X51,
0X54,0X0A,0X14,0X94,0X88,0X24,0X55,0X55,0X42,0XAB,0XF7,0XE8,0X29,0X21,0X54,0X48,
0XA9,0X00,0X0A,0X45,0X06,0X14,0X55,0X55,0X62,0XA5,0XBE,0XB4,0X25,0X40,0X22,0X85,
0X50,0X8A,0X21,0X29,0X08,0X28,0X55,0X55,0X82,0XCB,0XFF,0XD4,0X2A,0X43,0X48,0X50,
0XA4,0X00,0X14,0X94,0X8A,0X28,0X55,0X56,0XA3,0X49,0X4C,0XAA,0X29,0X20,0X90,0X8A,
0X92,0X8A,0X0A,0X4A,0X14,0X28,0X55,0X6A,0XA2,0X8B,0X3A,0XD4,0X25,0X45,0X20,0X20,
0XA8,0X01,0X11,0X52,0X0A,0X14,0X55,0XAA,0XC2,0XC9,0X6E,0X4A,0X2A,0X82,0X94,0X95,
0X52,0X8A,0X04,0X95,0X14,0X28,0X56,0XAD,0X43,0X05,0XFF,0XD4,0X29,0X44,0X48,0X22,
0X54,0X01,0X0A,0X48,0X2A,0X2C,0X5A,0XB6,0XC5,0X92,0XD7,0XD4,0X25,0X02,0XA4,0X49,
0X51,0X0A,0X05,0X55,0X12,0X28,0X6A,0XD5,0X62,0X91,0X6E,0XD4,0X2A,0X8A,0X50,0X12,
0X48,0X81,0X08,0X94,0X2A,0X14,0X55,0X5B,0X43,0X72,0XFF,0XB4,0X2A,0X85,0X2A,0X24,
0XAA,0X0A,0X85,0X52,0X2A,0X28,0X56,0XD5,0XA2,0X91,0XCB,0XEA,0X2A,0X09,0X44,0X11,
0X51,0X04,0X42,0X48,0X2A,0X2C,0X5B,0X5A,0XC3,0X72,0XFD,0X54,0X2A,0X8A,0XA8,0X24,
0XA8,0X89,0X05,0X28,0X54,0X28,0X6A,0XAE,0XA2,0XC1,0XB7,0XEC,0X2A,0X09,0X24,0X12,
0XA5,0X04,0X82,0XA8,0X54,0X28,0X55,0XEB,0X43,0X46,0XFF,0X34,0X55,0X15,0X55,0X14,
0X90,0X0A,0X42,0X54,0XAA,0X2C,0X6E,0XB5,0XE5,0XAD,0XBD,0XAA,0X2A,0X15,0X24,0X09,
0X55,0X01,0X41,0X50,0X54,0X28,0X55,0X5D,0X42,0XB7,0XC2,0X54,0X2B,0X00,0X00,0X24,
0XA9,0X0A,0X52,0XA8,0XAA,0X2C,0X6D,0XD6,0XC3,0X2F,0XE9,0XB6,0X34,0X00,0X00,0X12,
0XA4,0X89,0X41,0X40,0XAD,0X34,0X5B,0X6B,0X62,0X7B,0XEA,0XDA,0X2A,0X00,0X00,0X09,
0X52,0X05,0X21,0X31,0X54,0X14,0X6D,0XBD,0XA1,0X5F,0XB6,0XAA,0X2C,0X36,0XED,0X0A,
0X54,0X88,0XA0,0XA1,0X6A,0X34,0X56,0XD6,0XC5,0X6F,0XE9,0XB4,0X34,0X55,0X2A,0X85,
0X22,0X05,0X51,0X51,0X56,0X28,0X7B,0X6B,0X62,0XBD,0XB7,0X5A,0X2A,0X2A,0XA5,0X08,
0XD4,0X8A,0X48,0XA2,0XAA,0X2C,0X55,0XBD,0X95,0XAF,0XDF,0XEC,0X2C,0X55,0X54,0X85,
0XF2,0X05,0X28,0XA1,0X6C,0X34,0X6E,0XD6,0XCE,0XBF,0X75,0XB4,0X54,0X55,0X55,0X0A,
0XB9,0X09,0X50,0X42,0XAA,0X2C,0X5B,0X6D,0X2B,0X2D,0XAF,0XEC,0X58,0X55,0X55,0X41,
0X7A,0X85,0X48,0X43,0X5A,0X34,0X6D,0XB6,0X9D,0X7F,0XFF,0XB4,0X6C,0X5A,0XAA,0X85,
0X28,0X0A,0X54,0X45,0X6C,0X2A,0X36,0XDC,0X6B,0X2E,0XAB,0XEC,0X28,0XAA,0XA9,0X44,
0XF2,0X89,0X54,0X45,0X56,0X34,0X3B,0X75,0X5E,0X7B,0XFE,0XE8,0X68,0XAB,0X55,0X02,
0XF5,0X05,0X28,0X05,0XB4,0X2E,0X2D,0XD9,0X76,0X5E,0XAF,0XB4,0XB0,0XB5,0X55,0X45,
0XB8,0X8A,0XAA,0X0A,0XAA,0X35,0X17,0X65,0XBD,0X77,0X7A,0XD8,0XD8,0XD5,0X55,0X40,
0XF5,0X04,0XAA,0X0A,0XDE,0X2E,0X1A,0XD5,0X6E,0X5D,0XDF,0XA0,0XA9,0X5B,0X55,0X43,
0X59,0X0A,0XA4,0X0B,0X6A,0X35,0X87,0X66,0XFA,0X77,0X75,0XD1,0XD0,0XAA,0XAA,0XA1,
0XF4,0X8A,0X9A,0X0A,0XAA,0X2E,0X81,0X97,0XBC,0XBD,0XDE,0X82,0XB1,0XDA,0XD5,0X52,
0X72,0X04,0XAA,0X16,0XDC,0X35,0XC0,0X15,0XEC,0XEE,0XF7,0X07,0X61,0X6B,0X5A,0XA1,
0X1A,0X8A,0XAB,0X1A,0XAA,0X2E,0XF0,0X2F,0X7A,0X7B,0X5B,0X1A,0XD1,0XAD,0X55,0X50,
0X54,0X8A,0XAA,0X95,0XB6,0XB7,0X5E,0X5B,0XD8,0XB7,0X76,0XF7,0X65,0X55,0X55,0X45,
0XFA,0X54,0XAA,0X6A,0XAD,0X5A,0XE9,0X2F,0X75,0X7D,0XDD,0XAD,0XBB,0XB6,0XD5,0X5A,
0XD1,0X52,0XAA,0XAD,0XDB,0XED,0XBA,0X5D,0XDC,0XDB,0X76,0XF6,0XD6,0XDB,0X5A,0XA4,
0XFA,0X95,0X55,0XB6,0X6D,0X5B,0X64,0XB7,0XF0,0XFD,0XED,0X5B,0X7A,0XAA,0XAA,0XAA,
0XDA,0X55,0X55,0X55,0XB6,0XEE,0XD2,0X5E,0XAD,0X57,0XDE,0XED,0XAD,0XDB,0X6A,0XAA,
0XE9,0X4A,0XAA,0XAA,0XDB,0X5B,0XAD,0XB7,0XF0,0XFA,0XEB,0XB6,0XD6,0XB5,0X55,0X55,
0XBA,0XA9,0X55,0XB7,0X55,0XB6,0XB6,0XDA,0X89,0X6F,0X5D,0X6F,0X7B,0X6D,0XAD,0X54,
0XF4,0X55,0X56,0XAA,0XEE,0XDA,0XAD,0X6F,0XE1,0XF9,0XD6,0XDA,0XD6,0XD6,0XD5,0XAB,
0X5A,0XA5,0X55,0X5D,0X5B,0X75,0XFF,0XB5,0X41,0X5A,0XBB,0XB7,0X6D,0XBA,0XB6,0XA9,
0X52,0X95,0X55,0X6B,0X6D,0XAA,0XAA,0XDF,0X82,0XF5,0X56,0XED,0XB6,0XAB,0X55,0X55,
0X49,0X55,0X55,0XAD,0XB6,0XAB,0XFF,0XB5,0X51,0XB8,0X5B,0X76,0XDA,0XD5,0XAA,0XAA,
0XAA,0X55,0X56,0XB5,0X5A,0XAE,0XDD,0XEE,0XC2,0XE9,0X77,0XAB,0X6D,0XBE,0X6D,0X55,
0X55,0X4A,0XAA,0XD6,0XEC,0XAB,0XFF,0X75,0X41,0XD9,0X5D,0X6D,0XAA,0XA1,0X92,0XAA,
0XA9,0X2A,0XAA,0XAB,0X52,0XB7,0XEB,0XDB,0X02,0XF3,0X77,0XAA,0XAA,0XAD,0X49,0X55,
0X54,0XAA,0XAD,0X75,0XB2,0XAE,0XDE,0XE8,0X81,0XDA,0XED,0X76,0XED,0X56,0XB6,0XB5,
0X4A,0XA9,0X55,0X9E,0XC9,0X5B,0XFB,0X50,0X12,0XFB,0XB7,0XDB,0X55,0XAA,0XAA,0XD5,
0X52,0X55,0X56,0XE5,0X45,0X6F,0XAE,0XCA,0X09,0XDE,0XED,0X6D,0X54,0XD4,0XAD,0X55,
0X55,0X4A,0XAA,0XBB,0XA2,0XBE,0XF5,0X74,0X2A,0XF5,0XFB,0XBE,0XAF,0X5B,0X55,0X55,
0X49,0X2A,0XB5,0X4D,0X09,0X57,0XAB,0X50,0X78,0XB7,0X56,0XEB,0XF5,0XB5,0XB6,0XAA,
0XAA,0XAA,0XAB,0X75,0X84,0XBE,0XD5,0X49,0XDA,0XF5,0XEF,0X5D,0X5A,0XDA,0XDA,0XD5,
0X54,0XAA,0XAD,0XAE,0X22,0XAB,0XAA,0XA3,0X69,0XB7,0X5B,0XEB,0XAF,0X6F,0X55,0X55,
0X52,0XAA,0XAA,0XB5,0X09,0X5F,0XE9,0X0F,0XFC,0XDB,0XFD,0X7D,0X69,0X22,0XB6,0XAA,
0X95,0X4A,0XB5,0X57,0X22,0X5B,0X74,0X3D,0X55,0X6A,0XAB,0XAB,0XAD,0X5A,0XD5,0XB5,
0X54,0XAA,0XAB,0X6A,0X04,0XAF,0XDD,0XEF,0XF9,0XF7,0XBE,0XEE,0XD5,0XAD,0X5A,0XAA,
0XAA,0X55,0X55,0XBB,0X00,0X55,0XFA,0XB5,0X55,0X53,0X6B,0X55,0X5A,0XD2,0XA5,0X55,
0X52,0XAA,0XAD,0X56,0X92,0X8B,0X7F,0XBF,0XBC,0XED,0XDD,0XD6,0XAA,0XAA,0X95,0X6A,
0X95,0X4A,0XAA,0XDB,0X00,0X2B,0XDA,0XD5,0X6D,0XA7,0X77,0X55,0X56,0XD5,0X6A,0XAB,
0X49,0X2A,0XB5,0X6A,0X85,0X15,0X7F,0XEF,0XF4,0XED,0XBB,0XFB,0X6A,0XAD,0X55,0X55,
0X2A,0XAA,0XAB,0X5B,0X40,0X45,0XB7,0X6A,0XBD,0X56,0XDD,0X55,0XAB,0X55,0X5B,0X6A,
0XA9,0X55,0X55,0XAD,0X88,0X12,0XDF,0XF5,0XD5,0XCD,0XEF,0XBD,0X5D,0X2A,0XAD,0X55,
0X4A,0X4A,0XAD,0X6A,0XC1,0X44,0XBB,0XBC,0XFC,0XAD,0X75,0X6D,0XD5,0XDD,0XAA,0XAA,
0XA9,0X55,0X55,0XB7,0X60,0X09,0X56,0XF7,0X2D,0X6F,0XAF,0XDA,0XAA,0X54,0XB6,0XDB,
0X4A,0XAA,0XAA,0XAA,0XD8,0X21,0X5F,0XFE,0XB6,0XD5,0XFA,0XBE,0XAB,0X55,0X55,0X55,
0X29,0X2A,0XB6,0XDD,0XB4,0X84,0X2B,0X7F,0XDC,0XDB,0X5F,0XEB,0X6D,0XAA,0XAD,0XAA,
0X95,0X52,0XAA,0XAB,0X6E,0X01,0X55,0XED,0XAA,0XDD,0XEA,0XBD,0XB6,0XDB,0X6A,0XB5,
0X52,0XAA,0XAB,0X6D,0XB5,0X08,0X2B,0X7F,0XE6,0XF6,0XBD,0XD5,0X55,0X51,0X2D,0X55,
0X4A,0X4A,0XAD,0X56,0XDE,0XA1,0X0A,0XDF,0XFA,0XB5,0XEB,0X7B,0X55,0X55,0XAB,0X55,
0X55,0X2A,0XAA,0XB5,0X6B,0XC0,0X52,0XF5,0XBA,0XD7,0X7E,0XD7,0XBB,0XBE,0XB5,0XAA,
0XA9,0X55,0X55,0XAD,0XB5,0X70,0X0A,0X9F,0XEC,0XE9,0XAB,0XBA,0XAC,0XA5,0X4A,0XB5,
0X54,0XAA,0XAA,0XB6,0XDE,0XDC,0X81,0X6B,0X7F,0X7B,0XFD,0XE5,0X52,0X9A,0XAA,0XAA,
0XAA,0X95,0X55,0X55,0X6B,0X6A,0X14,0X9D,0XFE,0XB6,0XAB,0X5B,0XB7,0X6A,0XAA,0XD5,
0X52,0X52,0XAD,0XB7,0X5B,0XBF,0X42,0X57,0X6F,0XBD,0XFE,0XED,0X6D,0XBB,0X6D,0X55,
0X55,0X4A,0XAA,0XAA,0XED,0X6A,0XC0,0XAA,0XFB,0XDE,0XAB,0XBB,0XB5,0X55,0XAA,0XAA,
0XA8,0XAA,0XAA,0XDB,0X56,0XDD,0XB8,0X0B,0X5F,0X6B,0XF6,0XDE,0XDE,0XEE,0XB6,0XD5,
0X55,0X2A,0X55,0X55,0X7B,0X6B,0XED,0X25,0XED,0XFE,0XAF,0X6B,0X6B,0X5A,0XD5,0X55,
0X52,0XA5,0X55,0X5B,0XAD,0XBD,0X5E,0X85,0X5F,0XD6,0XFA,0XFB,0XB5,0XB5,0X5A,0XAA,
0XA9,0X2A,0X04,0XA4,0X2A,0X07,0XB5,0X41,0X76,0XFB,0XAF,0X84,0X5E,0XA2,0XD4,0XAA,
0XAA,0XA8,0XF0,0XD8,0XDB,0X1A,0XEE,0X70,0XAF,0XBB,0XDA,0XBB,0XAB,0X41,0X56,0XAA,
0XA8,0X92,0X8C,0XA8,0X55,0X1D,0XBA,0X6A,0X35,0X6A,0XBD,0X2E,0X8D,0XE0,0XB4,0XAA,
0XA5,0X41,0X54,0XA8,0X6E,0X16,0XD4,0X3C,0X17,0XFB,0XEA,0X75,0XC6,0XA8,0X54,0XAA,
0XAA,0X52,0XAA,0XA8,0XB5,0X1B,0X7C,0X57,0X0A,0XDB,0X5C,0X5E,0XA3,0X50,0X6A,0XAA,
0XA9,0X21,0X54,0XA8,0X57,0X16,0XD4,0X3A,0X83,0XF5,0X68,0X6B,0X42,0XCC,0X2C,0XAA,
0XAA,0X90,0X95,0X54,0XB5,0X1B,0X6A,0X1F,0XC5,0XBA,0XB8,0XB5,0XE3,0X6A,0X16,0XAA,
0XA4,0X50,0X2A,0XB0,0X5A,0X0D,0XBA,0X2A,0X96,0XEC,0XE8,0XDE,0XA1,0X54,0X14,0XAA,
0XA9,0X48,0X02,0XA8,0XAD,0X16,0XD3,0X1B,0XCB,0XF5,0XB0,0X6B,0X41,0XAB,0X0A,0XAA,
0XAA,0X50,0X01,0X54,0X00,0X1B,0X6D,0X0D,0X17,0X5B,0X50,0XB5,0XE1,0X55,0X0A,0X55,
0X51,0X2A,0X00,0X50,0XFF,0X15,0XB6,0X0E,0XAD,0XE9,0XF0,0XDE,0XA1,0XAA,0X84,0XA9,
0X2A,0X89,0XA0,0X58,0X12,0X1A,0XD5,0X8B,0X37,0XB4,0XA8,0X6A,0XA1,0X4D,0X02,0XA5,
0X51,0X54,0X50,0X48,0XD5,0X0E,0XAB,0X0C,0X5E,0XE8,0X70,0XB6,0XC1,0X6A,0XC2,0X55,
0X54,0X23,0X2C,0X50,0X5A,0X15,0XA4,0X86,0X57,0XB4,0X58,0X5B,0X62,0XAA,0XA0,0XAA,
0XAA,0X94,0XA2,0X58,0X55,0X1A,0XDB,0X44,0XBD,0XD4,0X68,0XD5,0XA3,0X4A,0XA0,0XA9,
0X51,0X42,0X54,0X24,0XAB,0X0B,0X4D,0X80,0XAF,0X68,0X5C,0X6D,0X42,0XAA,0XA0,0X95,
0X54,0X25,0X2A,0XA8,0X55,0X1A,0XB5,0X42,0X7B,0XB4,0X6A,0X36,0X85,0X6A,0XA8,0X52,
0X49,0X40,0X90,0X50,0X55,0X0B,0X56,0XE1,0X5D,0XA8,0X2A,0X55,0XCD,0XA5,0X50,0XA9,
0X52,0X22,0X49,0X48,0X55,0X15,0X55,0X40,0XB7,0X6C,0X76,0X2A,0X15,0X4A,0XA8,0X4A,
0XA9,0X44,0XA2,0XA0,0X28,0X0A,0X0B,0X22,0XDD,0XB4,0X0B,0X8D,0X55,0X25,0X54,0XA9,
0X54,0X29,0X0A,0X4A,0X96,0XA5,0X55,0XB8,0XBE,0XD5,0X5D,0X51,0X24,0X92,0XAA,0X95,
0X49,0X44,0X52,0X92,0X10,0X28,0XA1,0X52,0XEB,0X5A,0X15,0X4A,0X82,0XA2,0X92,0X49,
0X24,0X22,0X89,0X15,0X14,0XA8,0XAA,0XA1,0X5E,0XD4,0X0A,0XEA,0XC5,0X51,0X55,0X54,
0XB2,0X94,0X54,0X49,0X4A,0XA8,0X51,0X62,0XFB,0X6E,0X8B,0X2B,0X42,0XAA,0X49,0X22,
0XA8,0X42,0X92,0X25,0X54,0XA8,0XAA,0X81,0X5D,0X52,0X05,0XA5,0X42,0XA1,0X54,0X95,
0X4A,0X29,0X24,0X2A,0X89,0X50,0XB5,0X45,0XB6,0X2D,0X82,0XAA,0X85,0X55,0X52,0XA8,
0XA1,0X44,0X92,0X12,0X55,0X50,0XAA,0X82,0XFB,0X34,0XA2,0XAA,0XA2,0X94,0X8A,0X45,
0X58,0X12,0X48,0X09,0X4A,0X48,0XAA,0X82,0XAC,0X16,0X81,0X4A,0X82,0X52,0XA9,0X2A,
0XA5,0X48,0X92,0X00,0XA9,0X50,0X55,0X02,0XF6,0X14,0XE1,0X65,0X42,0X8A,0X55,0X50,
0X90,0X22,0X25,0X00,0X15,0X50,0XAA,0X05,0XB4,0X14,0X90,0X8A,0XA1,0X29,0X44,0X8A,
0XAA,0X89,0X48,0X80,0X09,0X28,0XAA,0X82,0XEE,0X16,0X68,0X6A,0X84,0X15,0X2A,0X52,
0X50,0X44,0X12,0X50,0X05,0X48,0X52,0X05,0XB4,0X14,0XA8,0X25,0X42,0X89,0X51,0X25,
0X55,0X29,0X44,0X95,0X0A,0X50,0XAA,0X86,0XEA,0X15,0X50,0X0A,0X42,0XA4,0X8A,0X90,
0XA0,0X02,0X29,0X24,0X85,0X28,0X4A,0X83,0X5A,0X14,0XAC,0X29,0X42,0X55,0X24,0X4A,
0XAA,0XA8,0X82,0X49,0X08,0XA0,0XA9,0X0D,0XEA,0X2A,0X52,0X05,0X01,0X20,0XA9,0X21,
0X50,0X02,0X28,0X24,0X85,0X50,0X55,0X45,0X54,0X2A,0XAA,0X0A,0XC5,0X55,0X12,0X4A,
0X4A,0XA8,0X84,0X92,0X52,0X08,0X8A,0X4B,0XD8,0X52,0X49,0X09,0X01,0X08,0XA4,0X91,
0X28,0X02,0X50,0X49,0X09,0X60,0X51,0X4A,0XA8,0X94,0XA5,0X04,0XA2,0X51,0X11,0X08,
0XA1,0X28,0X0A,0X04,0X92,0X10,0XAA,0X97,0XD4,0X52,0X54,0X8A,0X41,0X40,0X88,0X45,
0X54,0X02,0XA0,0X28,0X09,0X48,0X14,0X0A,0XA1,0X48,0X92,0X42,0X82,0X21,0X25,0X20,
0X90,0XA0,0X08,0X81,0X52,0X42,0XA2,0X97,0X6A,0XA5,0X29,0X08,0X10,0X88,0X90,0X94,
0XA9,0X0A,0XA2,0X24,0X09,0X28,0X4A,0X89,0X89,0X14,0X85,0X65,0X4A,0X24,0X44,0X02,
0XA0,0X20,0X08,0X89,0X50,0X95,0X24,0X56,0X64,0XAA,0X54,0X94,0XA1,0X49,0X12,0XA8,
0X9A,0X09,0X22,0X22,0X25,0X22,0X92,0X8A,0XAA,0XA2,0XAA,0X4A,0X4C,0X92,0X48,0X44,
0XA0,0XA0,0X88,0X91,0X48,0X94,0X54,0X5A,0XD5,0X2A,0XA5,0X51,0X22,0X49,0X25,0X22,
0X94,0X0A,0X22,0X4A,0X12,0X4A,0XA9,0XAE,0X52,0XAA,0X55,0X56,0XAA,0XA5,0X52,0X94,
0XA9,0X20,0X89,0X11,0X4A,0XA5,0X22,0XDA,0X95,0X55,0XAA,0XA9,0X55,0X55,0X4A,0X52,
0X90,0X44,0X24,0X48,0XA4,0X94,0XA9,0XAD,0X6D,0X55,0X55,0X56,0XAA,0XAA,0XAA,0XAA,
0XA9,0X12,0X89,0X25,0X12,0X55,0X50,0X06,0X96,0XED,0X6A,0XAA,0XAD,0X55,0X55,0X55,
0X44,0X00,0X20,0X92,0X55,0X55,0X50,0X05,0X5B,0X56,0XB6,0XDA,0XB5,0XBA,0XDB,0X6D,
0X30,0XAA,0X8A,0X49,0X4A,0XAA,0XA0,0X0E,0XAD,0XAD,0XDB,0X6D,0XAE,0XD5,0XB6,0XB6,
0X92,0X00,0X21,0X12,0X29,0X55,0X58,0X05,0X76,0XEB,0X5D,0X56,0XB5,0X7B,0X6D,0XDB,
0X50,0X55,0X14,0X49,0X55,0X2A,0XD0,0X02,0X9F,0XB9,0XD6,0XED,0XB7,0X96,0XFB,0X77,
0X4A,0X70,0XA2,0X92,0X44,0XAA,0XB9,0X15,0X4A,0XEE,0XDE,0XB5,0XF5,0XDB,0XAF,0XDD,
0X28,0X8A,0X08,0X49,0X2A,0XAA,0XAA,0X9D,0X7F,0XBD,0XEB,0XDF,0X55,0X77,0XFD,0XFF,
0XA5,0X25,0X65,0X24,0X91,0X2A,0XA9,0X03,0X0D,0XDF,0X6E,0XDA,0XEF,0XB5,0XB7,0X6B,
0X2A,0X94,0X9A,0XD5,0X55,0X4A,0XAA,0XC2,0X6F,0XF7,0XFF,0XFB,0XBD,0XFF,0XFF,0XFF,
0X56,0XEB,0X56,0XB6,0XDA,0XB5,0X53,0X03,0X57,0XFF,0XDE,0XDF,0XFF,0XB7,0XFF,0XFF,
0X56,0XA5,0XDD,0XDD,0XB7,0X55,0X59,0X61,0XA9,0XBD,0X7B,0XFD,0XED,0XFD,0X5B,0X6F,
0X57,0XE9,0XDF,0XFF,0XFA,0XEA,0XA5,0X61,0X40,0X3F,0XF7,0X56,0XB7,0XAF,0XEF,0XFF,
0X56,0X2C,0X77,0X77,0X6F,0XB5,0X40,0X00,0X01,0X07,0XFD,0XFF,0XDE,0XF5,0X7F,0XFF,
0X57,0XEF,0X1F,0XFF,0XFF,0XFD,0X51,0X20,0X28,0X0B,0XFF,0XDB,0XFF,0XFF,0XFF,0XFF,
0X4F,0XDD,0XDF,0XFD,0XFF,0XD6,0X84,0X10,0X00,0X1F,0XEF,0XFF,0XFF,0XFF,0XFF,0XFB,
0X57,0X7B,0XDE,0XDF,0XFD,0XFF,0XFB,0XA4,0X95,0XFF,0XFF,0XFF,0XFF,0XDF,0XF7,0XDF,
0X5F,0XF7,0XDF,0XFF,0XEF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X7F,0XFF,0XFF,0XFF
};

[details="Спойлер"]
Этот текст будет скрыт
[/details]

1 лайк

Прямой записью в видеопамять, естественно.
Но Вы, как мне кажется, задаете слишком много вопросов, даже не пытаясь реализовать то, что в них предлагается.
Для начала просто нарисуйте попиксельно такую картинку:
image

Если будет слишком медленно, попытайтесь нарисовать ее же как совокупность горизонтальных линий.

1 лайк

По слову “спрайт”, естественно.
Я где-то в районе 2000 г. публиковал цикл статей о спрайтах в журнале “Мир ПК”, но не уверен, что они там еще сохранились. Ну и потом там ПК, - а это своя специфика. Хотя, основные принципы, естественно, остаются неизменными.

1 лайк

Я сделал с помощью drawPixel. Это ужас. Он не моргает, но отрисовка такая будто просто фигура выплывает из под верхнего края. Так же пытался линиями горизонтальными и вертикальными - моргает белым при обновлении и какие то глитчи мосентами появляются. Пытался использовать canvas и drawPixel - не получается с выводом его на дисплей.

Ну, вертикальными - это без толку, т.к. часть рисунка, которую надо обновить, представляет собой набор сдвинутых друг относительно друга горизонтальных линий одинаковой длины. Если движок сдвигается вправо, линии также рисуются от текущего положения вправо основным цветом, а если влево - рисуются влево цветом фона.
И моргать ничего не должно. Если моргает - это ошибка.

1 лайк

Нет, спрайт только один - левый. Его можно двигать в обе стороны. А правый - это как раз не желаемый ТС “полумесяц”.

1 лайк

Я пытался сделать без этих скруглений линиями. То же самое. Попробую еще раз и если не выйдет покажу код.

Это похоже на правду? На видео видно, что мерцаний нет, но есть “просадка” кадров. Обновление каждые 100 мс.

//указатель
const unsigned char cursor[] PROGMEM= {
  0x18, 0x7e, 0x7e, 0xff, 0xff, 0x7e, 0x7e, 0x18
};

//отрисовка указателя по процентам заполнения
int spriteX = BAR_X + ((BAR_WIDTH-8) * percent) / 100;
int spriteY = BAR_Y;
tft.drawBitmap(spriteX, spriteY, cursor, 8, 8, COLOR_BAR);

https://www.youtube.com/shorts/J2dIWF20W5o

На редкость неинформативное сообщение.

  1. Не приведен полный код, что имеет целый ряд следствий.
  2. Следствие 1 - код невозможно откомпилировать и запустить.
  3. Следствие 1 - неизвестны типы применяемых переменных.
  4. Следствие 1 - неизвестен шаг перемещения “градусника” percent.
  5. На видео приведено движение “градусника” только в одну сторону и с постоянным шагом. А что будет, если двигаться в другую строну? А если с другим шагом?
  6. Не приведен хронометраж. Сколько времени требуется, чтобы сдвинуть “градусник” на 1 пиксель? А на 5? А на 20? А на 80? А в другую сторону на те же самые интервалы?
  7. В сообщении 9 у функции tft.drawBitmap 7 параметров, а в Вашем сообщении 16 - только 6.

Да, Вы привели достаточно подробную информацию о том, что именно использовали. Не хватает только разрешения дисплея. Но вот лично я не пользуюсь стандартными библиотеками. Всегда пишу сам. Именно из соображения скорости работы. Поэтому знаю возможности стандартных библиотек очень поверхностно. Не взыщите.

Еще: Вот как раз только что принес с почты новые дисплеи, которые сейчас буду проверять. У Вас, как я понял, дисплей подключен по SPI. Из полученных у меня тоже один такой есть, 1.8" 128х160, так что можно будет заодно проверить и Ваш код.

Да, вы правы это 1.8 160x128 st7735, подключен по spi.

для st7735, вроде была библиотека Fast_SPI
Но вообще на нано не разгуляешься. Возьмите контроллер побыстрее.

Сделал снова при помощи Bitmap. Удивительно, но теперь нет просадки в кадрах. Мерцаний дисплея тоже нет. Но еще не все сделал. Вот код

#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>
#include <SPI.h>
//#include "SFRegular10pt7b.h"


#define TFT_CS        10
#define TFT_RST        9 
#define TFT_DC         8
Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);

// Размеры дисплея
#define TFT_WIDTH  160
#define TFT_HEIGHT 128

// Размеры прогресс бара
#define BAR_WIDTH  140
#define BAR_HEIGHT 14
#define BAR_X      (TFT_WIDTH - BAR_WIDTH) / 2
#define BAR_Y      (TFT_HEIGHT - BAR_HEIGHT) / 2

// Цвета
//#define COLOR_BACKGROUND 0x1BA6
//#define COLOR_BAR        0x0607
#define COLOR_BACKGROUND 0x937C
#define COLOR_BAR        0x4A17

// Последнее значение прогресса
int last_level = BAR_X;
bool up = true;

// Указатели прогресса
const unsigned char cursor[] PROGMEM= {
  0x07, 0x80, 0x1f, 0xe0, 0x3f, 0xf0, 0x7f, 0xf8, 
  0x7f, 0xf8, 0xff, 0xfc, 0xff, 0xfc, 0xff, 0xfc, 
  0xff, 0xfc, 0x7f, 0xf8, 0x7f, 0xf8, 0x3f, 0xf0, 
  0x1f, 0xe0, 0x07, 0x80
};
const unsigned char cursor_back[] PROGMEM= {
  0x00, 0x80, 0x00, 0x20, 0x00, 0x10, 0x00, 0x08, 
  0x00, 0x08, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 
  0x00, 0x04, 0x00, 0x08, 0x00, 0x08, 0x00, 0x10, 
  0x00, 0x20, 0x00, 0x80
};

// Функция роста прогресс бара
void drawProgressBarUP(int level) {
  for(int sprite_x = last_level; sprite_x <= level; sprite_x++){
    tft.drawBitmap(sprite_x, BAR_Y, cursor_back, 14, 14, COLOR_BAR);
  }
  if(last_level == BAR_X) tft.drawBitmap(BAR_X, BAR_Y, cursor, 14, 14, COLOR_BAR);
  last_level = level;
}

// Функция падания прогресс бара
void drawProgressBarDown (int level){
  for(int sprite_x = last_level; sprite_x >= level; sprite_x--){
    tft.drawBitmap(sprite_x, BAR_Y, cursor_back, 14, 14, COLOR_BACKGROUND);
  }
  if(level == BAR_X) tft.drawBitmap(BAR_X, BAR_Y, cursor, 14, 14, COLOR_BACKGROUND);
  last_level = level;
}

// Обработка значения уровня заполнения бара
void drawProgressBar(int level){
  level = constrain(level, BAR_X, BAR_WIDTH-BAR_X);
  if(level > last_level){
    drawProgressBarUP(level);
  }
  else{
    drawProgressBarDown(level);
  }
}

void setup() {
  tft.initR(INITR_BLACKTAB);   // Инициализация дисплея
  tft.setRotation(3);         // Поворот экрана
  tft.fillScreen(ST7735_BLACK); // Заливка экрана черным цветом
  tft.drawBitmap(BAR_WIDTH/2, BAR_Y, cursor, 14, 14, COLOR_BACKGROUND);
  for(int i = BAR_WIDTH/2; i <= BAR_WIDTH-BAR_X; i++){
    tft.drawBitmap(i, BAR_Y, cursor, 14, 14, COLOR_BACKGROUND); // Рисуем пустой пргресс бар
    tft.drawBitmap(BAR_WIDTH-i, BAR_Y, cursor, 14, 14, COLOR_BACKGROUND);
  }
}

void loop() {
  /*int level = random(0,BAR_WIDTH);
  drawProgressBar(level);
  delay(500);*/
  if (up){
    if(last_level < BAR_WIDTH-BAR_X){
      drawProgressBar(last_level+1);
    }
    else up = !up;
  }
  else{
    if(last_level > BAR_X){
      drawProgressBar(last_level-1);
    }
    else up = !up;
  }
  delay(50);
}