0 / 0 / 0
Регистрация: 18.03.2021
Сообщений: 90
1

Проблема с выводом на ILI9341

10.01.2025, 23:39. Показов 1722. Ответов 46

Author24 — интернет-сервис помощи студентам
Всем привет
Написал простенький монитор ресурсов, мк - stm32 bluepill, дисплей - ili9341, вылазят артефакты внизу дисплея, подскажите с чем может быть связано?
подключение:
vcc - 3.3v
gnd - g
cs - b10
reset - b1
d/c - b0
mosi - a7
sck - a5
led - 3.3v

Проблема с выводом на ILI9341
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.01.2025, 23:39
Ответы с готовыми решениями:

Проблема с выводом
постановка задачи https://drive.google.com/file/d/1kemxzWo6FREo2uaB-IemEuPqOow6e1hl/view?usp=sharing #include <iostream> #include...

Проблема с выводом
Формулировка задачи: Даны оценки группы из десяти студентов по практической работе №3 (от 0 до 100). Ввести оценки в программу,...

Проблема с выводом
Я делал шифр, его суть в том, что ты вводишь ключ, который состоит из одной двойки, четверки и восьмерки. Двойка озночает двоичную СС,...

проблема с выводом
Через connect by prior вывожу древовидную структуру таблицы в виде: Европа Германия Берлин Австрия Вена ...

46
Эксперт .NET
11205 / 7135 / 1589
Регистрация: 25.05.2015
Сообщений: 21,610
Записей в блоге: 14
10.01.2025, 23:45 2
У вас прогресс бар выходит за правую границу, что намекает на то, что дисплей сконфигурирован не правильно.
Нужен не портретный режим, а ландшафтный. Поверните на 90°.
0
0 / 0 / 0
Регистрация: 18.03.2021
Сообщений: 90
11.01.2025, 00:16  [ТС] 3
Rius,
Проблема с выводом на ILI9341
как-то так
0
Эксперт .NET
11205 / 7135 / 1589
Регистрация: 25.05.2015
Сообщений: 21,610
Записей в блоге: 14
11.01.2025, 01:00 4
Повернули, но не донастроили.
Где-то ограничение в размере указано. Либо памяти не хватает. Там не квадратный экран должен выводиться.

Добавлено через 39 секунд
Изучите каждую команду конфигурации драйвера, затем библиотеки.

Добавлено через 26 минут
Ещё проверьте, что используемые типы данных достаточны. Например, нельзя указать значение координаты 419, если переменная типа uint8_t.
0
0 / 0 / 0
Регистрация: 18.03.2021
Сообщений: 90
11.01.2025, 01:50  [ТС] 5
Rius, не затруднит взглянуть? честно, вообще дупля не отстреливаю в чем может быть проблема
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#include <Arduino.h>
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h>
#include <HardwareSerial.h>
 
#define TFT_CS   PB10
#define TFT_DC   PB0
#define TFT_RST  PB1
 
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);
 
struct SystemStats {
  float cpuUsage;
  float ramUsage;
  float temperature;
};
 
#define SCREEN_HEIGHT 320
#define SCREEN_WIDTH 240
#define VISIBLE_AREA_HEIGHT 280
 
SystemStats currentStats = {0, 0, 0};
 
void setup() {
  Serial1.begin(115200);
  Serial1.setTimeout(100);
  
  tft.begin();
  tft.setRotation(2);
  tft.fillScreen(ILI9341_BLACK);
  delay(50);
  
  tft.setCursor(10, 10);
  tft.setTextColor(ILI9341_WHITE);
  tft.setTextSize(2);
  tft.println("System Monitor");
  tft.fillRect(0, 220, tft.width(), tft.height() - 220, ILI9341_BLACK);
}
 
void drawProgressBar(int x, int y, int width, int height, float percentage, uint16_t barColor) {
  if (y + height > 220) return;
  percentage = constrain(percentage, 0, 100);
 
  tft.drawRect(x, y, width, height, ILI9341_WHITE);
  tft.fillRect(x + 1, y + 1, width - 2, height - 2, ILI9341_BLACK);
 
  if (percentage > 0) {
    int fillWidth = (width - 2) * (percentage / 100.0);
    tft.fillRect(x + 1, y + 1, fillWidth, height - 2, barColor);
  }
}
 
void updateSystemStats() {
  Serial1.println("GET_STATS");
  if (Serial1.available() >= sizeof(SystemStats)) {
    SystemStats receivedStats;
    Serial1.readBytes((char*)&receivedStats, sizeof(SystemStats));
    currentStats = receivedStats;
  }
}
 
void drawSystemMonitor() {
  const int X_MARGIN = 10;
  const int MAX_Y = 220;
  const int BAR_WIDTH = tft.width() - (X_MARGIN * 2);
  const int BAR_HEIGHT = 15;
  const int SECTION_HEIGHT = 50;
  
  tft.fillRect(0, 40, tft.width(), MAX_Y - 40, ILI9341_BLACK);
 
  int yPos = 50;
 
  tft.setCursor(X_MARGIN, yPos);
  tft.setTextColor(ILI9341_CYAN);
  tft.print("CPU: ");
  tft.print(currentStats.cpuUsage, 1);
  tft.print("%");
 
  if (yPos + BAR_HEIGHT < MAX_Y) {
    drawProgressBar(X_MARGIN, yPos + 20, BAR_WIDTH, BAR_HEIGHT, currentStats.cpuUsage, ILI9341_CYAN);
  }
 
  yPos += SECTION_HEIGHT;
 
  tft.setCursor(X_MARGIN, yPos);
  tft.setTextColor(ILI9341_MAGENTA);
  tft.print("RAM: ");
  tft.print(currentStats.ramUsage, 1);
  tft.print("%");
 
  if (yPos + BAR_HEIGHT < MAX_Y) {
    drawProgressBar(X_MARGIN, yPos + 20, BAR_WIDTH, BAR_HEIGHT, currentStats.ramUsage, ILI9341_MAGENTA);
  }
 
  yPos += SECTION_HEIGHT;
 
  tft.setCursor(X_MARGIN, yPos);
  tft.setTextColor(ILI9341_RED);
  tft.print("Temp: ");
  tft.print(currentStats.temperature, 1);
  tft.print(" C");
 
  if (yPos + BAR_HEIGHT < MAX_Y) {
    drawProgressBar(X_MARGIN, yPos + 20, BAR_WIDTH, BAR_HEIGHT, 
      map(currentStats.temperature, 0, 100, 0, 100), ILI9341_RED);
  }
 
  tft.fillRect(0, MAX_Y, tft.width(), tft.height() - MAX_Y, ILI9341_BLACK);
}
 
void loop() {
  updateSystemStats();
  drawSystemMonitor();
  delay(1000);
}
0
3555 / 2474 / 561
Регистрация: 11.09.2009
Сообщений: 8,938
11.01.2025, 08:30 6
Цитата Сообщение от homie23 Посмотреть сообщение
в чем может быть проблема
Проблема в инициализации дисплея. Где она - спрашивайте у Adafruit.
0
Эксперт .NET
11205 / 7135 / 1589
Регистрация: 25.05.2015
Сообщений: 21,610
Записей в блоге: 14
11.01.2025, 09:25 7
Что за дисплей?
0
4025 / 2571 / 430
Регистрация: 09.09.2017
Сообщений: 11,490
11.01.2025, 18:07 8
А если ради теста поменять SCREEN_HEIGHT и SCREEN_WIDTH местами? Ну то есть не 320х240, а наоборот, 240х320.
0
0 / 0 / 0
Регистрация: 18.03.2021
Сообщений: 90
12.01.2025, 12:30  [ТС] 9
Rius, TFT LCD 2,8" SPI 240X320 ILI9341

Добавлено через 6 минут
COKPOWEHEU, ничего не поменялось
0
Эксперт .NET
11205 / 7135 / 1589
Регистрация: 25.05.2015
Сообщений: 21,610
Записей в блоге: 14
12.01.2025, 12:49 10
Судя по https://github.com/adafruit/Ad... _ILI9341.h, высота и ширина задаются другими макросами. И делать это надо до инициализации дисплея.
0
0 / 0 / 0
Регистрация: 18.03.2021
Сообщений: 90
12.01.2025, 16:44  [ТС] 11
Rius, безрезультатно
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#define ILI9341_TFTWIDTH 320
#define ILI9341_TFTHEIGHT 240
 
#include <Arduino.h>
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h>
#include <HardwareSerial.h>
 
#define TFT_CS   PB10
#define TFT_DC   PB0
#define TFT_RST  PB1
 
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);
 
struct SystemStats {
  float cpuUsage;
  float ramUsage;
  float temperature;
};
 
#define SCREEN_HEIGHT 240
#define SCREEN_WIDTH 320
#define VISIBLE_AREA_HEIGHT 280
 
SystemStats currentStats = {0, 0, 0};
 
void setup() {
  Serial1.begin(115200);
  Serial1.setTimeout(100);
  
  tft.begin();
  tft.setRotation(2);
  tft.fillScreen(ILI9341_BLACK);
  delay(50);
  
  tft.setCursor(10, 10);
  tft.setTextColor(ILI9341_WHITE);
  tft.setTextSize(2);
  tft.println("System Monitor");
  tft.fillRect(0, 220, tft.width(), tft.height() - 220, ILI9341_BLACK);
}
 
void drawProgressBar(int x, int y, int width, int height, float percentage, uint16_t barColor) {
  if (y + height > 220) return;
  percentage = constrain(percentage, 0, 100);
 
  tft.drawRect(x, y, width, height, ILI9341_WHITE);
  tft.fillRect(x + 1, y + 1, width - 2, height - 2, ILI9341_BLACK);
 
  if (percentage > 0) {
    int fillWidth = (width - 2) * (percentage / 100.0);
    tft.fillRect(x + 1, y + 1, fillWidth, height - 2, barColor);
  }
}
 
void updateSystemStats() {
  Serial1.println("GET_STATS");
  if (Serial1.available() >= sizeof(SystemStats)) {
    SystemStats receivedStats;
    Serial1.readBytes((char*)&receivedStats, sizeof(SystemStats));
    currentStats = receivedStats;
  }
}
 
void drawSystemMonitor() {
  const int X_MARGIN = 10;
  const int MAX_Y = 220;
  const int BAR_WIDTH = tft.width() - (X_MARGIN * 2);
  const int BAR_HEIGHT = 15;
  const int SECTION_HEIGHT = 50;
  
  tft.fillRect(0, 40, tft.width(), MAX_Y - 40, ILI9341_BLACK);
 
  int yPos = 50;
 
  tft.setCursor(X_MARGIN, yPos);
  tft.setTextColor(ILI9341_CYAN);
  tft.print("CPU: ");
  tft.print(currentStats.cpuUsage, 1);
  tft.print("%");
 
  if (yPos + BAR_HEIGHT < MAX_Y) {
    drawProgressBar(X_MARGIN, yPos + 20, BAR_WIDTH, BAR_HEIGHT, currentStats.cpuUsage, ILI9341_CYAN);
  }
 
  yPos += SECTION_HEIGHT;
 
  tft.setCursor(X_MARGIN, yPos);
  tft.setTextColor(ILI9341_MAGENTA);
  tft.print("RAM: ");
  tft.print(currentStats.ramUsage, 1);
  tft.print("%");
 
  if (yPos + BAR_HEIGHT < MAX_Y) {
    drawProgressBar(X_MARGIN, yPos + 20, BAR_WIDTH, BAR_HEIGHT, currentStats.ramUsage, ILI9341_MAGENTA);
  }
 
  yPos += SECTION_HEIGHT;
 
  tft.setCursor(X_MARGIN, yPos);
  tft.setTextColor(ILI9341_RED);
  tft.print("Temp: ");
  tft.print(currentStats.temperature, 1);
  tft.print(" C");
 
  if (yPos + BAR_HEIGHT < MAX_Y) {
    drawProgressBar(X_MARGIN, yPos + 20, BAR_WIDTH, BAR_HEIGHT, 
      map(currentStats.temperature, 0, 100, 0, 100), ILI9341_RED);
  }
 
  tft.fillRect(0, MAX_Y, tft.width(), tft.height() - MAX_Y, ILI9341_BLACK);
}
 
void loop() {
  updateSystemStats();
  drawSystemMonitor();
  delay(1000);
}
0
Эксперт .NET
11205 / 7135 / 1589
Регистрация: 25.05.2015
Сообщений: 21,610
Записей в блоге: 14
12.01.2025, 16:47 12
До Adafruit_ILI9341 tft = Adafruit_ILI9341 ...
Но после включения заголовочного файла. Потому что в нём все и определяется.
0
0 / 0 / 0
Регистрация: 18.03.2021
Сообщений: 90
12.01.2025, 16:59  [ТС] 13
Rius, понял,

Добавлено через 10 минут
Rius, не, артефакты не пропали
0
Эксперт .NET
11205 / 7135 / 1589
Регистрация: 25.05.2015
Сообщений: 21,610
Записей в блоге: 14
12.01.2025, 16:59 14
Текущий код приводите.
0
0 / 0 / 0
Регистрация: 18.03.2021
Сообщений: 90
12.01.2025, 17:01  [ТС] 15
Rius,


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#include <Arduino.h>
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h>
#include <HardwareSerial.h>
 
#define TFT_CS   PB10
#define TFT_DC   PB0
#define TFT_RST  PB1
 
#define ILI9341_TFTWIDTH 320
#define ILI9341_TFTHEIGHT 240
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST);
 
struct SystemStats {
  float cpuUsage;
  float ramUsage;
  float temperature;
};
 
#define SCREEN_HEIGHT 240
#define SCREEN_WIDTH 320
#define VISIBLE_AREA_HEIGHT 280
 
SystemStats currentStats = {0, 0, 0};
 
void setup() {
  Serial1.begin(115200);
  Serial1.setTimeout(100);
  
  tft.begin();
  tft.setRotation(2);
  tft.fillScreen(ILI9341_BLACK);
  delay(50);
  
  tft.setCursor(10, 10);
  tft.setTextColor(ILI9341_WHITE);
  tft.setTextSize(2);
  tft.println("System Monitor");
  tft.fillRect(0, 220, tft.width(), tft.height() - 220, ILI9341_BLACK);
}
 
void drawProgressBar(int x, int y, int width, int height, float percentage, uint16_t barColor) {
  if (y + height > 220) return;
  percentage = constrain(percentage, 0, 100);
 
  tft.drawRect(x, y, width, height, ILI9341_WHITE);
  tft.fillRect(x + 1, y + 1, width - 2, height - 2, ILI9341_BLACK);
 
  if (percentage > 0) {
    int fillWidth = (width - 2) * (percentage / 100.0);
    tft.fillRect(x + 1, y + 1, fillWidth, height - 2, barColor);
  }
}
 
void updateSystemStats() {
  Serial1.println("GET_STATS");
  if (Serial1.available() >= sizeof(SystemStats)) {
    SystemStats receivedStats;
    Serial1.readBytes((char*)&receivedStats, sizeof(SystemStats));
    currentStats = receivedStats;
  }
}
 
void drawSystemMonitor() {
  const int X_MARGIN = 10;
  const int MAX_Y = 220;
  const int BAR_WIDTH = tft.width() - (X_MARGIN * 2);
  const int BAR_HEIGHT = 15;
  const int SECTION_HEIGHT = 50;
  
  tft.fillRect(0, 40, tft.width(), MAX_Y - 40, ILI9341_BLACK);
 
  int yPos = 50;
 
  tft.setCursor(X_MARGIN, yPos);
  tft.setTextColor(ILI9341_CYAN);
  tft.print("CPU: ");
  tft.print(currentStats.cpuUsage, 1);
  tft.print("%");
 
  if (yPos + BAR_HEIGHT < MAX_Y) {
    drawProgressBar(X_MARGIN, yPos + 20, BAR_WIDTH, BAR_HEIGHT, currentStats.cpuUsage, ILI9341_CYAN);
  }
 
  yPos += SECTION_HEIGHT;
 
  tft.setCursor(X_MARGIN, yPos);
  tft.setTextColor(ILI9341_MAGENTA);
  tft.print("RAM: ");
  tft.print(currentStats.ramUsage, 1);
  tft.print("%");
 
  if (yPos + BAR_HEIGHT < MAX_Y) {
    drawProgressBar(X_MARGIN, yPos + 20, BAR_WIDTH, BAR_HEIGHT, currentStats.ramUsage, ILI9341_MAGENTA);
  }
 
  yPos += SECTION_HEIGHT;
 
  tft.setCursor(X_MARGIN, yPos);
  tft.setTextColor(ILI9341_RED);
  tft.print("Temp: ");
  tft.print(currentStats.temperature, 1);
  tft.print(" C");
 
  if (yPos + BAR_HEIGHT < MAX_Y) {
    drawProgressBar(X_MARGIN, yPos + 20, BAR_WIDTH, BAR_HEIGHT, 
      map(currentStats.temperature, 0, 100, 0, 100), ILI9341_RED);
  }
 
  tft.fillRect(0, MAX_Y, tft.width(), tft.height() - MAX_Y, ILI9341_BLACK);
}
 
void loop() {
  updateSystemStats();
  drawSystemMonitor();
  delay(1000);
}
0
Эксперт .NET
11205 / 7135 / 1589
Регистрация: 25.05.2015
Сообщений: 21,610
Записей в блоге: 14
12.01.2025, 17:08 16
Ваш дисплей ? https://simple-circuit.com/int... t-display/
Запустите код из примера.
0
0 / 0 / 0
Регистрация: 18.03.2021
Сообщений: 90
12.01.2025, 17:19  [ТС] 17
Rius, да, мой
поначалу те же артефакты, а при смене положения текста на месте артефактов остаются остатки предыдущего обновления
0
0 / 0 / 0
Регистрация: 18.03.2021
Сообщений: 90
12.01.2025, 17:23  [ТС] 18
Проблема с выводом на ILI9341

Проблема с выводом на ILI9341
0
Эксперт .NET
11205 / 7135 / 1589
Регистрация: 25.05.2015
Сообщений: 21,610
Записей в блоге: 14
12.01.2025, 17:38 19
Там на видео видно, что текст поворачивается на 90° и нет никаких артефактов.
Если код идентичный, и у вас всё должно быть аналогично.

Все провода проверьте и назначение пинов.

Добавлено через 14 минут
Прозвоните связь reset ардуины и reset контроллера дисплея на самом шлейфе.
0
636 / 391 / 75
Регистрация: 21.09.2008
Сообщений: 1,348
12.01.2025, 17:40 20
Цитата Сообщение от Rius Посмотреть сообщение
Если код идентичный, и у вас всё должно быть аналогично.
Вот только версия библиотеки для ILI9341 может быть совсем другой свежести.
0
12.01.2025, 17:40
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.01.2025, 17:40
Помогаю со студенческими работами здесь

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

Проблема с выводом
Проблема такова: &quot;Вы покупаете смартфон в магазине с гибкой системой скидок. Если исходная стоимость смартфона больше A рублей, на неё...

