Показано с 1 по 3 из 3
  1. #1
    Пользователь
    Регистрация
    23.09.2011
    Возраст
    35
    Сообщений
    37
    Вес репутации
    170

    По умолчанию DallasTemperature 18B20

    День добрый собрал мини метео станцию на трёх датчиках и дисплей на 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 
Просмотров:	643 
Размер:	92.2 Кб 
ID:	14791
    Нажмите на изображение для увеличения. 

Название:	Picture 2.jpg 
Просмотров:	360 
Размер:	113.1 Кб 
ID:	14792
    Последний раз редактировалось asuz; 30.08.2012 в 14:06.

  2. #2
    Продвинутый
    Регистрация
    15.12.2008
    Возраст
    38
    Сообщений
    229
    Вес репутации
    400

    По умолчанию Re: DallasTemperature 18B20

    TEMPERATURE_PRECISION определяет погрешность. 9 - 0,5С, 10 - 0,25С, 11 - 0,125С, 12 - 0,0625С.

  3. #3
    Пользователь
    Регистрация
    23.09.2011
    Возраст
    35
    Сообщений
    37
    Вес репутации
    170

    По умолчанию Re: DallasTemperature 18B20

    благодарю, получилось!

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •