#include <Wire.h>
#include <SPI.h>
#include <LCDWIKI_GUI.h>
#include <LCDWIKI_SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include <RotaryEncoder.h>
#include <RTClib.h>
#include <avr/pgmspace.h>
// ====== Піни ======
#define LCD_CS 10
#define LCD_CD 5
#define LCD_RST -1
#define LCD_LED -1
LCDWIKI_SPI mylcd(ILI9341, LCD_CS, LCD_CD, LCD_RST, LCD_LED);
Adafruit_BME280 bme;
RotaryEncoder encoder(A1, A2,RotaryEncoder::LatchMode::TWO03); // CW → PC1/A1, CCW → PC2/A2
#define BUTTON_PIN A3 // ON → PC3/A3
RTC_PCF8523 rtc;
#define BLACK 0x0000
#define WHITE 0xFFFF
#define BLUE 0x00FF
#define RED 0xF000
#define GREEN 0x0FF0
#define YELLOW 0xFF00
int lastButtonState = HIGH;
int lastPos = 0;
float temperature = 0;
float pressure = 0;
float humidity = 0;
void setup()
{
Wire.begin();
Wire.setClock(100000);
Serial.begin(9600);
bme.begin(0x76, &Wire);
mylcd.Init_LCD();
mylcd.Set_Rotation(1);
mylcd.Fill_Screen(BLACK);
mylcd.Set_Text_Mode(0);
mylcd.Set_Text_colour(WHITE);
mylcd.Set_Text_Back_colour(BLACK);
mylcd.Set_Text_Size(2);
encoder.setPosition(0);
pinMode(BUTTON_PIN, INPUT_PULLUP);
pinMode(SDA, INPUT_PULLUP);
pinMode(SCL, INPUT_PULLUP);
rtc.begin(&Wire);
rtc.adjust(DateTime(2026, 1, 14,13, 55, 0));
rtc.start();
mylcd.Fill_Screen(BLACK);
}
void loop() {
DateTime now = rtc.now();
mylcd.Set_Text_Size(3);
temperature = bme.readTemperature();
pressure = bme.readPressure() / 100.0;
humidity = bme.readHumidity();
mylcd.Set_Text_colour(RED);
mylcd.Set_Text_Size(5);
mylcd.Print_Number_Int(temperature, 215, 45, 0,'.', 10);
mylcd.Print_String("C", 285, 45);
mylcd.Draw_Circle(277, 50, 4);
mylcd.Set_Text_colour(BLUE);
mylcd.Set_Text_Size(5);
mylcd.Print_Number_Int(humidity, 220, 110, 0, ' ', 10);
mylcd.Print_String("%", 280, 110);
mylcd.Set_Text_colour(GREEN);
mylcd.Print_Number_Int(pressure, 220, 170, 0, ' ', 10);
mylcd.Print_String("hPa", 125, 170);
mylcd.Set_Text_colour(GREEN);
mylcd.Set_Text_colour(WHITE);
mylcd.Set_Text_Size(6);
char buf[9]; // "HH:MM:SS"
sprintf(buf, "%02d:%02d", now.hour(), now.minute());
mylcd.Print_String(buf, 10, 45);
mylcd.Set_Text_colour(YELLOW);
mylcd.Set_Text_Size(4);
char lol[20]; // "HH:MM:SS"
sprintf(lol, "%02d.%02d", now.month(), now.day());
mylcd.Print_String(lol, 10, 100);
Serial.println(now.second(), DEC);
static int pos = 0;
encoder.tick();
int newPos = encoder.getPosition();
if (pos != newPos) {
Serial.print("pos:");
Serial.print(newPos);
Serial.print(" dir:");
Serial.println((int)(encoder.getDirection()));
pos = newPos;
}
}
Here is my code.