Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "Wire.h"
- #include <dht.h>
- #include <LiquidCrystal.h>
- #define DS3231_I2C_ADDRESS 0x68
- #define DHT22_PIN 9
- dht DHT;
- char* x = "AM";
- unsigned long previousTimer = 0;
- unsigned long previousDHT = 0;
- const long intervalTimer = 1000;
- const long intervalDHT = 2000;
- byte temp[8] =
- {
- B00100,
- B01010,
- B01010,
- B01110,
- B01110,
- B11111,
- B11111,
- B01110
- };
- byte drop[8] =
- {
- B00100,
- B00100,
- B01010,
- B01010,
- B10001,
- B10001,
- B10001,
- B01110,
- };
- LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
- byte bcdToDec(byte val)
- {
- return( (val/16*10) + (val%16) );
- }
- void readDS3231time(byte *second,
- byte *minute,
- byte *hour,
- byte *dayOfWeek,
- byte *dayOfMonth,
- byte *month,
- byte *year)
- {
- Wire.beginTransmission(DS3231_I2C_ADDRESS);
- Wire.write(0); // set DS3231 register pointer to 00h
- Wire.endTransmission();
- Wire.requestFrom(DS3231_I2C_ADDRESS, 7);
- // request seven bytes of data from DS3231 starting from register 00h
- *second = bcdToDec(Wire.read() & 0x7f);
- *minute = bcdToDec(Wire.read());
- *hour = bcdToDec(Wire.read() & 0x3f);
- *dayOfWeek = bcdToDec(Wire.read());
- *dayOfMonth = bcdToDec(Wire.read());
- *month = bcdToDec(Wire.read());
- *year = bcdToDec(Wire.read());
- }
- void displayTime(){
- byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
- readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
- lcd.setCursor(0, 1);
- lcd.print("Time: ");
- if (hour > 12){
- hour -= 12;
- if (hour == 12){
- x = "PM";
- }
- x = "PM";
- }
- else if(!hour){
- hour = 12;
- x = "AM";
- }
- lcd.print(hour, DEC);
- lcd.print(":");
- if (minute<10)
- {
- lcd.print("0");
- }
- lcd.print(minute, DEC);
- lcd.print(" ");
- lcd.print(x);
- lcd.setCursor(0,2);
- lcd.print("Date: ");
- switch(month){
- case 1:
- lcd.print("Jan");
- break;
- case 2:
- lcd.print("Feb");
- break;
- case 3:
- lcd.print("Mar");
- break;
- case 4:
- lcd.print("Apr");
- break;
- case 5:
- lcd.print("May");
- break;
- case 6:
- lcd.print("Jun");
- break;
- case 7:
- lcd.print("Jul");
- break;
- case 8:
- lcd.print("Aug");
- break;
- case 9:
- lcd.print("Sep");
- break;
- case 10:
- lcd.print("Oct");
- break;
- case 11:
- lcd.print("Nov");
- break;
- case 12:
- lcd.print("Dec");
- break;
- }
- lcd.print(" ");
- lcd.print(dayOfMonth, DEC);
- lcd.print(", ");
- lcd.print(year + 2000, DEC);
- }
- void dht22(){
- int chk = DHT.read22(DHT22_PIN);
- lcd.setCursor(3, 4);
- lcd.write(1);
- lcd.print(" ");
- lcd.print(DHT.temperature, 0);
- lcd.print((char)223);
- lcd.print("C ");
- lcd.print(" ");
- lcd.write(2);
- lcd.print(" ");
- lcd.print(DHT.humidity, 0);
- lcd.print("%");
- }
- void setup()
- {
- Wire.begin();
- lcd.createChar(1,temp);
- lcd.createChar(2,drop);
- lcd.begin(20, 4);
- lcd.setCursor(2, 0);
- lcd.print("Thermohygrometer");
- }
- void loop(){
- unsigned long currentMillis = millis();
- if (currentMillis - previousTimer >= intervalTimer) {
- previousTimer = currentMillis;
- displayTime();
- }
- if (currentMillis - previousDHT >= intervalDHT) {
- previousDHT = currentMillis;
- dht22();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement