Помогите разобраться со скетчем. Не показывает текущую температуру

Помогите разобраться со скетчем. Не показывает текущую температуру.

#include <OneWire.h>
#include <DallasTemperature.h>

U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE);
int position = 0;
int temp_max = 35;

#define pin_plus 5
#define pin_minus 4
#define pin_rele 7

#define ONE_WIRE_BUS 12
 OneWire oneWire(ONE_WIRE_BUS);
 DallasTemperature sensors(&oneWire);
 DeviceAddress tempDeviceAddress; // Устройство для хранения адреса датчика

int temperatura;
int plus, minus;

unsigned long previousMillis = 0;
//Интервал измерения температуры
const long interval = 10000;

void draw()
{
//Прямоугольник для текущей температуры
u8g.drawRFrame(0, 17, 84, 46, 2);
u8g.setFont(u8g_font_profont29 );// u8g_font_fub20
//Обновление температуры на дисплее.
u8g.setPrintPos(9, 50);
u8g.print(temperatura);
//Символ градуса
u8g.drawCircle(51, 33, 3);
u8g.drawStr( 56, 50, "C");

u8g.setFont(u8g_font_tpss);
u8g.drawRBox(0, 0, 128, 18, 0);
u8g.setColorIndex(0);
u8g.drawStr( 5, 11, "Temperature Controller");
u8g.setColorIndex(1);

u8g.drawRFrame(86, 17, 42, 46, 2);
if (temp_max <= temperatura)
{
//Температура выше заданной температуры.
u8g.drawRBox(86, 17, 42, 22, 2);
u8g.setColorIndex(0);
u8g.drawStr(96, 33, "SET");
u8g.setColorIndex(1);
//Включить релейный выход
digitalWrite(pin_rele, LOW);
}
else
{
//Температура ниже заданной температуры.
u8g.drawRFrame(86, 17, 42, 22, 2);
u8g.drawStr(96, 33, "SET");
//Выключить релейный выход
digitalWrite(pin_rele, HIGH);
}
//Обновляет максимальное значение температуры на экране.
u8g.setPrintPos(100, 55);
u8g.print(temp_max);
u8g.drawCircle(120, 47, 2);
u8g.setColorIndex(1);
}
void setup(void)
{
Serial.begin(9600);
pinMode(pin_rele, OUTPUT);
pinMode(pin_plus, INPUT);
pinMode(pin_minus, INPUT);
sensors.begin();
}
void loop(){

unsigned long currentMillis = millis();
//Таймер для считывания значения температуры
if (currentMillis - previousMillis >= interval)
{
  
sensors.requestTemperatures();
float temperatureC = sensors.getTempC(tempDeviceAddress);
previousMillis = currentMillis;
}
//Тестовая кнопка для повышения температуры
plus = digitalRead(pin_plus);
if (plus == 1)
{temp_max++;}
while (digitalRead(pin_plus) == 1)
{delay(100);}

//Тестовая кнопка для понижения температуры
minus = digitalRead(pin_minus);
if (minus == 1)
{temp_max--;}
while (digitalRead(pin_minus) == 1)
{delay(100);}

u8g.firstPage();
// Вызов процедуры рисования экрана
do
{
draw();
}
while ( u8g.nextPage() );
delay(50);
}

вам надо добавить сохранение считанной температуры в переменную temperatura
переменную лучше использовать float
возможно провести инициализацию датчика тут

void setup(void)

как сделаете отпишитесь

Функция draw() печатает глобальную переменную int temperatura.

В функции loop() считываются данные датчика, и, сохраняются в локальной переменной float temperaturaC

Как данные из loop() попадут в draw()?

P.S. После стр. 84 сразу добавьте

  temperatura = (int)temperatureC;

Я ведь тупой в программировании, взял скетч с датчиком dht11, почитал форумы, исправил под ds18b20, скетч компилируетя и загружается. Ткните рожей, что конкретно исправить?

Дописал в P.S.

об этом надо писать сразу…

#include <OneWire.h>
#include <DallasTemperature.h>
#include <U8glib.h>

U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE);
int position = 0;
int temp_max = 35;

#define pin_plus 5
#define pin_minus 4
#define pin_rele 7

#define ONE_WIRE_BUS 12
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress tempDeviceAddress; // Устройство для хранения адреса датчика

float temperatura = 0;  // Изменил на float для точности
int plus, minus;

unsigned long previousMillis = 0;
//Интервал измерения температуры
const long interval = 10000;

void draw()
{
//Прямоугольник для текущей температуры
u8g.drawRFrame(0, 17, 84, 46, 2);
u8g.setFont(u8g_font_profont29);
//Обновление температуры на дисплее.
u8g.setPrintPos(9, 50);
u8g.print(temperatura, 1);  // Выводим с одной цифрой после запятой  
//Символ градуса
u8g.drawCircle(51, 33, 3);
u8g.drawStr(56, 50, "C");
u8g.setFont(u8g_font_tpss);
u8g.drawRBox(0, 0, 128, 18, 0);
u8g.setColorIndex(0);
u8g.drawStr(5, 11, "Temperature Controller");
u8g.setColorIndex(1);
u8g.drawRFrame(86, 17, 42, 46, 2);
//Температура выше заданной температуры.
if (temp_max <= temperatura) {
u8g.drawRBox(86, 17, 42, 22, 2);
u8g.setColorIndex(0);
u8g.drawStr(96, 33, "SET");
u8g.setColorIndex(1);
//Включить релейный выход
digitalWrite(pin_rele, LOW); }
//Температура ниже заданной температуры.
else {
u8g.drawRFrame(86, 17, 42, 22, 2); u8g.drawStr(96, 33, "SET");
//Выключить релейный выход
digitalWrite(pin_rele, HIGH); }
//Обновляет максимальное значение температуры на экране.
u8g.setPrintPos(100, 55);   u8g.print(temp_max);
u8g.drawCircle(120, 47, 2); u8g.setColorIndex(1);
}

void setup(void){ Serial.begin(9600);
pinMode(pin_rele, OUTPUT);
pinMode(pin_plus, INPUT);
pinMode(pin_minus, INPUT);
sensors.begin();
// Находим первый датчик
if (!sensors.getAddress(tempDeviceAddress, 0)) 
Serial.println("Unable to find address for Device 0"); 
}

void loop(){
unsigned long currentMillis = millis();
//Таймер для считывания значения температуры
if (currentMillis - previousMillis >= interval) {
sensors.requestTemperatures();
temperatura = sensors.getTempC(tempDeviceAddress);
Serial.print("Temperature: "); Serial.println(temperatura);
previousMillis = currentMillis; }
//Тестовая кнопка для повышения температуры
plus = digitalRead(pin_plus);
if (plus == 1) { temp_max++; delay(100); } // Дебаунс
//Тестовая кнопка для понижения температуры
minus = digitalRead(pin_minus);
if (minus == 1){ temp_max--; delay(100); } // Дебаунс 
u8g.firstPage();
// Вызов процедуры рисования экрана
do { draw(); } while (u8g.nextPage()); delay(50); }

работает ?

все остальным кому нечего делать, идите писать код покупки батона!

Спасибо. Буду дома около ПК, проверю, отпишусь

ТЗ поподробнее можно?

воооо, фиг его знает как эту ссылку с указанием на пост переносить, хоть и дублируется, зато открывается!

BABOSу. В монитор порта отправляет реальную температуру 29,** , на oled добавился 1 знак после запятой, он светиться вместе с символом градус

все верно, и этот момент в коде даже подписан, думаю дальше сможете вывести … это точно вам по силам!)))

BABOS Огромное спасибо, все как надо. Завидую людям которые умеют, я лет 40 назад упустил этот момент, но уже не вернуть.