#include <OneWire.h> //Подключаем библиотеку для температурного датчика DS18B20
//=====Termo_Sensor*
int tempPin=12; //Определяем порт шины OneWire (IC) для температурного датчика DS18B20
OneWire ds(tempPin); //Создаем объект для работы с термометром
byte flagDallas=0; //Флаг для обработки показаний с датчиков Dallas
byte data[12];
byte addr1[8]={0x28, 0x33, 0x4B, 0xEA, 0x05, 0x00, 0x00, 0x54}; //адрес датчика DS18B20_в парничке
byte addr2[8]={0x28, 0xFF, 0xB5, 0x24, 0x54, 0x14, 0x01, 0xC7}; //адрес датчика DS18B20_на улице
byte addr3[8]={0x28, 0xF2, 0x29, 0xEB, 0x05, 0x00, 0x00, 0xE1}; //адрес датчика DS18B20_грунт :)
unsigned int raw; //Если экранированный кабель, можно подключать до 32 термо-датчиков DS18B20
float temp[3]; //Температура в парничке \ на уличке \ грунта
unsigned long prvMlsTemp=0; //Предыдущее показание обновления температур
unsigned long tzad=millis(); //Переменная задержки (пока для ds18b20, ds.write)
unsigned long zadM[4]; //Массив для задержек меню
const long zadTime[]={100,500,750,1000,2000,3000,5000,10000,60000};
void setup() {
Serial.begin(9600); //Инициализация Serial-порта
}
//=========== Считывание температур
void dallas(){
ds.reset();
ds.write(0xCC); //Команда инициации
ds.write(0x44); //Start conversion, with parasite power on at the end
tzad=millis()+750; flagDallas=1;}
float DS18B20(byte *adres){
ds.reset();
ds.select(adres);
ds.write(0xBE); //Read Scratchpad
for (byte i=0; i<9; i++) data[i]=ds.read(); //We need 9 bytes
int raw=(data[1]<<8) | data[0]; //Переводим в температуру
float celsius=(float)raw/16.0; //Для ds18b20 делим на "16", для ds18s20 на "2"
return celsius;
}
void loop(){
if (millis()-prvMlsTemp>zadTime[6]&&flagDallas!=1){dallas();
Serial.println(temp[0],1);Serial.println(temp[1],1);Serial.println(temp[2],1);}
}