Прошу прощения. Я новичок в этом деле. Собрал схемку. Термометр на базе датчика DS18B20 выводит показания на дисплей.
© (https://robohobby.by/lessons/ds18b20_tutorial/?ysclid=mm3434a48w921702849 )
Скетч выше. Немного переделал его на дисплей 128х64 символа. Все вроде бы работает, но либо датчик врет, либо показания кривые.
Подскажите как внести корректировку показаний температуры?
// подключение библиотек для работы с OLED
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// подключение библиотек для работы с DS18B20
#include <OneWire.h>
#include <DallasTemperature.h>
/------------------------------------------------/
#define OLED_RESET 7
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#define ONE_WIRE_BUS 7 // вывод, к которому подключён DS18B20
#define TEMPERATURE_PRECISION 12 // точность измерений (9 … 12)
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensor(&oneWire);
DeviceAddress Thermometer;
float temp = 0.0; // текущее значение температуры
float min_temp = 100.0; // минимальное значение температуры
float max_temp = 0.0; // максимальное значение температуры
/------------------------------------------------/
void setup() {
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // инициализация дисплея по интерфейсу I2C, адрес 0x3C (для OLED 128x64)
display.clearDisplay(); // очистка дисплея
display.setTextColor(WHITE); // установка цвета текста
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
sensor.begin(); // инициализация DS18B20
sensor.getAddress(Thermometer, 0); // адрес DS18B20 (поиск по индексу)
#define TEMPERATURE_PRECISION 11// точность измерений (9 … 12)
}
/------------------------------------------------/
void loop() {
sensor.requestTemperatures(); // считывание значение температуры
temp = sensor.getTempC(Thermometer); // температура в градусах Цельсия
if (temp > max_temp) max_temp = temp; // обновление минимального значения температуры
if (temp < min_temp) min_temp = temp; // обновление максимального значения температуры
display.clearDisplay(); // очистить дисплей
display.setTextSize(1); // установка размера шрифта
display.setCursor(0, 0); // установка курсора в позицию X = 0; Y = 0
display.setTextSize(3); // установка размера шрифта
display.print(String(temp)); // выводим значение температуры на экран
display.print((char)247); // и рисуем
display.println(“C”); // знак цельсия
display.setTextSize(2); // установка размера шрифта
display.println("Max " + String (max_temp)); // выводим на OLED максимальную температуру
display.print("Min " + String (min_temp)); // и минимальную температуру
display.display(); // всё это отображаем на экране
}
