SHARE
TWEET

Weather Station LCD1602

Al_Ninyo Jan 23rd, 2016 (edited) 278 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // LCD1602 start -------------------
  2.  
  3. #include <Wire.h>
  4. #include <LiquidCrystal_I2C.h>
  5. LiquidCrystal_I2C lcd(0x27,16,2);
  6.  
  7. // LCD1602 end -------------------
  8.  
  9. // DS18B20 start -------------------
  10.  
  11. #include <OneWire.h>
  12. #include <DallasTemperature.h>
  13. #define ONE_WIRE_BUS 12
  14. OneWire oneWire(ONE_WIRE_BUS);
  15. DallasTemperature sensors(&oneWire);
  16. DeviceAddress firstThermometer;
  17.  
  18. // DS18B20 end -------------------
  19.  
  20. // BMP180 start -------------------
  21.  
  22. //#include <Wire.h>
  23. #include <Adafruit_BMP085.h>
  24. Adafruit_BMP085 bmp;
  25.  
  26. // BMP180 end -------------------
  27.  
  28. // DHT11 start -------------------
  29.  
  30. #include "DHT.h"
  31. #define DHTPIN 2
  32. #define DHTTYPE DHT11
  33. DHT dht(DHTPIN, DHTTYPE);
  34.  
  35. // DHT11 end -------------------
  36.  
  37. // DS1307 start -------------------
  38.  
  39. #include <Time.h>
  40. #include <DS1307RTC.h>
  41.  
  42. // DS1307 end -------------------
  43.  
  44. // Используемые переменные start -------------------
  45.  
  46. int tempDS = 0;         // температура с DS18B20
  47. int tempBMP = 0;          // температура с BMP180
  48. int presBMP = 0;          // атмосферное давление с BMP180
  49. int tempDHT = 0;          // температура с DHT11, не используется
  50. int humiDHT = 0;          // влажность с DHT11
  51.  
  52. const char *days[7] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
  53.  
  54. // Используемые переменные end -------------------
  55.  
  56. // добавление нолика к часам/минутам/дате..., если там одна цифра
  57. void print2digits(int number) {
  58.   if (number >= 0 && number < 10) {
  59.     lcd.print('0');
  60.   }
  61.   lcd.print(number);
  62. }
  63.  
  64. void setup() {
  65.   lcd.init();
  66.   lcd.backlight();
  67.   sensors.begin();
  68.   if (!sensors.getAddress(firstThermometer, 0)) {
  69.     lcd.setCursor(0,0);
  70.     lcd.println("DS18 ERROR!");
  71.   }
  72.   sensors.setResolution(firstThermometer, 9);
  73.   bmp.begin();
  74.   dht.begin();
  75.   lcd.setCursor(4,0);
  76.   lcd.print("Start...");
  77.   delay(3000);
  78.   lcd.clear();
  79.  
  80. }
  81.  
  82. void loop() {
  83.   tmElements_t tm;
  84.   RTC.read(tm);
  85.   sensors.requestTemperatures();
  86.   tempDS = sensors.getTempC(firstThermometer);
  87.   tempBMP = bmp.readTemperature();
  88.   presBMP = bmp.readPressure()/133.3;
  89.   tempDHT = dht.readTemperature();
  90.   humiDHT = dht.readHumidity();
  91.  
  92.   if ( tm.Second % 10 == 0) {
  93.     lcd.setCursor(0,0);
  94.     lcd.print("U ");
  95.     lcd.print(tempBMP);
  96.     lcd.print("*C ");
  97.     lcd.print(" / ");
  98.     lcd.print(presBMP);
  99.     lcd.print(" ");
  100.     lcd.setCursor(0,1);
  101.     lcd.print("H ");
  102.     lcd.print(tempDS);
  103.     lcd.print("*C ");
  104.     lcd.print(" / ");
  105.     lcd.print(humiDHT);
  106.     lcd.print("%");
  107.   }
  108.   if ( tm.Second % 10 == 9) {
  109.     lcd.setCursor(0,0);
  110.     print2digits(tm.Hour);
  111.     lcd.print(":");
  112.     print2digits(tm.Minute);
  113.     lcd.print(":");
  114.     print2digits(tm.Second);
  115.    
  116.     lcd.setCursor(0,1);
  117.     lcd.print(days[tm.Wday]);
  118.     lcd.print(" ");
  119.     print2digits(tm.Day);
  120.     lcd.print(".");
  121.     print2digits(tm.Month);
  122.     lcd.print(".");
  123.     lcd.print(tmYearToCalendar(tm.Year));
  124.   }
  125. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Not a member of Pastebin yet?
Sign Up, it unlocks many cool features!
 
Top