День добрый собрал мини метео станцию на трёх датчиках и дисплей на ks108.
вот что загружаю.
Код:
#include <OneWire.h>
#include <DallasTemperature.h>
#include <glcd.h>
#include "fonts/SystemRus5x7.h"
#define ONE_WIRE_BUS 2
#define TEMPERATURE_PRECISION 9
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress insideThermometer, outsideThermometer, Thermometer;
char s[16];
float tempS1;
float tempS2;
float tempS3;
void setup(void)
{
GLCD.Init();
GLCD.SelectFont(SystemRus);
GLCD.print("Термометр v1.0");
Serial.begin(9600);
sensors.begin();
if (!sensors.getAddress(insideThermometer, 0)) Serial.println("Unable to find address for Device 0");
if (!sensors.getAddress(outsideThermometer, 1)) Serial.println("Unable to find address for Device 1");
if (!sensors.getAddress(Thermometer, 2)) Serial.println("Unable to find address for Device 2");
sensors.setResolution(insideThermometer, TEMPERATURE_PRECISION);
sensors.setResolution(outsideThermometer, TEMPERATURE_PRECISION);
sensors.setResolution(Thermometer, TEMPERATURE_PRECISION);
}
void printAddress(DeviceAddress deviceAddress)
{
for (uint8_t i = 0; i < 8; i++)
{ if (deviceAddress[i] < 16); }
}
void printTemperature(DeviceAddress deviceAddress)
{
float tempC = sensors.getTempC(deviceAddress);
tempS1 = sensors.getTempC(insideThermometer);
tempS3 = sensors.getTempC(outsideThermometer);
tempS2 = sensors.getTempC(Thermometer);
GLCD.CursorTo(0, 2);
GLCD.print("Датчик 1=");
if (tempS1 == -127.00) { GLCD.CursorTo(10, 2); GLCD.print("Error"); } else { GLCD.CursorTo(10, 2); GLCD.print(tempS1); } GLCD.print("с");
GLCD.CursorTo(0, 3);
GLCD.print("Кабинет =");
if (tempS2 == -127.00) { GLCD.CursorTo(10, 3); GLCD.print("Error"); } else { GLCD.CursorTo(10, 3); GLCD.print(tempS2); } GLCD.print("с");
GLCD.CursorTo(0, 4);
GLCD.print("Улица =");
if (tempS3 == -127.00) { GLCD.CursorTo(10, 4); GLCD.print("Error"); } else { GLCD.CursorTo(10, 4); GLCD.print(tempS3); } GLCD.print("с");
}
void printData(DeviceAddress deviceAddress)
{
printAddress(deviceAddress);
printTemperature(deviceAddress);
}
void loop(void)
{
delay(10);
sensors.requestTemperatures();
printData(insideThermometer);
printData(outsideThermometer);
printData(Thermometer);
}
всё выводит всё ок, но почему то он градусы считает с погдешность 0.5 например 27.0 или 27.50 нет 27.31, я так понимаю это дело в библиотеке DallasTemperature.h но я заметил закономерность если во время работы отключить и подключить датчик обратно то показывает остаток температуры с сотнями т.е. 27.01 27.51. Как бы сделать чтоб он изначально показывал с сотнями?
![Нажмите на изображение для увеличения.
Название: Picture 1.jpg
Просмотров: 618
Размер: 92.2 Кб
ID: 14791](http://compcar.ru/forum/attachment.php?attachmentid=14791&d=1518621872&thumb=1)