Проблема с выводом
Всем привет, у меня проблема. Не обращайте внимания что у меня одно и то же по несколько раз импортировано ;) Задача: написать такую...

Проблема с выводом
input_data = &quot;0x111 0xQWERTY 123 0xa 00&quot; input_data = input_data.split(&quot; &quot;) print(input_data) arr = &quot;0123456789ABCDEF&quot; ...

Проблема с выводом
При запуске main() фигуры становятся на свои места, но проблема - все они принадлежат фигурам чёрного цвета. Что не так? Я не понимаю. Вот...

Проблема с выводом
Когда программа завершается завершается признаком конца ввода ( сочетание ctrl + d) вместе с выводом в консоль выходит строчка...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

Новые блоги и статьи
NoSQL базы данных: что это такое и какие существуют
bytestream 22.01.2025
В современную эпоху цифровой трансформации объемы данных растут экспоненциально, создавая новые вызовы для традиционных систем управления базами данных. NoSQL (Not Only SQL) представляет собой. . .
Обновление исследования от команды MCM (январь 2025 г.)
Programma_Boinc 22.01.2025
Обновление исследования от команды MCM (январь 2025 г. ) Мы продолжаем изучать молекулярные сигнатуры, связанные с раком легких, с текущим фокусом на GCM1, факторе транскрипции, участвующем в. . .
Как работать с Kafka в Go (Golang)
bytestream 22.01.2025
Apache Kafka представляет собой распределенную платформу потоковой передачи данных, которая произвела революцию в области обработки событий и интеграции микросервисов. Эта система, изначально. . .
Как использовать RabbitMQ в Go (Golang)
bytestream 22.01.2025
RabbitMQ представляет собой надежный и широко используемый брокер сообщений, который играет ключевую роль в построении современных распределенных систем и микросервисной архитектуры. В основе работы. . .
Как преобразовать список списков в простой список в Python
bytestream 22.01.2025
При работе с Python разработчики часто сталкиваются с необходимостью обработки сложных структур данных, среди которых особое место занимают вложенные списки. Эти структуры представляют собой списки,. . .
Что такое GUID / UUID и как их создать
bytestream 22.01.2025
В мире разработки программного обеспечения существует постоянная потребность в уникальной идентификации объектов, записей и ресурсов. Эта задача становится особенно актуальной в распределенных. . .
Как добавить пустую директорию в репозиторий Git
bytestream 22.01.2025
При работе с системой контроля версий Git разработчики часто сталкиваются с ситуацией, когда необходимо сохранить пустую директорию в репозитории. Данная задача может показаться простой на первый. . .
Как валидировать адрес email в JavaScript
bytestream 22.01.2025
JavaScript, как основной язык веб-разработки, предоставляет разработчикам множество инструментов для реализации эффективной валидации email-адресов. От простых встроенных решений до сложных. . .
Как заменить все вхождения подстроки в JavaScript
bytestream 22.01.2025
Строки в JavaScript представляют собой неизменяемые последовательности символов, что делает их обработку особенно интересной с точки зрения оптимизации и выбора правильного подхода к решению задач. . . .
Управление версиями пакетов в Node.js. В чем разница между тильдой (~) и кареткой (^) в package.json
bytestream 22.01.2025
В современной разработке программного обеспечения управление версиями пакетов играет ключевую роль в обеспечении стабильности и надежности проектов. Node. js, как одна из самых популярных платформ для. . .
Аутентификация на сайте с помощью формы
bytestream 21.01.2025
В современном цифровом мире безопасная аутентификация становится краеугольным камнем защиты веб-приложений и пользовательских данных. Каждый день миллионы людей используют различные онлайн-сервисы,. . .
Как получить индекс в цикле for в Python
bytestream 21.01.2025
При работе с коллекциями данных в Python часто возникает необходимость не только получить доступ к элементам последовательности, но и знать их позицию в процессе итерации. Индексация в циклах. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru