#define A 18
#define B 23
#define C 4
#define D 16
#define E 17
#define F 19
#define G 0
#define DP 15 // PIN для точки
#define DIG1 5
#define DIG2 21
#define DIG3 22
#define DIG4 2
#include "DHTesp.h"
#define DHT_PIN 33
DHTesp dhtSensor;
void clear_digit() {
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
digitalWrite(DP, LOW); // Отключаем точку
}
void zero() { digitalWrite(A, HIGH); digitalWrite(B, HIGH); digitalWrite(C, HIGH); digitalWrite(D, HIGH); digitalWrite(E, HIGH); digitalWrite(F, HIGH); digitalWrite(G, LOW); }
void one() { digitalWrite(A, LOW); digitalWrite(B, HIGH); digitalWrite(C, HIGH); digitalWrite(D, LOW); digitalWrite(E, LOW); digitalWrite(F, LOW); digitalWrite(G, LOW); }
void two() { digitalWrite(A, HIGH); digitalWrite(B, HIGH); digitalWrite(C, LOW); digitalWrite(D, HIGH); digitalWrite(E, HIGH); digitalWrite(F, LOW); digitalWrite(G, HIGH); }
void three() { digitalWrite(A, HIGH); digitalWrite(B, HIGH); digitalWrite(C, HIGH); digitalWrite(D, HIGH); digitalWrite(E, LOW); digitalWrite(F, LOW); digitalWrite(G, HIGH); }
void four() { digitalWrite(A, LOW); digitalWrite(B, HIGH); digitalWrite(C, HIGH); digitalWrite(D, LOW); digitalWrite(E, LOW); digitalWrite(F, HIGH); digitalWrite(G, HIGH); }
void five() { digitalWrite(A, HIGH); digitalWrite(B, LOW); digitalWrite(C, HIGH); digitalWrite(D, HIGH); digitalWrite(E, LOW); digitalWrite(F, HIGH); digitalWrite(G, HIGH); }
void six() { digitalWrite(A, HIGH); digitalWrite(B, LOW); digitalWrite(C, HIGH); digitalWrite(D, HIGH); digitalWrite(E, HIGH); digitalWrite(F, HIGH); digitalWrite(G, HIGH); }
void seven() { digitalWrite(A, HIGH); digitalWrite(B, HIGH); digitalWrite(C, HIGH); digitalWrite(D, LOW); digitalWrite(E, LOW); digitalWrite(F, LOW); digitalWrite(G, LOW); }
void eight() { digitalWrite(A, HIGH); digitalWrite(B, HIGH); digitalWrite(C, HIGH); digitalWrite(D, HIGH); digitalWrite(E, HIGH); digitalWrite(F, HIGH); digitalWrite(G, HIGH); }
void nine() { digitalWrite(A, HIGH); digitalWrite(B, HIGH); digitalWrite(C, HIGH); digitalWrite(D, HIGH); digitalWrite(E, LOW); digitalWrite(F, HIGH); digitalWrite(G, HIGH); }
unsigned long previousMillis = 0;
const long interval = 2000; // Интервал обновления показаний датчика
unsigned long displayMillis = 0;
const long displayInterval = 2; // Уменьшили интервал для устранения мерцания
int digit = 1;
int tempa = 0;
int humi = 0;
void displayNumber(int digit, int value) {
switch (digit) {
case 1:
digitalWrite(DIG1, LOW);
digitalWrite(DIG2, HIGH);
digitalWrite(DIG3, HIGH);
digitalWrite(DIG4, HIGH);
digitalWrite(DP, LOW); // Выключаем точку
break;
case 2:
digitalWrite(DIG1, HIGH);
digitalWrite(DIG2, LOW);
digitalWrite(DIG3, HIGH);
digitalWrite(DIG4, HIGH);
digitalWrite(DP, HIGH); // Включаем точку
break;
case 3:
digitalWrite(DIG1, HIGH);
digitalWrite(DIG2, HIGH);
digitalWrite(DIG3, LOW);
digitalWrite(DIG4, HIGH);
digitalWrite(DP, LOW); // Выключаем точку
break;
case 4:
digitalWrite(DIG1, HIGH);
digitalWrite(DIG2, HIGH);
digitalWrite(DIG3, HIGH);
digitalWrite(DIG4, LOW);
digitalWrite(DP, LOW); // Выключаем точку
break;
}
switch (value) {
case 0: zero(); break;
case 1: one(); break;
case 2: two(); break;
case 3: three(); break;
case 4: four(); break;
case 5: five(); break;
case 6: six(); break;
case 7: seven(); break;
case 8: eight(); break;
case 9: nine(); break;
}
}
void setup() {
Serial.begin(115200);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
pinMode(A, OUTPUT);
pinMode(B, OUTPUT);
pinMode(C, OUTPUT);
pinMode(D, OUTPUT);
pinMode(E, OUTPUT);
pinMode(F, OUTPUT);
pinMode(G, OUTPUT);
pinMode(DP, OUTPUT);
pinMode(DIG1, OUTPUT);
pinMode(DIG2, OUTPUT);
pinMode(DIG3, OUTPUT);
pinMode(DIG4, OUTPUT);
digitalWrite(DIG1, HIGH);
digitalWrite(DIG2, HIGH);
digitalWrite(DIG3, HIGH);
digitalWrite(DIG4, HIGH);
}
void loop() {
unsigned long currentMillis = millis();
// Обновление показаний датчика каждые 2 секунды
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
TempAndHumidity data = dhtSensor.getTempAndHumidity();
Serial.println("Temp: " + String(data.temperature, 2) + "°C");
Serial.println("Humidity: " + String(data.humidity, 1) + "%");
double temp = data.temperature;
if (temp >= 0) {
tempa = static_cast<int>(temp + 0.5);
} else {
tempa = static_cast<int>(temp - 0.5);
}
Serial.println("Температура: " + String(tempa));
double hum = data.humidity;
if (hum >= 0) {
humi = static_cast<int>(hum + 0.5);
} else {
humi = static_cast<int>(hum - 0.5);
}
Serial.println("Влажность: " + String(humi));
}
int tempTens = tempa / 10;
int tempUnits = tempa % 10;
int humTens = humi / 10;
int humUnits = humi % 10;
if (currentMillis - displayMillis >= displayInterval) {
displayMillis = currentMillis;
switch (digit) {
case 1: displayNumber(1, tempTens); break;
case 2: displayNumber(2, tempUnits); break;
case 3: displayNumber(3, humTens); break;
case 4: displayNumber(4, humUnits); break;
}
digit++;
if (digit > 4) digit = 1;
clear_digit();
}
}