Привет народ!
Темы подобные видел, но там обсуждался готовый модуль и решение сводилось к тому, что точек в нем все равно нет, а значит и ставить их не надо. У меня микросхема TM1637 и 3 индикатора с точками. Вот схема всего устройства:
Вот код:
#include "TM1637.h" // Подключаем библиотеку для работы с модулем
#include <OneWire.h>
#include <DallasTemperature.h>
#include <TickerScheduler.h>
//Определяем пины для подключения к плате Arduino
#define CLK 3
#define DIO 2
//Создаём объект класса TM1637, в качестве параметров
//передаём номера пинов подключения
TM1637 tm1637(CLK, DIO);
// Номер пина Arduino с подключенным датчиком
#define PIN_DS18B20 4
// Создаем объект OneWire
OneWire oneWire(PIN_DS18B20);
// Создаем объект DallasTemperature для работы с сенсорами, передавая ему ссылку на объект для работы с 1-Wire.
DallasTemperature dallasSensors(&oneWire);
// Специальный объект для хранения адреса устройства
DeviceAddress sensorAddress;
TickerScheduler ts(1);
//char temperatureCString[6];
int d0, d1, d3;
bool znak;
void setup() {
Serial.begin(115200);
//Инициализация модуля
tm1637.init();
tm1637.set(BRIGHT_TYPICAL);
dallasSensors.begin();
ts.add(0, 1000, [&](void*) {
GettOut();
if (znak == 0) tm1637.point(POINT_OFF);
tm1637.point(POINT_ON);
tm1637.display(0,d0);
tm1637.point(POINT_ON);
tm1637.display(1,d1);
tm1637.point(POINT_OFF);
tm1637.display(2,d3);
//Serial.print("Temperature is: ");
//Serial.print(d0);
//Serial.print(d1);
//Serial.println(d3);
}, nullptr, true);
}
void loop() {
ts.update();
}
void ds18b20_init() {
dallasSensors.begin();
GettOut();
}
char* GettOut() {
float tempC;
int tempCI, d1t;
dallasSensors.requestTemperatures();
tempC = dallasSensors.getTempCByIndex(0) - 28;
if (tempC < 0) znak = true;
else znak = false;
tempCI = tempC * 10;
Serial.println(znak);
Serial.println(tempC);
Serial.println(tempCI);
d0 = abs(tempCI) / 100;
d1t = abs(tempCI) % 100;
d1 = d1t / 10;
d3 = d1t % 10;
}
Собственно мне надо получить значение температуры с двумя знаками до и одним знаком после запятой. И вывести его. Стабильную точку на втором разряде получается поставить и все хорошо. Но я хочу, что бы в случае отрицательной температуры, ставилась еще и точка в первом разряде. Тот код, что я указал точку ставит, но не реагирует на изменение знака температуры. Т.е. переменная, которая смотрит какой знак у температуры отрабатывает, а точка не меняется.