#define A 18
#define B 23
#define C 4
#define D 16
#define E 17
#define F 19
#define G 0
#define DP 15
#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);
}
void minus() {
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, HIGH);
}
void space() {
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(F, LOW);
digitalWrite(G, LOW);
}
void tempe() {
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
}
void humil() {
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, HIGH);
digitalWrite(D, LOW);
digitalWrite(E, HIGH);
digitalWrite(F, HIGH);
digitalWrite(G, HIGH);
}
unsigned long previousMillis = 0;
unsigned long displayMillis = 0;
const long interval = 2000;
const long displayInterval = 1;
int digit = 1;
double tempi = 0;
double tempi3 = 0;
int tempi2 = 0;
double humi = 0;
int current_temp = 0;
bool showTemperature = true;
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, LOW);
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;
case 10: tempe(); break;
case 11: humil(); break;
case 12: minus(); break;
case 13: space(); 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();
if( millis() - current_temp > 5000)
{
showTemperature = !showTemperature;
current_temp = millis();
}
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
TempAndHumidity data = dhtSensor.getTempAndHumidity();
tempi = data.temperature;
if (abs(tempi)<10){
tempi3=tempi;
}
else{
tempi2=static_cast<int>(round(tempi));
}
humi = data.humidity;
}
int tempTens=0;
int tempUnits=0;
// Обновление дисплея
if (currentMillis - displayMillis >= displayInterval) {
displayMillis = currentMillis;
if (showTemperature) {
if (abs(tempi)<10){
tempTens = static_cast<int>((abs(tempi3)*10)) /10 ;
tempUnits = static_cast<int>((abs(tempi3)*10)) % 10;
}
else{
tempTens = abs(tempi2) / 10;
tempUnits = abs(tempi2) % 10;
}
// Отображаем температуру
switch (digit) {
case 1: displayNumber(1, 10); break; // Символ "t"
case 2: displayNumber(2, (tempi < 0) ? 12 : 13); break;
{
case 3: if (abs(tempi)<10){displayNumber(3, tempTens);digitalWrite(DP, HIGH); break;
}
else{displayNumber(3, tempTens); break;};
case 4: displayNumber(4, tempUnits); break;
}
}
}
else{
int HUMI=static_cast<int>(humi*10);
int humTens = 0;
int humUnits = 0;
int humDes = 0;
if (humi==100){
humTens = 1;
humUnits = 0;
humDes = 0;
} else{
humTens = HUMI / 100;
humUnits = (HUMI % 100)/10;
humDes = (HUMI % 100)%10;
}
// Отображаем влажность
switch (digit) {
case 1: displayNumber(1, 11); break; // Символ "H"
case 2: displayNumber(2, humTens); break;
case 3: if (humi<100){displayNumber(3, humUnits); digitalWrite(DP, HIGH); break;
}
else{displayNumber(3, humUnits); digitalWrite(DP, LOW); break;};
case 4: displayNumber(4, humDes); break;
}
}
digit++;
if (digit > 4) digit = 1;
clear_digit();
}
}