Advertisement
Underhing

Untitled

Nov 15th, 2021
30
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.25 KB | None | 0 0
  1. // Для форматированного вывода
  2. #include <stdio.h>
  3. // Подключаем библиотеку для работы с шиной I2C
  4. #include <LiquidCrystal.h>
  5. // Библиотека для работы с датчиком DHT
  6. #include <DHT.h>
  7. // Библиотеки для работы с датчиком SFE_BMP180
  8. #include <SFE_BMP180.h>
  9. #include <Wire.h>
  10. // Библиотека для работы с датчиком DS1302 RTC (часы реального времени)
  11. #include <DS1302.h>
  12.  
  13. const int led = A1; // Порт для подключения анода подсветки дисплея
  14. const int pir = 9; // Порт для подключения датчика движения
  15. int enable_led_btn = A0; // Порт для подключения кнопки, включающей подсветку дисплея
  16.  
  17. unsigned long led_time = 0; // Время на включение подсветки дисплея
  18. unsigned long update_time = 0; // Время на измерение всех параметров
  19. unsigned long serial_time = 0; // Время на вывод информации в последовательный порт
  20.  
  21. // Инициализируем объект-экран, передаём использованные
  22. // Для подключения контакты на Arduino в порядке:
  23. // RS, RW, E, D4, D5, D6, D7
  24. LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);
  25.  
  26. // Используем конструктор класса DHT (датчик влажности и температуры)
  27. DHT dht(13, DHT11);
  28. // Используем конструктор класса SFE_BMP180 (датчик атмосферного давления)
  29. SFE_BMP180 pressure;
  30.  
  31. // Используем конструктор класса DS1302 (часы реального времени)
  32. // Для подключения контакты на Arduino в порядке:
  33. // RST, DAT, CLK
  34. DS1302 rtc(6, 7, 8);
  35.  
  36. void setup()
  37. {
  38.  
  39. Serial.begin(9600); // Задаем скорость передачи данных
  40. pinMode(led, OUTPUT); // Обработка выхода от подсветки дисплея
  41.  
  42. // Обработка входа от датчика освещенности
  43. pinMode(pir, INPUT);
  44. digitalWrite(pir, LOW);
  45.  
  46. dht.begin(); // Начинаем работу с датчиком DHT
  47. pressure.begin(); // Начинаем работу с датчиком BMP180
  48. lcd.begin(16,02); // Начинаем работу с дисплеем
  49.  
  50. }
  51. void loop()
  52. {
  53.  
  54. // Условие на измерение всех параметров (влажности, температуры и т.д.) (каждую секунду)
  55. if (millis() - update_time > 1000){
  56.  
  57. update_time = millis();
  58.  
  59. float t = dht.readTemperature(); // Измеряем температуру
  60. float h = dht.readHumidity(); // Измеряем влажность
  61. float p = getPressure();
  62.  
  63. // Получаем текущее время из модуля RTC
  64. Time realtime = rtc.time();
  65. char buf[50];
  66. snprintf(buf, sizeof(buf), "%02d:%02d:%02d", realtime.hr, realtime.min, realtime.sec);
  67.  
  68. lcd.clear();
  69. lcd.setCursor(0,0);
  70. lcd.print(t,1);
  71. lcd.write((byte)223);
  72. lcd.print("C");
  73. lcd.print(" ");
  74. lcd.print(buf);
  75. lcd.setCursor(0,1);
  76. lcd.print(h,1);
  77. lcd.print("%");
  78. lcd.print(" ");
  79. lcd.print(p*0.7500637554192,1); // Выводим давление в мм. ртутного столба
  80. lcd.print("mmHg");
  81.  
  82. // Условие на вывод информации в поледовательный порт (каждые 5 секунд)
  83. if (millis() - serial_time > 5000){
  84.  
  85. serial_time = millis();
  86.  
  87. Serial.println("--------------");
  88. Serial.print("Время: ");
  89. Serial.println(buf);
  90. Serial.print("Температура: ");
  91. Serial.println(t,1);
  92. Serial.print("Влажность: ");
  93. Serial.println(h,1);
  94. Serial.print("Давление: ");
  95. Serial.println(p*0.7500637554192,1); // Выводим давление в мм. ртутного столба
  96. Serial.println("--------------");
  97.  
  98. }
  99.  
  100. }
  101.  
  102. // Условие на включение подсветки дисплея
  103. if (digitalRead(pir) == HIGH)
  104. {
  105. digitalWrite(led, HIGH);
  106. led_time = millis();
  107. }
  108. else
  109. {
  110. if (millis() - led_time > 5000){
  111. led_time = millis();
  112. digitalWrite(led, LOW);
  113. }
  114. }
  115.  
  116. }
  117.  
  118. double getPressure(){
  119.  
  120. char status;
  121. double T,P,p0,a;
  122.  
  123. status = pressure.startTemperature();
  124. if (status != 0){
  125. // ожидание замера температуры
  126. delay(status);
  127. status = pressure.getTemperature(T);
  128. if (status != 0){
  129. status = pressure.startPressure(3);
  130. if (status != 0){
  131. // ожидание замера давления
  132. delay(status);
  133. status = pressure.getPressure(P,T);
  134. if (status != 0){
  135. return(P);
  136. }
  137. }
  138. }
  139. }
  140.  
  141. }
  142.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement