Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Для форматированного вывода
- #include <stdio.h>
- // Подключаем библиотеку для работы с шиной I2C
- #include <LiquidCrystal.h>
- // Библиотека для работы с датчиком DHT
- #include <DHT.h>
- // Библиотеки для работы с датчиком SFE_BMP180
- #include <SFE_BMP180.h>
- #include <Wire.h>
- // Библиотека для работы с датчиком DS1302 RTC (часы реального времени)
- #include <DS1302.h>
- const int led = A1; // Порт для подключения анода подсветки дисплея
- const int pir = 9; // Порт для подключения датчика движения
- int enable_led_btn = A0; // Порт для подключения кнопки, включающей подсветку дисплея
- unsigned long led_time = 0; // Время на включение подсветки дисплея
- unsigned long update_time = 0; // Время на измерение всех параметров
- unsigned long serial_time = 0; // Время на вывод информации в последовательный порт
- // Инициализируем объект-экран, передаём использованные
- // Для подключения контакты на Arduino в порядке:
- // RS, RW, E, D4, D5, D6, D7
- LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);
- // Используем конструктор класса DHT (датчик влажности и температуры)
- DHT dht(13, DHT11);
- // Используем конструктор класса SFE_BMP180 (датчик атмосферного давления)
- SFE_BMP180 pressure;
- // Используем конструктор класса DS1302 (часы реального времени)
- // Для подключения контакты на Arduino в порядке:
- // RST, DAT, CLK
- DS1302 rtc(6, 7, 8);
- void setup()
- {
- Serial.begin(9600); // Задаем скорость передачи данных
- pinMode(led, OUTPUT); // Обработка выхода от подсветки дисплея
- // Обработка входа от датчика освещенности
- pinMode(pir, INPUT);
- digitalWrite(pir, LOW);
- dht.begin(); // Начинаем работу с датчиком DHT
- pressure.begin(); // Начинаем работу с датчиком BMP180
- lcd.begin(16,02); // Начинаем работу с дисплеем
- }
- void loop()
- {
- // Условие на измерение всех параметров (влажности, температуры и т.д.) (каждую секунду)
- if (millis() - update_time > 1000){
- update_time = millis();
- float t = dht.readTemperature(); // Измеряем температуру
- float h = dht.readHumidity(); // Измеряем влажность
- float p = getPressure();
- // Получаем текущее время из модуля RTC
- Time realtime = rtc.time();
- char buf[50];
- snprintf(buf, sizeof(buf), "%02d:%02d:%02d", realtime.hr, realtime.min, realtime.sec);
- lcd.clear();
- lcd.setCursor(0,0);
- lcd.print(t,1);
- lcd.write((byte)223);
- lcd.print("C");
- lcd.print(" ");
- lcd.print(buf);
- lcd.setCursor(0,1);
- lcd.print(h,1);
- lcd.print("%");
- lcd.print(" ");
- lcd.print(p*0.7500637554192,1); // Выводим давление в мм. ртутного столба
- lcd.print("mmHg");
- // Условие на вывод информации в поледовательный порт (каждые 5 секунд)
- if (millis() - serial_time > 5000){
- serial_time = millis();
- Serial.println("--------------");
- Serial.print("Время: ");
- Serial.println(buf);
- Serial.print("Температура: ");
- Serial.println(t,1);
- Serial.print("Влажность: ");
- Serial.println(h,1);
- Serial.print("Давление: ");
- Serial.println(p*0.7500637554192,1); // Выводим давление в мм. ртутного столба
- Serial.println("--------------");
- }
- }
- // Условие на включение подсветки дисплея
- if (digitalRead(pir) == HIGH)
- {
- digitalWrite(led, HIGH);
- led_time = millis();
- }
- else
- {
- if (millis() - led_time > 5000){
- led_time = millis();
- digitalWrite(led, LOW);
- }
- }
- }
- double getPressure(){
- char status;
- double T,P,p0,a;
- status = pressure.startTemperature();
- if (status != 0){
- // ожидание замера температуры
- delay(status);
- status = pressure.getTemperature(T);
- if (status != 0){
- status = pressure.startPressure(3);
- if (status != 0){
- // ожидание замера давления
- delay(status);
- status = pressure.getPressure(P,T);
- if (status != 0){
- return(P);
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement