1
4
5#include <Adafruit_Sensor.h>
6#include <DHT.h>
7#include <DHT_U.h>
8#include <SevSeg.h>
9DHT dht(A2,DHT22);
10SevSeg Display;
11char text[10][6];
12int i = 0;
13unsigned long timer;
14
15
16const unsigned long period = 1000;
17const unsigned long led_period = 500;
18unsigned long startMillis;
19unsigned long led_startMillis;
20unsigned long currentMillis;
21unsigned long led_currentMillis;
22const int hrs_btn = A0;
23const int min_btn = A1;
24const int ledPin = 13;
25int Hrs = 0;
26int Min = 0;
27int Sec = 0;
28int Time = 0000;
29int ledState = HIGH;
30
31void setup() {
32 pinMode(hrs_btn, INPUT_PULLUP);
33 pinMode(min_btn, INPUT_PULLUP);
34 pinMode(ledPin, OUTPUT);
35 byte numDigits = 4;
36 byte digitPins[] = {12, 10, 9, 11};
37
38 byte segmentPins[] = {2, 3, 4, 5, 6, 7, 8,0};
39 bool resistorsOnSegments = false;
40 byte hardwareConfig = COMMON_CATHODE;
41 bool updateWithDelays = false;
42 bool leadingZeros = true;
43 bool disableDecPoint = true;
44 Display.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments,
45 updateWithDelays, leadingZeros, disableDecPoint);
46 Display.setBrightness(100);
47 dht.begin();
48 pinMode(ledPin, OUTPUT);
49 pinMode(A2, INPUT);
50 }
51
52 void loop()
53{
54 char mychar[ ] = "ORA";
55 float hu = dht.readHumidity();
56 float t = dht.readTemperature();
57 float orario = Time;
58
59
60
61 String e = String (mychar);
62 String f = e.substring (0,4);
63 f.toCharArray(text[1],5);
64
65
66 orario=orario*10;
67 String c = String (orario);
68 String d = c.substring (0,4);
69 d.toCharArray(text[2],5);
70
71
72 t=t*10;
73 String k = String(t);
74 String r = k.substring (0,3)+"*";
75 r.toCharArray(text[3],5);
76
77
78 hu=hu*10;
79 String A = String(hu);
80 String B = A.substring(0,3)+"h";
81 B.toCharArray(text[4],5);
82
83 switch (i)
84{
85 case 1:
86 digitalWrite(ledPin, LOW);
87 break;
88 case 2:
89 digitalWrite(ledPin, HIGH);
90 break;
91 case 3:
92 digitalWrite(ledPin, LOW);
93 Display.setNumber(Time);
94 if (digitalRead(hrs_btn) == LOW){goto X;}
95 if (digitalRead(min_btn) == LOW){goto X;}
96 break;
97 case 4:
98 digitalWrite(ledPin, LOW);
99 break;
100}
101 if (millis() > (timer + 6000))
102 {
103 switch(i);
104 Display.setChars(text[i]);
105 i++;
106 if (i >= 5) i = 1;
107 timer = millis();}
108
109
110
111 X: currentMillis = millis();
112 if (currentMillis - startMillis >= period)
113 {
114 Sec = Sec + 1;
115 startMillis = currentMillis;
116 }
117 led_currentMillis = millis();
118 if (led_currentMillis - led_startMillis >= led_period)
119 { led_startMillis = led_currentMillis;
120
121 if (ledState == LOW) { ledState = HIGH;
122
123 if (digitalRead(hrs_btn) == LOW)
124 { Hrs = Hrs + 1; }
125
126 if (digitalRead(min_btn) == LOW)
127 { Min = Min + 1; Sec = 0; }
128 }
129 else
130 { ledState = LOW; }
131 digitalWrite(ledPin, ledState);
132 }
133 if (Sec == 60)
134 {
135 Sec = 0;
136 Min = Min + 1;
137 }
138 if (Min == 60)
139 {
140 Min = 0;
141 Hrs = Hrs + 1;
142 }
143 if (Hrs == 24)
144 {
145 Hrs = 0;
146 }
147 Time = Hrs * 100 + Min;
148
149 Display.refreshDisplay();
150}
151
152
155