diff --git a/platformio.ini b/platformio.ini index 4b444fe..2179139 100644 --- a/platformio.ini +++ b/platformio.ini @@ -15,6 +15,8 @@ framework = arduino monitor_speed = 115200 lib_deps = - adafruit/Adafruit GFX Library - adafruit/Adafruit SSD1306 - links2004/WebSockets \ No newline at end of file + adafruit/Adafruit BusIO@^1.17.4 + adafruit/Adafruit GFX Library@^1.12.4 + adafruit/Adafruit SSD1306@^2.5.16 + links2004/WebSockets@^2.7.3 + LiquidCrystal_I2C@^1.1.4 \ No newline at end of file diff --git a/src/lcd_status.cpp b/src/lcd_status.cpp new file mode 100644 index 0000000..4b8c894 --- /dev/null +++ b/src/lcd_status.cpp @@ -0,0 +1,65 @@ +#include +#include +#include +#include "lcd_status.h" + +// ===== LCD CONFIG ===== +#define SDA_PIN 21 +#define SCL_PIN 22 + +#define LCD_ADDR 0x3F +#define LCD_COLS 16 +#define LCD_ROWS 2 + +static LiquidCrystal_I2C lcd(LCD_ADDR, LCD_COLS, LCD_ROWS); + +void lcdInit() { + Wire.begin(SDA_PIN, SCL_PIN); + + lcd.init(); + lcd.backlight(); + lcd.clear(); + + lcdShowBoot(); +} + +// ===== Screens ===== + +void lcdShowBoot() { + lcd.clear(); + lcd.setCursor(0, 0); + lcd.print("Robot booting"); + lcd.setCursor(0, 1); + lcd.print("Please wait..."); +} + +void lcdShowWiFi(const char* ssid, int rssi) { + lcd.clear(); + lcd.setCursor(0, 0); + lcd.print("WiFi:"); + lcd.print(ssid); + + lcd.setCursor(0, 1); + lcd.print("RSSI:"); + lcd.print(rssi); + lcd.print(" dBm"); +} + +void lcdShowMode(const char* mode) { + lcd.clear(); + lcd.setCursor(0, 0); + lcd.print("MODE:"); + lcd.print(mode); + + lcd.setCursor(0, 1); + lcd.print("Ready"); +} + +void lcdShowText(const char* line1, const char* line2) { + lcd.clear(); + lcd.setCursor(0, 0); + lcd.print(line1); + + lcd.setCursor(0, 1); + lcd.print(line2); +} diff --git a/src/lcd_status.h b/src/lcd_status.h new file mode 100644 index 0000000..d4eb1dc --- /dev/null +++ b/src/lcd_status.h @@ -0,0 +1,11 @@ +#pragma once + +void lcdInit(); + +// базовые экраны +void lcdShowBoot(); +void lcdShowWiFi(const char* ssid, int rssi); +void lcdShowMode(const char* mode); + +// универсально (2 строки) +void lcdShowText(const char* line1, const char* line2); diff --git a/src/main.cpp b/src/main.cpp index 3d31be4..5f34147 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,17 +1,20 @@ #include -#include "actuators.h" -#include "web_server.h" -#include "controller.h" -#include "robot_state.h" -#include "ws_server.h" +#include "lcd_status.h" #include "servo.h" #include "ultrasonic.h" #include "face.h" +#include "robot_state.h" + +#include "actuators.h" +#include "web_server.h" +#include "ws_server.h" +#include "controller.h" void setup() { Serial.begin(115200); + lcdInit(); servoInit(); ultrasonicInit(); faceInit(); diff --git a/src/web_server.cpp b/src/web_server.cpp index 0873c73..56032ea 100644 --- a/src/web_server.cpp +++ b/src/web_server.cpp @@ -6,6 +6,7 @@ #include "controller.h" #include "robot_state.h" #include "ultrasonic.h" +#include "lcd_status.h" static WebServer server(80); @@ -64,6 +65,8 @@ void handleMode() { return; } + lcdShowMode(modeToStr(robot.mode)); + // lcdShowText("SERVICE MODE", "Waiting..."); server.send(200, "text/plain", String("OK MODE=") + modeToStr(robot.mode)); } @@ -96,6 +99,7 @@ void webServerInit() { } if (WiFi.status() == WL_CONNECTED) { + lcdShowWiFi(WIFI_SSID, WiFi.RSSI()); Serial.print("\nConnected. IP: "); Serial.println(WiFi.localIP()); }