#include <Wire.h>
#include <Keypad.h>
#include <LiquidCrystal_I2C.h>
byte LCD_CHAR[10][8] = {
{B11111,B11110,B11111,B10000,B10000,B10000,B10000,B10000}, // флаг 1
{B00000,B01010,B10101,B10001,B01110,B00100,B00000,B00000}, // сердце 0
{B00000,B01010,B11111,B11111,B01110,B00100,B00000,B00000}, // сердце 1
{B00000,B11111,B11111,B01110,B00100,B01010,B10001,B11111}, // часы 1
{B00000,B11111,B10001,B01110,B00100,B01010,B11111,B11111}, // часы 2
{B00000,B11111,B10001,B01010,B00100,B01110,B11111,B11111}, // часы 3
{B00000,B00000,B01110,B10101,B10101,B10001,B01110,B00000}, // часы 10
{B00000,B00000,B01110,B10101,B10111,B10001,B01110,B00000}, // часы 11
{B00000,B00000,B01110,B10101,B10101,B10101,B01110,B00000}, // часы 12
{B00000,B00000,B01110,B10101,B11101,B10001,B01010,B00000}, // часы 13
};
#define LCD_ADDR 0x27
#define LCD_COLS 16
#define LCD_ROWS 2
#define BUZZER_PIN 2
LiquidCrystal_I2C lcd(LCD_ADDR, LCD_COLS, LCD_ROWS);
const byte ROWS = 4, COLS = 4;
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {12,11,10,9};
byte colPins[COLS] = {8,7,6,5};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
// Буферы для строк sprinf
char line1[17] = ""; // +1 для нуль-терминатора
char line2[17] = "";
unsigned long lastUpdate = 0;
const int updateInterval = 1000; // 1 секунда
char dateStr[20];
int day = 5, month = 10, year = 2023;
byte SCREEN ;
void setup() {
pinMode(BUZZER_PIN, OUTPUT);
randomSeed(analogRead(0));
Serial.begin(115200);
lcd.init();
lcd.backlight();
// Создаём кастомные символы
for(byte i = 0; i < 8; i++) {
lcd.createChar(i, LCD_CHAR[i]);
lcd.clear();
lcd.print(i);
lcd.print(" - ");
lcd.write(i); // Выводим символ i
delay(200);
}
lcd.clear();
Strings_upd(); // Первоначальное формирование строк
LCD_UPD(); // Вывод на экран
delay(2000);
}
void loop() {
char key = keypad.getKey();
switch (key) {
case '*':
SCREEN == 11;
Serial.println(key);
SET_SCR();
LCD_UPD();
break;
case '#':
Serial.println(key);
break;
case 'A':
Serial.println(key);
break;
case 'B':
Serial.println(key);
break;
case 'C':
Serial.println(key);
break;
case 'D':
Serial.println(key);
break;
};
/*
if (key) {
Serial.println(key);
if (key >= '1' && key <= '8') {
byte charIndex = key - '1'; // '1' -> 0, '2' -> 1, ..., '8' -> 7
lcd.write(charIndex);
}
if (key == 'A') {
lcd.clear();
}
}*/
}
void SET_SCR() {
snprintf(line1, 17, "SET: >A B C D ");
snprintf(line2, 17, " * 10 # ");
}
// Формируем строки
void Strings_upd() {
int sensorValue = analogRead(A0); // Пример переменной
//snprintf(line1, 17, "Value: %d", sensorValue*10); // Форматируем в буфер
snprintf(line1, 17, "Value: %dd", sensorValue);
//snprintf(line2, 17, "Time: %lu", millis() / 1000);
snprintf(dateStr, sizeof(dateStr), "%02d/%02d/%04d", day, month, year);
Serial.println(dateStr); // "05/10/2023"
}
// Вывод на LCD
void LCD_UPD() {
lcd.clear();
//lcd.setCursor(0, 0);
lcd.print(line1);
lcd.setCursor(0, 1);
lcd.print(line2);
}