Вт июн 24, 2025 10:02:56
Вт июн 24, 2025 13:33:19
#include <Adafruit_GFX.h> // Core graphics library
#include <Adafruit_ST7735.h> // Hardware-specific library for ST7735
int X[2][7][6] = { {
{ 21, 22, 22, 20, 18, 18 }, // 40x22 X координаты вершин треугольников цифр
{ 20, 22, 22, 21, 18, 18 }, { 20, 19, 3, 2, 5, 17 },
{ 1, 0, 0, 2, 4, 4 }, { 2, 0, 0, 1, 4, 4 },
{ 2, 3, 19, 20, 17, 5 }, { 5, 17, 19, 17, 5, 3 }},
{{ 11, 12, 12, 11, 10, 10 }, // 22x12
{ 11, 12, 12, 11, 10, 10 }, { 10, 9, 3, 2, 3, 9 },
{ 1, 0, 0, 1, 2, 2 }, { 1, 0, 0, 1, 2, 2 },
{ 2, 3, 9, 10, 9, 3 }, { 2, 3, 9, 10, 9, 3 }} };
int Y[2][7][6] = { {
{ 2, 3, 17, 19, 17, 5 }, // 40x22 Y координаты вершин треугольников цифр
{ 21, 23, 37, 38, 35, 23 }, { 39, 40, 40, 39, 36, 36 },
{ 38, 37, 23, 21, 23, 35 }, { 19, 17, 3, 2, 5, 17 },
{ 1, 0, 0, 1, 4, 4 }, { 18, 18, 20, 22, 22, 20 }},
{{ 2, 3, 9, 10, 9, 3 }, // 22x12
{ 12, 13, 19, 20, 19, 13 }, { 21, 22, 22, 21, 20, 20 },
{ 20, 19, 13, 12, 13, 19 }, { 10, 9, 3, 2, 3, 9 },
{ 1, 0, 0, 1, 2, 2 }, { 11, 10, 10, 11, 12, 12 }} };
// Коды цифр 0..9 и пробел
int seg[11] = { 63, 3, 109, 103, 83, 118, 126, 35, 127, 119, 0 };
Adafruit_ST7735 tft = Adafruit_ST7735(34/*TFT_CS*/, 38/*TFT_DC*/, 39/*TFT_RST*/);
void setup(void) {
tft.initR(INITR_GREENTAB); // Init ST7735S chip, black tab
tft.fillScreen(BLACK);
tft.setTextColor(WHITE, BLACK);
tft.drawLine(0, 142, 128, 142, GREY);
}
void loop() {
if (millis() - timind > 1000) {
izm(); // Измерение
ind(); // Индикация
timind += 1000;
}
//---------- Индикация ----------
static void ind(void) {
PrintV(clc * 10, uo * 10);
PrintA(clc);
PrintP(clc, uo);
PrintC(clc, uo);
uo = clc;
}
//---------- Рисуем цифру ----------
static void digitDraw(int h, int x, int y, int d /*Цифра*/, unsigned int Color) {
for (int s = 0; s < 7; s++) { // Рисуем сегменты из треугольников
int c = Color;
if (!bitRead(seg[d], s)) c = BLACK;
int x0 = x + X[h][s][0]; int y0 = y + Y[h][s][0];
tft.fillTriangle(x0, y0, x + X[h][s][1], y + Y[h][s][1], x + X[h][s][2], y + Y[h][s][2], c);
tft.fillTriangle(x0, y0, x + X[h][s][2], y + Y[h][s][2], x + X[h][s][3], y + Y[h][s][3], c);
tft.fillTriangle(x0, y0, x + X[h][s][3], y + Y[h][s][3], x + X[h][s][4], y + Y[h][s][4], c);
tft.fillTriangle(x0, y0, x + X[h][s][4], y + Y[h][s][4], x + X[h][s][5], y + Y[h][s][5], c);
}
}
//---------- Индикация V ----------
static void PrintV(int u, int uo) {
if (u >= 10000) { // Если больше четырех знаков
u /= 10;
if (uo < 10000) {
digitDraw(0, 45, 9, (u % 1000) / 100, BLACK);
tft.fillCircle(33, 46, 3, 0);
}
digitDraw(0, 30, 9, (u % 1000) / 100, GREEN);
tft.fillCircle(63, 46, 3, GREEN);
}
else {
if (uo >= 10000) {
digitDraw(0, 30, 9, (u % 1000) / 100, BLACK);
tft.fillCircle(63, 46, 3, 0);
}
digitDraw(0, 45, 9, (u % 1000) / 100, GREEN);
tft.fillCircle(33, 46, 3, GREEN);
}
int i = u % 1000;
digitDraw(0, 0, 9, u / 1000, GREEN);
i = u % 100;
digitDraw(0, 75, 9, i / 10, GREEN);
digitDraw(0, 105, 9, i % 10, GREEN);
}
//---------- Индикация A ----------
static void PrintA(unsigned int u) {
digitDraw(0, 0, 63, u / 1000, CYAN);
int i = u % 1000;
digitDraw(0, 45, 63, i / 100, CYAN);
i = u % 100;
digitDraw(0, 75, 63, i / 10, CYAN);
digitDraw(0, 105, 63, i % 10, CYAN);
tft.fillCircle(33, 100, 3, CYAN);
}
Вс июл 06, 2025 21:31:26
Вс июл 13, 2025 18:37:39
Вт июл 15, 2025 17:39:02
Ср июл 16, 2025 13:26:46
Ср июл 16, 2025 22:33:43
Чт июл 17, 2025 18:21:46
Пн июл 21, 2025 19:27:59
Пн июл 21, 2025 19:39:25
Пн июл 21, 2025 23:38:47
Вс дек 14, 2025 12:49:33
Вс дек 14, 2025 20:27:43