Advertisement
Al_Ninyo

Weather Station v2.x

Jan 10th, 2016
1,754
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.15 KB | None | 0 0
  1. // LCD Nokia 5110 start -------------------
  2.  
  3. //LCD pins
  4. //RST - 6
  5. //CE - 7
  6. //DC - 5
  7. //Din - 4
  8. //Clk - 3
  9.  
  10. #include <PCD8544.h>
  11. static PCD8544 lcd;
  12.  
  13. // LCD Nokia 5110 end -------------------
  14.  
  15. // DS18B20 start -------------------
  16.  
  17. #include <OneWire.h>
  18. #include <DallasTemperature.h>
  19. #define ONE_WIRE_BUS 12
  20. OneWire oneWire(ONE_WIRE_BUS);
  21. DallasTemperature sensors(&oneWire);
  22. DeviceAddress firstThermometer;
  23.  
  24. // DS18B20 end -------------------
  25.  
  26. // BMP180 start -------------------
  27.  
  28. #include <Wire.h>
  29. #include <Adafruit_BMP085.h>
  30. Adafruit_BMP085 bmp;
  31.  
  32. // BMP180 end -------------------
  33.  
  34. // DHT11 start -------------------
  35.  
  36. #include "DHT.h"
  37. #define DHTPIN 2
  38. #define DHTTYPE DHT11
  39. DHT dht(DHTPIN, DHTTYPE);
  40.  
  41. // DHT11 end -------------------
  42.  
  43. // DS1307 start -------------------
  44.  
  45. #include <Time.h>
  46. #include <DS1307RTC.h>
  47.  
  48. // DS1307 end -------------------
  49.  
  50. // Используемые переменные start -------------------
  51.  
  52. int tempDS = 0;         // температура с DS18B20
  53. int tempBMP = 0;          // температура с BMP180
  54. int presBMP = 0;          // атмосферное давление с BMP180
  55. int tempDHT = 0;          // температура с DHT11, не используется
  56. int humiDHT = 0;          // влажность с DHT11
  57.  
  58. const char *days[7] = { "Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб" };
  59.  
  60. // знак градуса
  61. static const byte gradus[] = {
  62. B00000000,
  63. B00000110,
  64. B00001001,
  65. B00001001,
  66. B00000110 };
  67.  
  68. // иконка Луны (чОрный круг)
  69. static const byte moon[] = {
  70. B00011100,
  71. B00111110,
  72. B00111110,
  73. B00111110,
  74. B00011100 };
  75.  
  76. // иконка солнышка
  77. static const byte sun[] = {
  78. B00101010,
  79. B00011100,
  80. B00110110,
  81. B00011100,
  82. B00101010 };
  83.  
  84. // Используемые переменные end -------------------
  85.  
  86. // добавление нолика к часам/минутам/дате..., если там одна цифра
  87. void print2digits(int number) {
  88.   if (number >= 0 && number < 10) {
  89.     lcd.print('0');
  90.   }
  91.   lcd.print(number);
  92. }
  93.  
  94. void setup() {
  95.   lcd.begin(84, 48);
  96.   lcd.createChar(0, gradus);
  97.   lcd.createChar(1, moon);
  98.   lcd.createChar(2, sun);
  99.   sensors.begin();
  100.   if (!sensors.getAddress(firstThermometer, 0)) {
  101.     lcd.setCursor(0,0);
  102.     lcd.println("Проблемы с DS18!");
  103.   }
  104.   sensors.setResolution(firstThermometer, 9);
  105.   bmp.begin();
  106.   dht.begin();
  107.   lcd.setCursor(18,0);
  108.   lcd.print("Погодная");
  109.   lcd.setCursor(18,1);
  110.   lcd.print("станция");
  111.   lcd.setCursor(12,3);
  112.   lcd.print("версия 2.8");
  113.   lcd.setCursor(6,5);
  114.   lcd.print("by  Al'Ninyo");
  115.   delay(3000);
  116.   lcd.clear();
  117.  
  118. }
  119.  
  120. void loop() {
  121.   tmElements_t tm;
  122.   RTC.read(tm);
  123.   sensors.requestTemperatures();
  124.   tempDS = sensors.getTempC(firstThermometer);
  125.   tempBMP = bmp.readTemperature();
  126.   presBMP = bmp.readPressure()/133.3;
  127.   tempDHT = dht.readTemperature();
  128.   humiDHT = dht.readHumidity();
  129.  
  130.   lcd.setCursor(6,0);
  131.   lcd.print("Улица");
  132.   lcd.setCursor(40,0);
  133.   lcd.print("|  ");
  134.   lcd.print("Дом");
  135.  
  136. /*  if (tempBMP < -10) {
  137.     lcd.write(1);
  138.     lcd.setCursor(12,3);
  139.     lcd.print("Сиди дома!  ");
  140.   } else if (tempBMP < 0) {
  141.     lcd.setCursor(0,3);
  142.     lcd.print("Одевайся тепло");
  143.   }
  144. */
  145.  
  146.   lcd.setCursor(0,1);
  147.   lcd.print(tempBMP);
  148.   lcd.write(0);
  149.   lcd.print("C ");
  150.   lcd.setCursor(40,1);
  151.   lcd.print("| ");
  152.   lcd.print(tempDS);
  153.   lcd.write(0);
  154.   lcd.print("C ");
  155.  
  156.   lcd.setCursor(0,2);
  157.   lcd.print(presBMP);
  158.   lcd.print(" mm");
  159.   lcd.setCursor(40,2);
  160.   lcd.print("| ");
  161.   lcd.print(humiDHT);
  162.   lcd.print("% ");
  163.    
  164.   lcd.setCursor(12,4);
  165.   if ( tm.Second % 2 == 1) {
  166.     lcd.print(" ");
  167.   } else if (tm.Hour >= 7 && tm.Hour <= 19) {
  168.     lcd.write(2);
  169.   } else {
  170.     lcd.write(1);
  171.   }
  172.   lcd.print(" ");
  173.   print2digits(tm.Hour);
  174.   lcd.print(":");
  175.   print2digits(tm.Minute);
  176.   lcd.print(":");
  177.   print2digits(tm.Second);
  178.  
  179.   lcd.setCursor(0,5);
  180.   lcd.print(days[tm.Wday]);
  181.   lcd.print(" ");
  182.   print2digits(tm.Day);
  183.   lcd.print(".");
  184.   print2digits(tm.Month);
  185.   lcd.print(".");
  186.   lcd.print(tmYearToCalendar(tm.Year));
  187.  
  188. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement