Advertisement
Al_Ninyo

Weather Station v3.2

Jan 13th, 2016
636
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.37 KB | None | 0 0
  1. // 7-segment start -------------------
  2. /*
  3.  ***** These pin numbers will probably not work with your hardware *****
  4.  pin 11 is connected to the DataIn
  5.  pin 10 is connected to the CLK
  6.  pin 9 is connected to LOAD
  7.  We have only a single MAX72XX.
  8.  */
  9. #include "LedControl.h"
  10. LedControl lc=LedControl(11,10,9,1);
  11.  
  12.  
  13. // 7-segment end -------------------
  14.  
  15. // LCD Nokia 5110 start -------------------`
  16.  
  17. //LCD pins
  18. //RST - 6
  19. //CE - 7
  20. //DC - 5
  21. //Din - 4
  22. //Clk - 3
  23.  
  24. #include <PCD8544.h>
  25. static PCD8544 lcd;
  26.  
  27. // LCD Nokia 5110 end -------------------
  28.  
  29. // DS18B20 start -------------------
  30.  
  31. #include <OneWire.h>
  32. #include <DallasTemperature.h>
  33. #define ONE_WIRE_BUS 12
  34. OneWire oneWire(ONE_WIRE_BUS);
  35. DallasTemperature sensors(&oneWire);
  36. DeviceAddress firstThermometer;
  37.  
  38. // DS18B20 end -------------------
  39.  
  40. // BMP180 start -------------------
  41.  
  42. #include <Wire.h>
  43. #include <Adafruit_BMP085.h>
  44. Adafruit_BMP085 bmp;
  45.  
  46. // BMP180 end -------------------
  47.  
  48. // DHT11 start -------------------
  49.  
  50. #include "DHT.h"
  51. #define DHTPIN 2
  52. #define DHTTYPE DHT11
  53. DHT dht(DHTPIN, DHTTYPE);
  54.  
  55. // DHT11 end -------------------
  56.  
  57. // DS1307 start -------------------
  58.  
  59. #include <Time.h>
  60. #include <DS1307RTC.h>
  61.  
  62. // DS1307 end -------------------
  63.  
  64. // Используемые переменные start -------------------
  65.  
  66. int tempDS = 0;         // температура с DS18B20
  67. int tempBMP = 0;          // температура с BMP180
  68. int presBMP = 0;          // атмосферное давление с BMP180
  69. int tempDHT = 0;          // температура с DHT11, не используется
  70. int humiDHT = 0;          // влажность с DHT11
  71.  
  72. const char *days[7] = { "Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб" };
  73.  
  74. // знак градуса
  75. static const byte gradus[] = {
  76. B00000000,
  77. B00000110,
  78. B00001001,
  79. B00001001,
  80. B00000110 };
  81.  
  82. // иконка Луны (чОрный круг)
  83. static const byte moon[] = {
  84. B00011100,
  85. B00111110,
  86. B00111110,
  87. B00111110,
  88. B00011100 };
  89.  
  90. // иконка солнышка
  91. static const byte sun[] = {
  92. B00101010,
  93. B00011100,
  94. B00110110,
  95. B00011100,
  96. B00101010 };
  97.  
  98. // Используемые переменные end -------------------
  99.  
  100. // добавление нолика к часам/минутам/дате..., если там одна цифра
  101. void print2digits(int number) {
  102.   if (number >= 0 && number < 10) {
  103.     lcd.print('0');
  104.   }
  105.   lcd.print(number);
  106. }
  107.  
  108. void setup() {
  109.   /*
  110.    The MAX72XX is in power-saving mode on startup,
  111.    we have to do a wakeup call
  112.    */
  113.   lc.shutdown(0,false);
  114.   /* Set the brightness to a medium values */
  115.   lc.setIntensity(0,8);
  116.   /* and clear the display */
  117.   lc.clearDisplay(0);
  118.  
  119.   lcd.begin(84, 48);
  120.   lcd.createChar(0, gradus);
  121.   lcd.createChar(1, moon);
  122.   lcd.createChar(2, sun);
  123.   sensors.begin();
  124.   if (!sensors.getAddress(firstThermometer, 0)) {
  125.     lcd.setCursor(0,0);
  126.     lcd.println("Проблемы с DS18!");
  127.   }
  128.   sensors.setResolution(firstThermometer, 9);
  129.   bmp.begin();
  130.   dht.begin();
  131.   lcd.setCursor(18,0);
  132.   lcd.print("Погодная");
  133.   lcd.setCursor(18,1);
  134.   lcd.print("станция");
  135.   lcd.setCursor(12,3);
  136.   lcd.print("версия 3.2");
  137.   lcd.setCursor(6,5);
  138.   lcd.print("by  Al'Ninyo");
  139.   delay(3000);
  140.   lcd.clear();
  141.  
  142. }
  143.  
  144. void loop() {
  145.   tmElements_t tm;
  146.   RTC.read(tm);
  147.   sensors.requestTemperatures();
  148.   tempDS = sensors.getTempC(firstThermometer);
  149.   tempBMP = bmp.readTemperature();
  150.   presBMP = bmp.readPressure()/133.3;
  151.   tempDHT = dht.readTemperature();
  152.   humiDHT = dht.readHumidity();
  153.  
  154.   lcd.setCursor(6,0);
  155.   lcd.print("Улица");
  156.   lcd.setCursor(40,0);
  157.   lcd.print("|  ");
  158.   lcd.print("Дом");
  159.  
  160. /*  if (tempBMP < -10) {
  161.     lcd.write(1);
  162.     lcd.setCursor(12,3);
  163.     lcd.print("Сиди дома!  ");
  164.   } else if (tempBMP < 0) {
  165.     lcd.setCursor(0,3);
  166.     lcd.print("Одевайся тепло");
  167.   }
  168. */
  169.  
  170.   lcd.setCursor(0,1);
  171.   lcd.print(tempBMP);
  172.   lcd.write(0);
  173.   lcd.print("C ");
  174.   lcd.setCursor(40,1);
  175.   lcd.print("| ");
  176.   lcd.print(tempDS);
  177.   lcd.write(0);
  178.   lcd.print("C ");
  179.  
  180.   lcd.setCursor(0,2);
  181.   lcd.print(presBMP);
  182.   lcd.print(" mm");
  183.   lcd.setCursor(40,2);
  184.   lcd.print("| ");
  185.   lcd.print(humiDHT);
  186.   lcd.print("% ");
  187.    
  188.   lcd.setCursor(12,4);
  189.   if ( tm.Second % 2 == 1) {
  190.     lcd.print(" ");
  191.   } else if (tm.Hour >= 7 && tm.Hour <= 19) {
  192.     lcd.write(2);
  193.   } else {
  194.     lcd.write(1);
  195.   }
  196.   lcd.print(" ");
  197.   print2digits(tm.Hour);
  198.   lcd.print(":");
  199.   print2digits(tm.Minute);
  200.   lcd.print(":");
  201.   print2digits(tm.Second);
  202.  
  203.   lcd.setCursor(0,5);
  204.   lcd.print(days[tm.Wday]);
  205.   lcd.print(" ");
  206.   print2digits(tm.Day);
  207.   lcd.print(".");
  208.   print2digits(tm.Month);
  209.   lcd.print(".");
  210.   lcd.print(tmYearToCalendar(tm.Year));
  211.  
  212.   double t01;
  213.   double t02;
  214.   if (tempBMP >= 0) {
  215.     t01 = floor(tempBMP/10);
  216.     t02 = (tempBMP - t01*10);
  217.     lc.setChar(0,6,' ',false);
  218.   } else {
  219.     t01 = floor(-tempBMP/10);
  220.     t02 = (-tempBMP - t01*10);
  221.     lc.setChar(0,6,'-',false);
  222.   }
  223.   if (tempBMP > -10 && tempBMP < 10) {
  224.     lc.setChar(0,5,' ',false);
  225.   } else {
  226.   lc.setChar(0,5,t01,false);
  227.   }
  228.   lc.setChar(0,4,t02,false);
  229.  
  230.   double t11 = floor(tempDS/10);
  231.   double t12 = (tempDS - t11*10);
  232.  
  233.   if (tempDS > -10 && tempDS < 10) {
  234.     lc.setChar(0,1,' ',false);
  235.   } else {
  236.   lc.setChar(0,1,t11,false);
  237.   }
  238.   lc.setChar(0,0,t12,false);
  239.  
  240. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement