Files
Arduino/14041130/TestLCD/Display - Copy__old
2026-02-19 06:17:44 +03:30

343 lines
8.3 KiB
Plaintext

#ifndef DISPLAY_H
#define DISPLAY_H
#include <Arduino.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Fonts/FreeSans9pt7b.h>
#include <Fonts/FreeSansBold12pt7b.h>
#include <Fonts/FreeSansBold18pt7b.h>
#include "Config.h"
// -------------------- متغیرهای خارجی --------------------
extern Adafruit_SSD1306 display;
extern DeviceConfig config;
extern SensorData currentData;
extern bool sht31Connected;
extern bool lightSensorConnected;
extern bool coSensorConnected;
extern bool calibrationComplete;
extern bool awaitingSMS2;
extern int signalStrength;
extern String lastMessage;
extern int displayMode;
extern unsigned long lastDisplayChange;
extern unsigned long lastNetworkStatusUpdate;
// Forward declaration
void updateNetworkStatus();
// -------------------- توابع نمایشگر --------------------
inline void displayAllParameters() {
display.clearDisplay();
//display.setTextColor(SSD1306_WHITE);
// عنوان با فونت زیبا
display.setFont();
display.setCursor(0, 4);
if(currentData.power==1)
display.print("P:");
else
display.print("B:");
display.setCursor(15, 4);
display.print(String(currentData.volage, 1));
display.setCursor(45, 4);
display.print("VB:");
display.setCursor(65, 4);
display.print(String(currentData.batteryVoltage, 2));
display.setCursor(97, 4);
display.print("D:");
display.setCursor(107, 4);
display.print(String(currentData.batteryPercent,0)+"%");
display.setFont(&FreeSans9pt7b);
// خط جداکننده
display.drawLine(0, 15, 128, 15, SSD1306_WHITE);
// ارتفاع 12-14
// دما
display.setFont(&FreeSans9pt7b);
display.setCursor(1, 30);
display.print("T:");//16 پیکسل
display.setFont(&FreeSans9pt7b);
display.setCursor(18, 30);
display.print(currentData.temperature, 1);//34 پیکسل
display.setFont(&FreeSans9pt7b);
//display.setCursor(55, 30);
//display.print("-");//3 پیکسل
// رطوبت
display.setCursor(65, 30);
display.print("H:");//16 پیکسل
display.setFont(&FreeSans9pt7b);
display.setCursor(83, 30);
display.print(currentData.humidity, 0);//34 پیکسل
display.setFont(&FreeSans9pt7b);
display.setCursor(110, 31);
display.print("%");
// نور
display.setCursor(1, 55);
display.print("L:");//15 پیکسل
display.setFont(&FreeSans9pt7b);
display.setCursor(20, 55);
display.print((int)currentData.lightLux);//40 پیکسل
//گاز
display.setCursor(70, 55);
display.print("G:");//15 پیکسل
display.setFont(&FreeSans9pt7b);
display.setCursor(88, 55);
display.print((int)currentData.coPPM);//40 پیکسل
// برگشت به فونت پیش‌فرض
display.setFont();
display.display();
}
inline void displayTemperature() {
display.clearDisplay();
// عنوان
display.setFont(&FreeSans9pt7b);
display.setCursor(18, 14);
display.print("Temperature");
// خط جداکننده
display.drawLine(0, 18, 128, 18, SSD1306_WHITE);
// مقدار دما - عدد بزرگ و نرم
display.setFont(&FreeSansBold18pt7b);
display.setCursor(10, 50);
display.print(currentData.temperature, 1);
// واحد
display.setFont(&FreeSansBold12pt7b);
display.setCursor(90, 45);
display.print("C");
// علامت درجه
display.drawCircle(85, 30, 3, SSD1306_WHITE);
// وضعیت سنسور
display.setFont(&FreeSans9pt7b);
display.setCursor(50, 63);
if (!sht31Connected) {
display.print("ERR");
}
display.setFont();
display.display();
}
inline void displayHumidity() {
display.clearDisplay();
display.setTextColor(SSD1306_WHITE);
// عنوان
display.setFont(&FreeSans9pt7b);
display.setCursor(30, 14);
display.print("Humidity");
// خط جداکننده
display.drawLine(0, 18, 128, 18, SSD1306_WHITE);
// مقدار رطوبت - عدد بزرگ و نرم
display.setFont(&FreeSansBold18pt7b);
display.setCursor(25, 50);
display.print(currentData.humidity, 0);
// واحد درصد
display.setFont(&FreeSansBold12pt7b);
display.setCursor(75, 48);
display.print("%");
// وضعیت سنسور
display.setFont(&FreeSans9pt7b);
display.setCursor(50, 63);
if (!sht31Connected) {
display.print("ERR");
}
display.setFont();
display.display();
}
inline void displayCO() {
display.clearDisplay();
display.setTextColor(SSD1306_WHITE);
// عنوان
display.setFont(&FreeSans9pt7b);
display.setCursor(35, 14);
display.print("CO Gas");
// خط جداکننده
display.drawLine(0, 18, 128, 18, SSD1306_WHITE);
// مقدار CO (منفی = در حال کالیبره) - عدد بزرگ و نرم
display.setFont(&FreeSansBold18pt7b);
display.setCursor(8, 50);
display.print(currentData.coPPM, 0);
// واحد
display.setFont(&FreeSans9pt7b);
display.setCursor(70, 48);
display.print("ppm");
// وضعیت سنسور و کالیبراسیون
display.setCursor(5, 63);
if (!calibrationComplete) {
display.print("Calibrating...");
} else if (!coSensorConnected) {
display.print("Sensor ERR");
}
display.setFont();
display.display();
}
inline void displayLight() {
display.clearDisplay();
display.setTextColor(SSD1306_WHITE);
// عنوان
display.setFont(&FreeSans9pt7b);
display.setCursor(40, 14);
display.print("Light");
// خط جداکننده
display.drawLine(0, 18, 128, 18, SSD1306_WHITE);
// مقدار نور - عدد بزرگ و نرم
display.setFont(&FreeSansBold18pt7b);
display.setCursor(8, 50);
display.print((int)currentData.lightLux);
// واحد
display.setFont(&FreeSans9pt7b);
display.setCursor(75, 48);
display.print("lux");
// وضعیت سنسور
display.setCursor(50, 63);
if (!lightSensorConnected) {
display.print("ERR");
}
display.setFont();
display.display();
}
inline void displaySIMStatus() {
display.clearDisplay();
display.setTextColor(SSD1306_WHITE);
// عنوان
display.setFont(&FreeSans9pt7b);
display.setCursor(25, 14);
display.print("SIM Status");
// خط جداکننده
display.drawLine(0, 18, 128, 18, SSD1306_WHITE);
// بقیه اطلاعات با فونت پیش‌فرض برای جا شدن بیشتر
display.setFont();
if (!config.verified) {
// وضعیت تنظیم نشده
display.setTextSize(1);
display.setCursor(20, 28);
if (!awaitingSMS2) {
display.print("Waiting SMS1");
display.setCursor(15, 42);
display.print("for activation");
} else {
display.print("Waiting SMS2");
display.setCursor(15, 42);
display.print("for config");
}
} else {
// وضعیت تنظیم شده
display.setTextSize(1);
display.setCursor(5, 22);
display.print("ID:");
display.setCursor(25, 22);
display.print(config.deviceId);
display.setCursor(5, 32);
display.print("SIM:");
display.setCursor(30, 32);
display.print(simTypeToString(config.simType));
display.setCursor(5, 42);
display.print("Upload:");
display.setCursor(50, 42);
display.print(config.uploadInterval);
display.print("m");
// سیگنال با نشانگر گرافیکی
display.setCursor(80, 42);
display.print("Sig:");
display.setCursor(105, 42);
display.print(signalStrength);
}
// آخرین پیام
display.setFont(&FreeSans9pt7b);
display.setCursor(5, 62);
if (lastMessage.length() > 14) {
display.print(lastMessage.substring(0, 14));
} else {
display.print(lastMessage);
}
display.setFont();
display.display();
}
inline void updateDisplay() {
// تغییر صفحه هر 3 ثانیه
if (millis() - lastDisplayChange > 3000) {
displayMode = (displayMode + 1) % 6; // 6 صفحه داریم
lastDisplayChange = millis();
}
// به‌روزرسانی وضعیت شبکه هر 30 ثانیه
if (millis() - lastNetworkStatusUpdate > 30000) {
updateNetworkStatus();
lastNetworkStatusUpdate = millis();
}
switch(displayMode) {
case 0:
case 1:
case 2:
case 3:
case 5:
displayAllParameters();
break;
// case 1:
// displayTemperature();
// break;
// case 2:
// displayHumidity();
// break;
// case 3:
// displayCO();
// break;
// case 4:
// displayLight();
// break;
case 4:
displaySIMStatus();
break;
}
}
#endif // DISPLAY_H