1602
This commit is contained in:
parent
037f7ce38a
commit
be7bedb8c7
87
Disp1602.cpp
Normal file
87
Disp1602.cpp
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
#include <Wire.h>
|
||||||
|
|
||||||
|
#include <LiquidCrystal_I2C.h>
|
||||||
|
|
||||||
|
LiquidCrystal_I2C lcd(0x27, 16, 2);
|
||||||
|
|
||||||
|
struct DisplayData {
|
||||||
|
char topLine[64];
|
||||||
|
int value1;
|
||||||
|
int value2;
|
||||||
|
int value3;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct TextCounter {
|
||||||
|
unsigned long startTime;
|
||||||
|
int incrementValue;
|
||||||
|
};
|
||||||
|
|
||||||
|
TextCounter textCounter;
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
lcd.begin(16, 2);
|
||||||
|
textCounter.startTime = millis(); // Запоминаем время запуска программы
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
unsigned long currentTime = millis(); // Текущее время
|
||||||
|
|
||||||
|
// Проверяем, прошло ли 500 мс с момента последнего увеличения incrementValue
|
||||||
|
if (currentTime - textCounter.startTime >= 500) {
|
||||||
|
textCounter.incrementValue++; // Увеличиваем incrementValue на 1
|
||||||
|
textCounter.startTime = currentTime; // Обновляем время
|
||||||
|
}
|
||||||
|
|
||||||
|
DisplayData displayData;
|
||||||
|
strncpy(displayData.topLine, "we are responsible for those who have been tame ", sizeof(displayData.topLine) - 1);
|
||||||
|
displayData.topLine[sizeof(displayData.topLine) - 1] = '\0';
|
||||||
|
displayData.value1 = 500;
|
||||||
|
displayData.value2 = 800;
|
||||||
|
displayData.value3 = 855;
|
||||||
|
|
||||||
|
// Буферы для заполнения данных
|
||||||
|
char buffer1[17];
|
||||||
|
char buffer2[17];
|
||||||
|
|
||||||
|
// Заполнение буфера 1
|
||||||
|
fillBuffer1(displayData.topLine, buffer1, sizeof(buffer1), textCounter.incrementValue);
|
||||||
|
|
||||||
|
// Заполнение буфера 2
|
||||||
|
fillBuffer2(displayData.value1, displayData.value2, displayData.value3, buffer2, sizeof(buffer2));
|
||||||
|
|
||||||
|
// Создание массива для вывода на дисплей
|
||||||
|
char displayArray[32];
|
||||||
|
strncpy(displayArray, buffer1, 16); // Копирование первых 16 символов из buffer1 в displayArray
|
||||||
|
strncpy(displayArray + 16, buffer2, 16); // Копирование первых 16 символов из buffer2 в displayArray, начиная с позиции 16
|
||||||
|
|
||||||
|
// Вывод данных на экран
|
||||||
|
lcd.setCursor(0, 0);
|
||||||
|
lcd.print(displayArray);
|
||||||
|
|
||||||
|
lcd.setCursor(0, 1);
|
||||||
|
lcd.print(displayArray + 16); // Вывод второй половины displayArray
|
||||||
|
}
|
||||||
|
|
||||||
|
void fillBuffer1(const char * source, char * buffer, size_t bufferSize, int incrementValue) {
|
||||||
|
int startIndex = incrementValue % strlen(source); // Определяем начальный индекс на основе incrementValue
|
||||||
|
int endIndex = startIndex + 16;
|
||||||
|
|
||||||
|
if (endIndex > strlen(source)) {
|
||||||
|
// Если endIndex превышает длину строки source, переносим его на начало строки
|
||||||
|
endIndex = endIndex - strlen(source);
|
||||||
|
|
||||||
|
// Копируем символы с конца строки source
|
||||||
|
strncpy(buffer, source + startIndex, strlen(source) - startIndex);
|
||||||
|
|
||||||
|
// Копируем оставшиеся символы с начала строки source
|
||||||
|
strncat(buffer, source, endIndex);
|
||||||
|
} else {
|
||||||
|
strncpy(buffer, source + startIndex, endIndex - startIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
buffer[endIndex - startIndex] = '\0'; // Установка нулевого символа в конце буфера
|
||||||
|
}
|
||||||
|
|
||||||
|
void fillBuffer2(int value1, int value2, int value3, char * buffer, size_t bufferSize) {
|
||||||
|
snprintf(buffer, bufferSize, "%d.%d.%d", value1, value2, value3);
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user