From e65c347deb5f210d89bc7220fc5f48ba04cc0c0a Mon Sep 17 00:00:00 2001 From: cheykrym Date: Mon, 30 Mar 2026 01:30:13 +0300 Subject: [PATCH] oled --- src/core/display/body/body.cpp | 80 ++++++++++++++++++++++++++++++++++ src/core/display/body/body.h | 11 +++++ src/main.cpp | 6 +-- 3 files changed, 94 insertions(+), 3 deletions(-) create mode 100644 src/core/display/body/body.cpp create mode 100644 src/core/display/body/body.h diff --git a/src/core/display/body/body.cpp b/src/core/display/body/body.cpp new file mode 100644 index 0000000..d1d4d76 --- /dev/null +++ b/src/core/display/body/body.cpp @@ -0,0 +1,80 @@ +#include +#include +#include +#include +#include "body.h" + +// ===== OLED CONFIG ===== +// ESP32 ESP-WROOM-32D с OLED 0.96" (SSD1306) +#define SCREEN_WIDTH 128 +#define SCREEN_HEIGHT 64 +#define OLED_RESET -1 +#define SCREEN_ADDR 0x3C + +// SDA/SCL пины для CH340 с OLED +#define SDA_PIN 21 +#define SCL_PIN 22 + +static Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); + +void oledInit() { + Wire.begin(SDA_PIN, SCL_PIN); + + if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDR)) { + Serial.println("SSD1306 allocation failed"); + for (;;); + } + + display.clearDisplay(); + display.setTextSize(1); + display.setTextColor(SSD1306_WHITE); + display.display(); + + oledShowBoot(); +} + +// ===== Screens ===== + +void oledShowBoot() { + display.clearDisplay(); + display.setCursor(0, 10); + display.setTextSize(1); + display.println("Robot booting"); + display.setCursor(0, 25); + display.println("Please wait..."); + display.display(); +} + +void oledShowWiFi(const char* ssid, int rssi) { + display.clearDisplay(); + display.setCursor(0, 10); + display.setTextSize(1); + display.print("WiFi: "); + display.println(ssid); + display.setCursor(0, 30); + display.print("RSSI: "); + display.print(rssi); + display.println(" dBm"); + display.display(); +} + +void oledShowMode(const char* mode) { + display.clearDisplay(); + display.setCursor(0, 10); + display.setTextSize(1); + display.print("MODE: "); + display.println(mode); + display.setCursor(0, 30); + display.println("Ready"); + display.display(); +} + +void oledShowText(const char* line1, const char* line2) { + display.clearDisplay(); + display.setCursor(0, 10); + display.setTextSize(1); + display.println(line1); + display.setCursor(0, 30); + display.println(line2); + display.display(); +} diff --git a/src/core/display/body/body.h b/src/core/display/body/body.h new file mode 100644 index 0000000..3cbc115 --- /dev/null +++ b/src/core/display/body/body.h @@ -0,0 +1,11 @@ +#pragma once + +void oledInit(); + +// базовые экраны +void oledShowBoot(); +void oledShowWiFi(const char* ssid, int rssi); +void oledShowMode(const char* mode); + +// универсально (2 строки) +void oledShowText(const char* line1, const char* line2); diff --git a/src/main.cpp b/src/main.cpp index 15e1e3e..0f79ea4 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,6 +1,6 @@ #include -#include "core/deprecate/lcd_status/lcd_status.h" +#include "core/display/body/body.h" #include "core/servo/servo.h" #include "core/ultrasonic/ultrasonic.h" #include "core/display/face/face.h" @@ -15,10 +15,10 @@ void setup() { Serial.begin(115200); - lcdInit(); + oledInit(); servoInit(); ultrasonicInit(); - faceInit(); + // faceInit(); actuatorsInit(); webServerInit(); wsInit();