Показать сообщение отдельно
Старый 27.09.2015, 20:53   #76
Accelero Accelero вне форума
Старики-Разбойники
 
В Клубе с: 25.03.2009
Город: afr.3nx.ru
Авто: Говновоз
Сообщений: 16,274
Поблагодарили 281 раз(а)
По умолчанию Re: Есть заядлые электронщики?

Продолжаю модернизировать систему управления курями - обзавожусь моником.
[Для просмотра ссылки/изображения нужно войти или зарегистрироваться]
Возник вопрос - как убрать сотые доли процентов/градусов? Пространство нужно для отображения режимов работы 4хканального блока реле.

Код

#include <DS3231.h>
#include <EEPROM.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);


//Массив, содержащий время компиляции
char compileTime[] = __TIME__;
char compileDate[] = __DATE__;

DS3231 Clock(SDA, SCL);
Time RTC_Time;
LiquidCrystal_I2C lcd(0x3F,16,2);


void setup()
{
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT);
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
digitalWrite(12, HIGH);

lcd.init();
lcd.backlight();
Serial.begin(115200);
Serial.println("DHTxx test!");
dht.begin();
Clock.begin();

//Получаем число из строки, зная номер первого символа
byte hour = getInt(compileTime, 0);
byte minute = getInt(compileTime, 3);
byte second = getInt(compileTime, 6);

unsigned int hash = hour * 60 * 60 + minute * 60 + second;
if (EEPROMReadInt(0) != hash) {
//Сохраняем новый хэш
EEPROMWriteInt(0, hash);
// Записываем время в часы
Clock.adjust(compileDate, compileTime);
}
}

void loop()
{
float h = dht.readHumidity();
float t = dht.readTemperature();
//Для запроса времени в структуру "Time"
RTC_Time = Clock.getTime();
if (isnan(t) || isnan(h)) {
Serial.println("Failed to read from DHT");
} else {
Serial.print("Humidity: ");
lcd.clear();
lcd.setCursor(0,0);
lcd.print("H:");
lcd.print(h);
lcd.print("%");
lcd.setCursor(0,1);
lcd.print("T:");
lcd.print(t);
lcd.print("C");
lcd.setCursor(11,0);
lcd.print("");
lcd.println(Clock.getTimeStr());


Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.println(" *C");
}
if (RTC_Time.hour >= 8 < 18) //&& RTC_Time.min >= 00) время включения освещения
{
digitalWrite(10, LOW);
}
if (RTC_Time.hour >= 18 || RTC_Time.hour < 8)
{
digitalWrite(10, HIGH);
}

delay (100);
if(t <= 15) //если тмпература равна или ниже ?, включаем ИК лампу
{
digitalWrite(11, LOW);
}
if(t >= 17) //если тмпература равна или выше ?, выключаем ИК лампу и доппечку
{
digitalWrite(11, HIGH);
digitalWrite(12, HIGH);
}
if(t <= 12) //если тмпература равна или ниже ?, включаем доппечку
{
digitalWrite(12, LOW);
}
//Вывод дня недели
Serial.print(Clock.getDOWStr());
Serial.print(" ");

//Вывод даты
Serial.print(Clock.getDateStr());
Serial.print(" -- ");

//Вывод времени.
Serial.println(Clock.getTimeStr());
delay(100);
}

char getInt(const char* string, int startIndex) {
return int(string[startIndex] - '0') * 10 + int(string[startIndex+1]) - '0';
}

//Запись двухбайтового числа в память
void EEPROMWriteInt(int address, int value)
{
EEPROM.write(address, lowByte(value));
EEPROM.write(address + 1, highByte(value));
}
//Чтение числа из памяти
unsigned int EEPROMReadInt(int address)
{
byte lowByte = EEPROM.read(address);
byte highByte = EEPROM.read(address + 1);
return (highByte << 8) | lowByte;
}
[свернуть]
  Ответить с цитированием