ILI9488 3,95 дюйма, сенсорный экран


Масштабируемость… Буква получается раза с 10, всё таки шаблон сила.

2 лайка

Красавец! В текст уже пробовал «собирать»?

Красиво ! Но ТОЛСТЫЙ шрифт таким подходом не сделать …

Нет, пока всё на начальном этапе - сканер букв:

Спойлер
//СКАНЕР БУКВ
#include <SPI.h>          
#include <TFT_eSPI.h>       // Hardware-specific library
TFT_eSPI tft = TFT_eSPI();  // Invoke custom library
#include "ris_.h"//файл хранения массивов букв

uint16_t color=tft.color565(0,0,0);
int xx=0;int yy=21;//
byte flag=0;//
long Y=0;//

int xr=200,yr=150;//переменные регулирующие внешний вид шаблона под буквы
int a=80;// 
float k1=0.5;float k2=1.1; float k3=0.15;//

void setup(){
  Serial.begin(9600);
  tft.init();
  tft.setRotation(3);               // Переводим дисплей в альбомную ориентацию
 tft.fillScreen(color);panel();//начальная отрисовка зон экрана
 
 //пример вывода буквы, после просмотра нажмите кнопку очистки
   int dl=sizeof(buk_A)/sizeof(buk_A[0]);
  for(int q=0;q<15;q++){ 
   ris_bukvu(50+q*26,50,buk_A,dl,0.35);
  }
  ris_bukvu(xr,yr,buk_A,dl,1.00);
  //
 }
 
void loop()
{
  if(millis()-Y>150&&flag!=3){flag=1;}// условие прерывающие рисование серии отрезков после паузы в 0,15 секунды (не касаемся стилусом экрана)
  uint16_t x, y;                         // Переменные для работы с координатами нажатий
 
  if (tft.getTouch(&x, &y)) {
    Y=millis();//
   if((x!=-1) && (y!=-1))          // Если обе координаты в положительном диапазоне (т.е. если есть нажатие) 
    {
      x += 0 ;                      // Корректируем координату с учетом калибровочных данных
      y += 5;                       // Корректируем координату с учетом калибровочных данных
      x=480-x*0.97;
      y=y*1.00;
   // 
     // 
       
      if(y<20&&x>320&&x<480){  tft.fillRect(0,20,480,320,tft.color565(0,0,0) );xx=0,yy=21;flag=0;panel();Serial.println('\0');}//стираем рисунок
       if(x>=xr+k1*a-a&&y>=yr&&x<xr+a&&y<yr+1.5*k2*a){
      if(y>20&&flag==2){tft.drawLine(x, y, xx, yy,tft.color565(255,255,255));Serial.print(x-xr);Serial.print(',');Serial.print(y-yr);Serial.print(','); xx=x;yy=y;}//рисуем отрезок выбранным цветом
      if(y>20&&flag==1){flag=2;xx=x;yy=y;Serial.print(666);Serial.print(',');Serial.print(666);Serial.print(',');}//начало рисования новой серии отрезков
        }
      
     //   
 
   //   
      }
  }
   delay(20);//
  
}
////////////////////
void panel(){

 tft.fillRect(320,0,160,20,tft.color565(255,0,0));//кнопка очистки экрана
 //рамка-шаблон под буквы
 uint16_t color_1=tft.color565(127,127,127);
 tft.drawLine(xr, yr, xr+a, yr,color_1);
 tft.drawLine(xr+a, yr, xr+k1*a, yr+k2*a,color_1);
 tft.drawLine(xr+k1*a, yr+k2*a, xr+k1*a-a, yr+k2*a,color_1);
 tft.drawLine(xr+k1*a-a, yr+k2*a,xr, yr,color_1);
  
 tft.drawLine(xr+k1*a/2, yr+k2*a/2, xr+k1*a/2+a/2,yr+k2*a/2 ,color_1);
 tft.drawLine(xr+1.5*k1*a-a, yr+1.5*k2*a,xr+k1*a/2, yr+k2*a/2,color_1);
 tft.drawLine(xr+1.5*k1*a-a, yr+1.5*k2*a,xr+1.5*k1*a-a/2, yr+1.5*k2*a,color_1);
 tft.drawLine(xr+k1*a/2+a/2,yr+k2*a/2,xr+1.5*k1*a-a/2, yr+1.5*k2*a,color_1);

 tft.drawLine(xr+(k1+k3)*a, yr+(k2-k3)*a, xr+k1*a-a, yr+(k2-k3)*a,tft.color565(0,200,0));
tft.fillCircle(xr, yr,2,tft.color565(0,200,0));
 
}
///////////////////
void ris_bukvu(int Xb,int Yb,const int *massiv, int DL,float M){
for(int i=0;i<DL-2;i=i+2){
 if(massiv[i+2]!=666){ 
tft.drawLine(Xb+M*massiv[i],Yb+M*massiv[i+1] ,Xb+M*massiv[i+2] ,Yb+M*massiv[i+3] ,tft.color565(255,255,255));    
}
else{i=i+2;}
}
}
///////////////////
Спойлер
const int buk_A[] = { //
-32,80,-31,81,-29,84,-27,88,-22,89,-14,85,-6,79,2,71,10,60,17,46,22,32,28,22,36,12,43,7,44,6,47,7,47,14,46,22,
42,35,35,49,29,64,25,74,23,82,21,85,21,87,20,91,20,90,666,666,25,57,24,50,17,43,7,37,1,39,-3,41,-8,47,-10,55,-9,66,-6,
75,2,81,10,83,22,85,34,83,45,79,49,75,50,75,51,75,51,75,
};

И демонстрация первой десятки букв:

Спойлер
//ПЕЧАТЬ БУКВ
#include <SPI.h>          
#include <TFT_eSPI.h>       // Hardware-specific library
TFT_eSPI tft = TFT_eSPI();  // Invoke custom library
#include "ris_.h"//файл хранения массивов букв

uint16_t color=tft.color565(0,0,0);
void setup(){
 tft.init();
 tft.setRotation(3);     // Переводим дисплей в альбомную ориентацию
 tft.fillScreen(color);
 }
 
void loop()
{
//пример вывода буквы в разном размере
    for(float w=0.1;w<=0.6;w=w+0.05){  
  for(int q=0;q<10;q++){ 
   ris_bukvu(20+q*80*w,20,bukvi[q%10].bitmap,dlina_bukv[q%10],w);
  }
  delay(3000);tft.fillScreen(color);
   }
 //  
 
}
////////////////////
void ris_bukvu(int Xb,int Yb,const int *massiv, int DL,float M){
for(int i=0;i<DL-2;i=i+2){
 if(massiv[i+2]!=666){ 
tft.drawLine(Xb+M*massiv[i],Yb+M*massiv[i+1] ,Xb+M*massiv[i+2] ,Yb+M*massiv[i+3] ,tft.color565(255,255,255));    
}
else{i=i+2;}
}
}
///////////////////
Спойлер
const int buk_0[] = { // А
-32,80,-31,81,-29,84,-27,88,-22,89,-14,85,-6,79,2,71,10,60,17,46,22,32,28,22,36,12,43,7,44,6,47,7,47,14,46,22,
42,35,35,49,29,64,25,74,23,82,21,85,21,87,20,91,20,90,666,666,25,57,24,50,17,43,7,37,1,39,-3,41,-8,47,-10,55,-9,66,-6,
75,2,81,10,83,22,85,34,83,45,79,49,75,50,75,51,75,51,75,
};
const int buk_1[] = { // Б
-33,80,-33,79,-32,81,-31,83,-28,85,-22,85,-14,82,-10,75,-3,67,1,60,9,46,12,37,17,27,21,20,23,16,24,14,24,13,24,
13,666,666,4,38,0,36,-4,31,-5,26,-4,21,-1,14,8,10,22,7,43,7,64,5,75,3,72,4,666,666,14,45,20,40,24,37,30,35,35,37,39,41,
43,47,45,54,46,60,44,65,42,73,38,77,34,83,30,88,25,90,20,91,15,91,11,88,7,86,7,86,8,83,15,80,23,78,31,78,40,76,44,78,43,77,44,78,
};
const int buk_2[] = { // В
-34,78,-33,78,-32,80,-28,85,-23,83,-14,72,-1,51,25,2,26,0,666,666,-1,26,14,15,28,8,42,7,49,13,45,26,34,36,15,46,12,48,23,42,
31,41,38,46,42,56,38,68,31,77,20,86,9,91,-3,88,-7,79,-2,73,9,68,21,65,35,69,45,75,45,76,44,76,  
};
const int buk_3[] = { // Г
-33,80,-33,79,-32,81,-31,83,-28,85,-22,85,-14,82,-10,75,-3,67,1,60,9,46,12,37,17,27,21,20,23,16,24,14,24,13,24,
13,666,666,4,38,0,36,-4,31,-5,26,-4,21,-1,14,8,10,22,7,43,7,64,5,75,3,72,4,  
};
const int buk_4[] = { // Д
63,8,61,7,56,6,54,6,51,9,45,17,38,25,33,34,25,45,21,53,12,63,6,71,-3,77,-9,82,-15,86,-22,88,-27,87,-31,85,-32,78,
-30,74,-25,72,-17,71,-11,72,-1,77,6,82,17,84,24,85,35,83,43,78,50,69,53,60,53,50,53,39,44,29,29,18,16,15,3,16,-7,
21,-7,26,-7,39,8,48,  
};
const int buk_5[] = { // Е
60,17,55,12,45,7,33,8,22,14,13,23,10,29,14,35,22,38,32,39,40,39,40,37,31,32,21,31,5,33,-11,39,-20,47,-25,56,-28,
67,-27,75,-24,85,-16,90,-4,94,11,92,23,88,38,82,43,79,43,79,43,79,44,79,666,666,-35,79,-33,78,-29,74,-30,75,-29,73,  
};
const int buk_6[] = { // Ж
-2,15,-1,11,2,5,9,2,13,0,15,2,17,8,18,17,15,29,11,42,7,51,2,61,-2,73,-8,78,-11,82,-14,86,-17,88,-21,91,-22,90,-28,85,-31,80,
-33,75,666,666,70,5,73,1,60,1,53,7,45,17,36,31,31,41,26,50,22,56,20,66,20,72,19,75,19,80,19,83,21,86,23,87,27,84,35,83,43,80,48,
76,46,76,666,666,31,15,25,28,22,39,19,50,15,61,12,71,10,78,7,84,7,86,8,85,666,666,-8,67,-8,68,-5,64,6,56,31,42,47,31,46,32,44,33,  
};
const int buk_7[] = { // З
13,10,20,6,26,4,36,4,41,6,43,11,43,15,38,22,30,29,20,35,13,36,12,36,19,33,28,31,37,33,42,37,47,43,51,49,52,54,51,
58,49,65,48,68,45,74,42,79,33,82,21,88,13,89,4,89,-6,90,-15,88,-25,84,-32,80,-36,79,-36,79,-36,79,
};
const int buk_8[] = { // И
3,7,9,4,12,6,12,10,8,20,3,29,-3,38,-8,47,-11,55,-16,62,-18,68,-19,76,-18,80,-13,81,-6,80,1,78,10,70,17,63,25,51,33,37,42,26,48,
18,52,9,53,6,53,6,53,6,50,9,45,18,40,28,35,38,30,49,26,58,24,64,23,70,24,74,24,79,25,83,27,83,30,83,34,85,38,84,44,80,45,80,45,
79,46,78,666,666,-35,77,-31,76,-24,73,-18,67,-15,65,    
};
const int buk_9[] = { // Й
3,7,9,4,12,6,12,10,8,20,3,29,-3,38,-8,47,-11,55,-16,62,-18,68,-19,76,-18,80,-13,81,-6,80,1,78,10,70,17,63,25,51,33,37,42,26,48,
18,52,9,53,6,53,6,53,6,50,9,45,18,40,28,35,38,30,49,26,58,24,64,23,70,24,74,24,79,25,83,27,83,30,83,34,85,38,84,44,80,45,80,45,
79,46,78,666,666,-35,77,-31,76,-24,73,-18,67,-15,65,666,666,22,-1,23,2,30,2,35,0,42,-7,  
};
/////////////////////////
const struct {//структура массивов букв алфавита
    const int *bitmap;
 }
  bukvi[]={buk_0,buk_1,buk_2,buk_3,buk_4,buk_5,buk_6,buk_7,buk_8,buk_9,};  
  
 const int dlina_bukv[]={sizeof(buk_0)/sizeof(buk_0[0]),sizeof(buk_1)/sizeof(buk_1[0]),sizeof(buk_2)/sizeof(buk_2[0]),sizeof(buk_3)/sizeof(buk_3[0]),
 sizeof(buk_4)/sizeof(buk_4[0]),sizeof(buk_5)/sizeof(buk_5[0]),sizeof(buk_6)/sizeof(buk_6[0]),sizeof(buk_7)/sizeof(buk_7[0]),sizeof(buk_8)/sizeof(buk_8[0]),sizeof(buk_9)/sizeof(buk_9[0]),};// массив длин массивов букв алфавита
/////////////////////////














1 лайк

Можно, если шаблон под букву увеличить и рисовать в два, три прохода, но тут важна крепость руки, у меня она рисует не очень.

1 лайк

Лилик, я сьерничаю, может на катушеу тебе скинутся?)))

2 лайка

Вы не прочитали инфу по моей ссылке выше …

Ссылки не вижу.

Руку она не исправит :slight_smile:
Есть наверное некоторый лечебный эффект раз продаётся катушка.

Ещё бы! Материальный! Как минимум )))

1 лайк

Повторю ссылку.
Может тут что то почерпнёте - Растеризация векторных шрифтов / Хабр (habr.com)

Может. Хранились бы они в виде координат отрезков…

Спойлер
//ПЕЧАТЬ БУКВ
#include <SPI.h>          
#include <TFT_eSPI.h>       // Hardware-specific library
TFT_eSPI tft = TFT_eSPI();  // Invoke custom library
#include "ris_.h"//файл хранения массивов букв

uint16_t color=tft.color565(0,0,0);
void setup(){
 tft.init();
 tft.setRotation(3);     // Переводим дисплей в альбомную ориентацию
 tft.fillScreen(color);
 ris_str(20,20,"БАБА ДЕД БАЗА ВАЗА ЕЖИ ГАЗ ЖАБА ДЖАВА ",0.15);//
 ris_str(20,50,"БАБА ДЕД БАЗА ВАЗА ЕЖИ",0.25);//
 ris_str(20,90,"БАБА ДЕД БАЗА ВАЗА",0.30);//
 ris_str(20,130,"БАБА ДЕД БАЗА",0.45);//
 ris_str(20,180,"БАБА ДЕД",0.55);//
 ris_str(20,240,"ДЖАВА ЗА",0.75);//
 }
 
void loop()
{
  /*
//пример вывода буквы в разном размере
    for(float w=0.1;w<=0.6;w=w+0.05){  
  for(int q=0;q<10;q++){ 
   ris_bukvu(20+q*80*w,20,bukvi[q%10].bitmap,dlina_bukv[q%10],w);
  }
  delay(3000);tft.fillScreen(color);
   }
 //  
 */
}
////////////////////
void ris_bukvu(int Xb,int Yb,const int *massiv, int DL,float M){
for(int i=0;i<DL-2;i=i+2){
 if(massiv[i+2]!=666){ 
tft.drawLine(Xb+M*massiv[i],Yb+M*massiv[i+1] ,Xb+M*massiv[i+2] ,Yb+M*massiv[i+3] ,tft.color565(255,255,255));    
}
else{i=i+2;}
}
}
///////////////////
// Функция рисования букв строки 
String ris_str(int x,int y,String source,float Ms)
{
  int ii,k;
 // String target;
  unsigned char n;
  char m[2] = { '0', '\0' };

  k = source.length(); ii = 0;

  while (ii < k) {
    n = source[ii]; ii++;

    if (n >= 0xC0) {
      switch (n) {
        case 0xD0: {
          n = source[ii]; ii++;
          if (n == 0x81) { n = 0xA8; break; }
          if (n >= 0x90 && n <= 0xBF) n = n + 0x30;
          break;
        }
        case 0xD1: {
          n = source[ii]; ii++;
          if (n == 0x91) { n = 0xB8; break; }
          if (n >= 0x80 && n <= 0x8F) n = n + 0x70;
          break;
        }
      }
    }
    m[0] = n;// target = target + String(m);
    //
    if(n>=192&&n<=255){
   ris_bukvu(x,y,bukvi[n-192].bitmap,dlina_bukv[n-192],Ms);
   x=x+80*Ms;
    } 
    if(n==32){x=x+80*Ms;}
    //
  }
//return target;
}
//////////////////////
1 лайк

Подчерпнул:

…максимальное использование ОЗУ — около 300 килобайт…

1 лайк

а мне не нравится, у них сглаживание при увеличении шрифта какое то мутное получается.
Я в свое время более четкое изображение получал
https://arduino.ru/forum/otvlechennye-temy/programmirovanie-32-kh-razryadnykh-mk?page=21#comment-631297

Это категорически неверный подход.
Потому как подразумевает “отрезков прямой”.
А вместо отрезков прямой должны быть фрагменты гладких кривых.

Не видал…
…точнее не читал.
20 из 60 с лишним букв. Отсутствие понимания единого начертания сказывается.


Вот… дописывать под настроение буду.

Спойлер
//ПЕЧАТЬ БУКВ И СЛОВ
#include <SPI.h>          
#include <TFT_eSPI.h>       // Hardware-specific library
TFT_eSPI tft = TFT_eSPI();  // Invoke custom library
#include "ris_.h"//файл хранения массивов букв

uint16_t color=tft.color565(0,0,0);
void setup(){
 tft.init();
 tft.setRotation(3);     // Переводим дисплей в альбомную ориентацию
 tft.fillScreen(color);
 /*
 //пример вывода слов
 ris_str(20,20,"БАБА ДЕД БАЗА ВАЗА ЕЖИ ГАЗ ЖАБА ДЖАВА ",0.15);//
 ris_str(20,50,"БАБА ДЕД БАЗА ВАЗА ЕЖИ",0.25);//
 ris_str(20,90,"БАБА ДЕД БАЗА ВАЗА",0.30);//
 ris_str(20,130,"БАБА ДЕД БАЗА",0.45);//
/ ris_str(20,180,"БАБА ДЕД",0.55);//
 ris_str(20,240,"ДЖАВА ЗА",0.75);//
//пример вывода слов
 ris_str(20,10,"ВЕЗДЕ ФИЛИН РОМАН СОК ПИЛ",0.23);//
 ris_str(20,40,"ГДЕ МОГ И ГДЕ НЕ МОГ ТОЖЕ",0.23);//
 ris_str(20,70,"КАК БУДТО ЖАЖДА ЕГО ГНАЛА",0.23);//
 ris_str(20,100,"НА СЕВЕР И ВОСТОК И ЗАПАД",0.23);//
 ris_str(20,130,"ОЗЕРО И РЕКА ЖАЖДУ УТОЛИЛО",0.23);//
 ris_str(20,160,"НО НЕНАДОЛГО СОН ПОБОРОЛ ",0.23);//
 ris_str(20,190,"НЕПОГОДА СВОЕ БЕРЕТ УТРОМ",0.23);//
 ris_str(20,220,"ЗАКАТ РАССВЕТ РОСА ТРАВА",0.23);//
 ris_str(20,250,"У ДОМА МОЕГО И ТВОЕГО",0.23);//
 ris_str(20,280,"НЕПОГОДА СВОЕ БЕРЕТ УТРОМ",0.23);//
 //
 */
 //пример вывода слов
 ris_str(0,0,"Петух Тамада Ухо Глаз Нос Весна",0.30);//
 ris_str(0,40,"Алгебра Утка Филин Жених Провод",0.30);//
 ris_str(0,80,"Математика Настроение Домики",0.30);//
 ris_str(0,120,"Собака Котик Енот Обормот Лом",0.30);//
 ris_str(0,160,"Дозор Август Борозда Винтовка",0.30);//
 ris_str(0,200,"Кино Огород Страна Волос Ров",0.30);//
 ris_str(0,240,"Барабан Слон Каре Обормот Сон",0.30);//
 ris_str(0,280,"Вера Знание Расклад Ремесло ",0.30);//
// delay(3000);tft.fillScreen(color);
 }
 
void loop()
{
/*  
//пример вывода букв в разном размере
    for(float w=0.1;w<=0.6;w=w+0.05){  
  for(int q=0;q<10;q++){ 
   ris_bukvu(20+q*80*w,20,bukvi[q%10].bitmap,dlina_bukv[q%10],w);
  }
  delay(3000);tft.fillScreen(color);
   }
 //  
 */
}
////////////////////
void ris_bukvu(int Xb,int Yb,const int *massiv, int DL,float M){
for(int i=0;i<DL-2;i=i+2){
 if(massiv[i+2]!=666){ 
tft.drawLine(Xb+M*massiv[i],Yb+M*massiv[i+1] ,Xb+M*massiv[i+2] ,Yb+M*massiv[i+3] ,tft.color565(255,255,255));    
}
else{i=i+2;}
}
}
///////////////////
// Функция рисования букв строки 
String ris_str(int x,int y,String source,float Ms)
{
  int ii,k;
 // String target;
  unsigned char n;
  char m[2] = { '0', '\0' };

  k = source.length(); ii = 0;

  while (ii < k) {
    n = source[ii]; ii++;

    if (n >= 0xC0) {
      switch (n) {
        case 0xD0: {
          n = source[ii]; ii++;
          if (n == 0x81) { n = 0xA8; break; }
          if (n >= 0x90 && n <= 0xBF) n = n + 0x30;
          break;
        }
        case 0xD1: {
          n = source[ii]; ii++;
          if (n == 0x91) { n = 0xB8; break; }
          if (n >= 0x80 && n <= 0x8F) n = n + 0x70;
          break;
        }
      }
    }
    m[0] = n;// target = target + String(m);
    //
   if(n>=192&&n<=255){
   if(n<224){x=x+80*Ms;}else{x=x+40*Ms;}   
   ris_bukvu(x,y,bukvi[n-192].bitmap,dlina_bukv[n-192],Ms);
   } 
    if(n==32){x=x+40*Ms;}
    //
  }
//return target;
}
//////////////////////
Спойлер
const int buk_0[] = { // А
-32,80,-31,81,-29,84,-27,88,-22,89,-14,85,-6,79,2,71,10,60,17,46,22,32,28,22,36,12,43,7,44,6,47,7,47,14,46,22,
42,35,35,49,29,64,25,74,23,82,21,85,21,87,20,91,20,90,666,666,25,57,24,50,17,43,7,37,1,39,-3,41,-8,47,-10,55,-9,66,-6,
75,2,81,10,83,22,85,34,83,45,79,49,75,50,75,51,75,51,75,
};
const int buk_1[] = { // Б
-33,80,-33,79,-32,81,-31,83,-28,85,-22,85,-14,82,-10,75,-3,67,1,60,9,46,12,37,17,27,21,20,23,16,24,14,24,13,24,
13,666,666,4,38,0,36,-4,31,-5,26,-4,21,-1,14,8,10,22,7,43,7,64,5,75,3,72,4,666,666,14,45,20,40,24,37,30,35,35,37,39,41,
43,47,45,54,46,60,44,65,42,73,38,77,34,83,30,88,25,90,20,91,15,91,11,88,7,86,7,86,8,83,15,80,23,78,31,78,40,76,44,78,43,77,44,78,
};
const int buk_2[] = { // В
-34,78,-33,78,-32,80,-28,85,-23,83,-14,72,-1,51,25,2,26,0,666,666,-1,26,14,15,28,8,42,7,49,13,45,26,34,36,15,46,12,48,23,42,
31,41,38,46,42,56,38,68,31,77,20,86,9,91,-3,88,-7,79,-2,73,9,68,21,65,35,69,45,75,45,76,44,76,  
};
const int buk_3[] = { // Г
-33,77,-31,80,-29,84,-23,88,-11,80,2,66,21,35,29,17,30,15,30,15,666,666,-7,38,-10,34,-9,27,-8,24,0,20,13,15,35,10,56,6,68,2,
69,1,70,1,666,666,8,87,8,86,11,84,21,81,31,78,44,74,45,74,45,74, 
};
const int buk_4[] = { // Д
63,8,61,7,56,6,54,6,51,9,45,17,38,25,33,34,25,45,21,53,12,63,6,71,-3,77,-9,82,-15,86,-22,88,-27,87,-31,85,-32,78,
-30,74,-25,72,-17,71,-11,72,-1,77,6,82,17,84,24,85,35,83,43,78,50,69,53,60,53,50,53,39,44,29,29,18,16,15,3,16,-7,
21,-7,26,-7,39,8,48,  
};
const int buk_5[] = { // Е
60,17,55,12,45,7,33,8,22,14,13,23,10,29,14,35,22,38,32,39,40,39,40,37,31,32,21,31,5,33,-11,39,-20,47,-25,56,-28,
67,-27,75,-24,85,-16,90,-4,94,11,92,23,88,38,82,43,79,43,79,43,79,44,79,666,666,-35,79,-33,78,-29,74,-30,75,-29,73,  
};
const int buk_6[] = { // Ж
-2,15,-1,11,2,5,9,2,13,0,15,2,17,8,18,17,15,29,11,42,7,51,2,61,-2,73,-8,78,-11,82,-14,86,-17,88,-21,91,-22,90,-28,85,-31,80,
-33,75,666,666,70,5,73,1,60,1,53,7,45,17,36,31,31,41,26,50,22,56,20,66,20,72,19,75,19,80,19,83,21,86,23,87,27,84,35,83,43,80,48,
76,46,76,666,666,31,15,25,28,22,39,19,50,15,61,12,71,10,78,7,84,7,86,8,85,666,666,-8,67,-8,68,-5,64,6,56,31,42,47,31,46,32,44,33,  
};
const int buk_7[] = { // З
13,10,20,6,26,4,36,4,41,6,43,11,43,15,38,22,30,29,20,35,13,36,12,36,19,33,28,31,37,33,42,37,47,43,51,49,52,54,51,
58,49,65,48,68,45,74,42,79,33,82,21,88,13,89,4,89,-6,90,-15,88,-25,84,-32,80,-36,79,-36,79,-36,79,
};
const int buk_8[] = { // И
3,7,9,4,12,6,12,10,8,20,3,29,-3,38,-8,47,-11,55,-16,62,-18,68,-19,76,-18,80,-13,81,-6,80,1,78,10,70,17,63,25,51,33,37,42,26,48,
18,52,9,53,6,53,6,53,6,50,9,45,18,40,28,35,38,30,49,26,58,24,64,23,70,24,74,24,79,25,83,27,83,30,83,34,85,38,84,44,80,45,80,45,
79,46,78,666,666,-35,77,-31,76,-24,73,-18,67,-15,65,    
};
const int buk_9[] = { // Й
3,7,9,4,12,6,12,10,8,20,3,29,-3,38,-8,47,-11,55,-16,62,-18,68,-19,76,-18,80,-13,81,-6,80,1,78,10,70,17,63,25,51,33,37,42,26,48,
18,52,9,53,6,53,6,53,6,50,9,45,18,40,28,35,38,30,49,26,58,24,64,23,70,24,74,24,79,25,83,27,83,30,83,34,85,38,84,44,80,45,80,45,
79,46,78,666,666,-35,77,-31,76,-24,73,-18,67,-15,65,666,666,22,-1,23,2,30,2,35,0,42,-7,  
};
const int buk_10[] = { // К
-33,79,-32,82,-29,86,-22,85,-14,80,-4,62,4,43,13,23,19,11,24,4,26,3,666,666,8,48,17,33,31,20,45,10,58,5,62,5,62,10,
666,666,14,40,19,40,22,42,24,51,22,58,19,68,16,75,17,81,19,86,23,84,27,83,35,81,43,76,43,76, 
};
const int buk_11[] = { // Л
-31,80,-31,81,-31,81,-30,82,-26,86,-21,86,-12,83,-8,78,-3,71,3,59,12,45,19,33,26,18,32,12,37,5,43,3,45,3,49,5,
51,7,52,13,51,18,49,26,46,33,43,39,41,47,36,56,33,65,30,71,28,77,26,81,27,83,28,84,31,86,35,85,41,80,48,76,47,75, 
};
const int buk_12[] = { // М
-32,78,-33,79,-34,87,-29,91,-15,83,-3,65,11,42,28,13,30,6,27,10,24,17,19,28,9,48,4,65,1,76,0,82,2,83,11,77,30,
58,53,23,68,2,68,0,64,6,63,11,53,27,45,45,34,62,27,75,25,81,24,85,26,86,33,84,44,78,45,78, 
};
const int buk_13[] = { // Н
-32,80,-34,82,-32,88,-29,91,-23,88,-15,75,-5,58,22,5,22,1,22,1,22,3,666,666,57,8,52,20,46,31,40,45,33,58,29,66,
26,77,22,86,24,87,29,83,41,78,47,75,46,74,666,666,-9,58,4,55,31,45,43,42,48,39,50,38,666,666,-1,18,8,11,21,0,21,1, 
};
const int buk_14[] = { // О
30,4,24,7,18,10,8,19,1,26,-7,37,-15,54,-20,64,-20,73,-16,80,-8,84,8,81,19,76,27,68,35,58,44,45,52,31,54,19,54,10,
51,4,43,0,17,8,666,666,8,84,10,84,22,82,35,78,44,77,46,76,666,666,-35,78,-33,75,-25,70,-21,65,-21,63, 
};
const int buk_15[] = { // П
-32,78,-35,81,-36,85,-33,88,-27,88,-15,76,-5,59,14,30,15,25,14,24,14,25,666,666,49,24,38,39,27,58,17,79,13,83,13,84,
13,84,13,84,13,84,14,87,22,87,35,83,45,80,50,79,46,79,666,666,0,37,-7,35,-10,32,-9,29,-3,25,6,21,24,17,48,12,69,6,78,1,76,3, 
};
const int buk_16[] = { // Р
0,91,0,90,8,88,27,80,41,77,43,77,43,77,44,77,666,666,-36,80,-34,81,-30,85,-23,88,-10,76,-1,57,8,31,11,20,11,19,12,18,11,18,
666,666,-11,39,-6,28,2,15,9,8,21,5,33,4,44,9,53,16,55,25,53,38,49,46,41,53,28,58,10,62,4,59,6,58, 
};
const int buk_17[] = { // С
55,29,58,24,60,17,58,11,51,5,44,4,34,6,21,7,14,12,4,20,-7,30,-16,41,-25,53,-29,63,-31,70,-30,79,-24,86,-14,91,3,87,20,83,
35,76,44,74,43,74,45,78, 
};
const int buk_18[] = { // Т
-31,81,-34,82,-35,83,-31,91,-25,90,-13,83,-3,68,11,39,12,34,12,33,666,666,-13,53,-16,48,-17,45,-11,39,3,32,25,23,58,9,67,
4,68,4,66,4,666,666,51,29,43,42,33,58,25,73,22,79,21,85,22,85,26,82,45,78,666,666,21,51,6,84,1,96,1,96, 
};
const int buk_19[] = { // У
-36,80,-37,79,-36,80,-34,81,-28,83,-19,84,-7,83,7,75,17,71,29,59,44,43,60,25,69,10,73,4,72,3,73,3,72,5,71,6,666,666,11,7,
12,8,8,14,2,22,-2,31,-3,41,0,47,10,50,25,50,36,47,37,46,38,47,37,47,37,47,37,47,666,666,15,86,13,88,13,86,13,86,15,87,21,85,30,80,42,78,49,78,48,77,48,77,48,77, 
};
const int buk_20[] = { // Ф
 51,5,40,7,27,14,14,20,-1,33,-11,42,-17,49,-22,59,-22,66,-11,66,8,60,24,54,44,43,58,31,66,20,71,9,65,5,54,5,666,666,-34,80,-30,83,
 -23,88,-14,90,-5,83,4,69,14,49,27,20,36,2,38,1,666,666,11,91,11,91,16,88,31,80,43,79,46,77,46,78,45,78,
};
const int buk_21[] = { // Х
 
};
const int buk_22[] = { // Ц
 
};
const int buk_23[] = { // Ч
 
};
const int buk_24[] = { // Ш
 
};
const int buk_25[] = { // Щ
 
};
const int buk_26[] = { // Ъ
 
};
const int buk_27[] = { // Ы
 
};
const int buk_28[] = { // Ь
 
};
const int buk_29[] = { // Э
 
};
const int buk_30[] = { // Ю
 
};
const int buk_31[] = { // Я
 
};
/////////////////////////////////////////
const int buk_32[] = { // а
46,79,43,80,40,84,37,86,36,86,34,86,32,84,31,81,32,76,36,69,43,58,46,49,46,48,47,49,46,49,47,49,666,666,42,
54,41,52,38,51,34,49,29,50,24,54,19,58,13,63,9,69,5,74,3,81,1,88,3,89,9,89,19,82,27,79,29,78,29,78, 
};
const int buk_33[] = { // б
33,52,25,55,20,61,14,68,10,77,12,82,18,83,26,80,37,71,41,59,37,53,24,56,666,666,38,72,44,63,48,54,
45,47,40,41,34,39,31,37,29,33,31,28,43,15,666,666,53,8,58,4,666,666,25,83,34,80,44,76,46,75, 
};
const int buk_34[] = { // в
9,77,12,75,19,71,26,65,35,56,43,45,52,34,56,24,59,15,59,12,58,6,56,4,51,6,44,17,32,36,24,51,
18,67,13,78,10,85,12,88,18,89,29,81,40,71,46,62,47,57,42,50,32,48,25,61,666,666,20,90,25,86,44,75, 
};
const int buk_35[] = { // г
9,74,10,70,17,59,25,51,33,47,37,48,37,54,31,66,25,76,20,85,17,92,16,96,16,96,18,96,27,89,36,83,45,77,45,76,47,77, 
};
const int buk_36[] = { // д
30,51,19,59,14,65,10,79,15,83,26,80,38,72,47,63,46,51,35,50,25,59,666,666,31,96,25,109,21,120,17,128,
-9,131,-15,128,-13,125,-7,118,7,109,25,97,40,85,46,78,47,77,47,78, 
};
const int buk_37[] = { // е
9,77,12,77,22,71,42,59,49,50,45,48,43,47,36,50,27,62,21,73,17,84,14,93,15,94,23,87,38,78,46,74,46,75, 
};
const int buk_38[] = { // ж
22,45,22,50,24,64,27,78,31,84,32,86,32,87,33,85,666,666,2,91,1,90,2,89,9,82,21,70,35,59,45,50,50,48,50,48,50,47,50,47,666,666,34,47,
34,47,31,50,25,64,21,75,16,90,15,93,15,92,16,92,666,666,3,81,2,80,2,81,3,89,4,91,4,90,666,666,45,79,44,80,39,84,35,89,33,89,36,88, 
};
const int buk_39[] = { // з
20,66,20,65,19,61,20,56,22,52,30,47,35,44,43,45,45,47,45,55,38,66,30,76,22,82,19,83,21,80,29,76,32,77,32,81,29,93,22,106,19,114,14,118,
8,122,0,127,-8,129,-12,129,-14,128,-15,124,-13,118,-8,112,2,106,19,95,41,80,51,73,51,72,49,76,666,666,8,77,9,77,14,72,20,69,20,67,21,68, 
};
const int buk_40[] = { // и
23,49,24,50,23,49,23,49,22,50,20,56,15,63,12,73,8,81,6,89,8,92,16,85,27,72,35,58,38,49,41,45,39,48,34,56,29,66,25,
76,24,86,23,90,24,90,31,88,41,79,45,77,45,77,45,77,  
};
const int buk_41[] = { // й
23,49,24,50,23,49,23,49,22,50,20,56,15,63,12,73,8,81,6,89,8,92,16,85,27,72,35,58,38,49,41,45,39,48,34,56,29,66,25,
76,24,86,23,90,24,90,31,88,41,79,45,77,45,77,45,77,666,666,22,35,26,40,35,32,41,24, 
};
const int buk_42[] = { // к
8,73,8,73,9,73,16,64,28,48,34,41,32,42,32,43,28,48,19,72,10,91,8,94,9,92,10,91,10,92,666,666,19,83,
28,64,47,47,58,37,57,39,666,666,28,66,31,74,30,82,28,93,35,86,45,75,45,74, 
};
const int buk_43[] = { // л
10,77,9,78,7,83,9,86,12,84,23,74,35,59,42,46,43,45,45,43,43,47,37,56,28,74,26,80,25,85,26,85,33,83,42,79,49,73,50,71,49,73, 
};
const int buk_44[] = { // м
8,79,8,81,7,85,8,89,14,82,25,61,32,48,33,47,33,47,33,46,29,56,22,70,21,81,21,87,21,87,25,84,36,66,46,51,49,47,48,48,47,50,
41,63,33,79,30,88,31,90,32,89,42,80,44,77,45,77,45,77,
};
const int buk_45[] = { // н
10,76,10,75,15,68,20,64,24,59,26,54,26,53,26,52,25,52,23,54,19,64,14,73,9,81,5,89,3,91,6,91,4,90,6,86,10,80,14,78,20,76,26,
74,29,75,30,74,35,69,40,62,46,54,49,51,48,50,47,48,45,50,38,60,31,72,25,82,23,86,24,88,25,88,32,84,43,79,47,75,47,75,45,76, 
};
const int buk_46[] = { // о
34,52,23,58,17,64,13,73,10,79,10,82,11,87,15,90,20,88,28,84,34,80,43,74,47,65,47,59,45,56,38,52,32,52,666,666,25,87,34,82,
44,79,48,78,48,78,49,78,48,78,666,666,11,74,16,67,19,64, 
};
const int buk_47[] = { // п
2,94,2,92,6,86,13,68,22,49,27,39,26,39,27,40,27,41,666,666,18,65,20,59,27,54,35,50,42,47,42,47,45,50,42,58,35,70,28,
81,25,86,24,89,25,90,27,90,34,86,43,78,44,77,44,76,45,76,44,75, 
};
const int buk_48[] = { // р
4,84,3,83,9,78,21,56,29,44,31,39,30,41,25,54,18,74,9,99,-2,124,-5,130,-4,128,666,666,24,63,29,57,41,50,49,49,53,52,53,60,47,73,37,83,21,86,11,88,11,86, 
};
const int buk_49[] = { // с
35,46,24,49,18,55,12,62,6,74,4,85,9,89,18,91,25,88,39,81,45,77,46,77,46,76, 
};
const int buk_50[] = { // т
19,49,18,50,16,57,12,68,7,79,1,88,0,92,0,93,1,92,666,666,17,66,27,55,31,49,31,49,32,50,29,60,25,70,21,77,18,84,17,85,20,81,24,69,29,62,34,58,36,
56,37,59,35,68,29,78,28,84,27,84,30,85,37,79,44,76,43,75,44,75,666,666,20,42,20,41,35,40,45,38,45,37,45,38,46,38, 
};
const int buk_51[] = { // у
10,74,18,60,22,53,23,50,22,50,21,54,17,69,15,77,18,79,27,73,35,66,43,54,45,50,44,51,38,65,32,79,28,94,25,106,20,
118,14,124,6,129,-4,130,-11,126,-10,122,-7,115,2,107,12,99,28,86,45,79,52,73,52,73,52,73,
};
const int buk_52[] = { // ф
44,49,42,50,37,49,33,50,27,54,21,58,18,62,14,65,10,70,8,72,6,76,5,82,5,83,6,86,10,87,19,86,24,85,31,82,37,78,43,75,49,69,53,
61,54,54,53,49,42,47,27,57,666,666,41,42,37,49,32,58,25,77,16,97,8,116,4,126,4,126,4,124, 
};
const int buk_53[] = { // х
27,44,28,45,27,45,28,48,30,56,30,64,30,74,32,81,32,87,33,88,33,88,33,88,33,88,666,666,9,87,8,86,8,86,8,89,8,87,8,88,8,88,8,87,10,87,17,80,
27,70,40,60,49,54,53,50,53,50,53,49,53,50,666,666,33,89,33,89,35,89,39,85,45,80,46,79,47,79,47,78,666,666,6,81,6,81,6,82,8,87,9,88,9,86, 
};
/////////////////////////
const struct {//структура массивов букв алфавита
    const int *bitmap;
 }
  bukvi[]={buk_0,buk_1,buk_2,buk_3,buk_4,buk_5,buk_6,buk_7,buk_8,buk_9,buk_10,buk_11,buk_12,buk_13,buk_14,buk_15,buk_16,buk_17,buk_18,buk_19,
  buk_20,buk_21,buk_22,buk_23,buk_24,buk_25,buk_26,buk_27,buk_28,buk_29,buk_30,buk_31,buk_32,buk_33,buk_34,buk_35,buk_36,buk_37,buk_38,buk_39,
  buk_40,buk_41,buk_42,buk_43,buk_44,buk_45,buk_46,buk_47,buk_48,buk_49,buk_50,buk_51,buk_52,buk_53,};  
  
 const int dlina_bukv[]={sizeof(buk_0)/sizeof(buk_0[0]),sizeof(buk_1)/sizeof(buk_1[0]),sizeof(buk_2)/sizeof(buk_2[0]),sizeof(buk_3)/sizeof(buk_3[0]),
 sizeof(buk_4)/sizeof(buk_4[0]),sizeof(buk_5)/sizeof(buk_5[0]),sizeof(buk_6)/sizeof(buk_6[0]),sizeof(buk_7)/sizeof(buk_7[0]),sizeof(buk_8)/sizeof(buk_8[0]),
 sizeof(buk_9)/sizeof(buk_9[0]),sizeof(buk_10)/sizeof(buk_10[0]),sizeof(buk_11)/sizeof(buk_11[0]),sizeof(buk_12)/sizeof(buk_12[0]),sizeof(buk_13)/sizeof(buk_13[0]),
 sizeof(buk_14)/sizeof(buk_14[0]),sizeof(buk_15)/sizeof(buk_15[0]),sizeof(buk_16)/sizeof(buk_16[0]),sizeof(buk_17)/sizeof(buk_17[0]),sizeof(buk_18)/sizeof(buk_18[0]),
 sizeof(buk_19)/sizeof(buk_19[0]),sizeof(buk_20)/sizeof(buk_20[0]),sizeof(buk_21)/sizeof(buk_21[0]),sizeof(buk_22)/sizeof(buk_22[0]),sizeof(buk_23)/sizeof(buk_23[0]),
 sizeof(buk_24)/sizeof(buk_24[0]),sizeof(buk_25)/sizeof(buk_25[0]),sizeof(buk_26)/sizeof(buk_26[0]),sizeof(buk_27)/sizeof(buk_27[0]),sizeof(buk_28)/sizeof(buk_28[0]),
 sizeof(buk_29)/sizeof(buk_29[0]),sizeof(buk_30)/sizeof(buk_30[0]),sizeof(buk_31)/sizeof(buk_31[0]),sizeof(buk_32)/sizeof(buk_32[0]),sizeof(buk_33)/sizeof(buk_33[0]),
 sizeof(buk_34)/sizeof(buk_34[0]),sizeof(buk_35)/sizeof(buk_35[0]),sizeof(buk_36)/sizeof(buk_36[0]),sizeof(buk_37)/sizeof(buk_37[0]),sizeof(buk_38)/sizeof(buk_38[0]),
 sizeof(buk_39)/sizeof(buk_39[0]),sizeof(buk_40)/sizeof(buk_40[0]),sizeof(buk_41)/sizeof(buk_41[0]),sizeof(buk_42)/sizeof(buk_42[0]),sizeof(buk_43)/sizeof(buk_43[0]),
 sizeof(buk_44)/sizeof(buk_44[0]),sizeof(buk_45)/sizeof(buk_45[0]),sizeof(buk_46)/sizeof(buk_46[0]),sizeof(buk_47)/sizeof(buk_47[0]),sizeof(buk_48)/sizeof(buk_48[0]),
 sizeof(buk_49)/sizeof(buk_49[0]),sizeof(buk_50)/sizeof(buk_50[0]),sizeof(buk_51)/sizeof(buk_51[0]),sizeof(buk_52)/sizeof(buk_52[0]),sizeof(buk_53)/sizeof(buk_53[0]),};// массив длин массивов букв алфавита
/////////////////////////














Можно это всё (функции рисования строки и символа) в один файл с расширением .h вставить и как?

3 лайка

@lilik, ты разрешение спрашиваешь? Так кто тебе запретит? ))

1 лайк

Нет, не разрешения :slight_smile: Просто нет ясности по правилам деления на файлы. По идее функции вспомогательные, их в файл с данными по буквам. Но в них есть функция рисования отрезка. Она наверняка потребует подключения библиотек в доп.файле, если так можно в принципе.

для начала разобраться, как работают пары файлов .h и .cpp в Си++

У меня так происходит: Имеется основной ino-файл, и куча h-файлов. В h-файлы вынесен код, чтобы “не засерать” основной файл. В основном фале подключаются (либо в начале, либо по необходимости).