Как зажечь точку на TM1637

ПавеJI
Offline
Зарегистрирован: 01.05.2018

Всем доброго времени суток, по тихой грусти пытаюсь освоить Arduino. В общем есть Nano, электромагнитное реле, ds18b20 и дисплей TM1637 от RoboDyn, в котором есть  двоеточие (для часов) и точки для отображения десятичных дробей. Задумка создать устройство, включающее реле при одной температуре и выключающее при другой. Проблема возникла у меня в том, что не могу зажечь точку посредине, чтобы дисплей постоянно отображал температуру с точностью до 0,01. Интервал 0,01 до 99,99 мне полностью подходит. Свой код сворганил из тех, что нашел в нете, а также дополнил своими скудными познаниями в теме программирования.

#include <OneWire.h>
#include <TM1637.h>

#define DISP_CLK 2     // выход на семисегментный LED дисплей
#define DISP_DIO 3     // выход на семисегментный LED дисплей
TM1637 tm1637(DISP_CLK, DISP_DIO);

OneWire ds(8);


void setup() {

tm1637.init();

tm1637.set(BRIGHTEST);//установка яркости
pinMode(5, OUTPUT); // выход на реле 
Serial.begin(9600);
}

void loop() {
    byte i;
    byte data[12];
    byte addr[8];
    float celsius;
 
    // поиск адреса датчика
    if ( !ds.search(addr)) {
        ds.reset_search();
        delay(100);
        return;
    }
 
    ds.reset();
    ds.select(addr);
    ds.write(0x44, 1); // команда на измерение температуры

    delay(100);

    ds.reset();
    ds.select(addr); 
    ds.write(0xBE); // команда на начало чтения измеренной температуры

    // считываем показания температуры из внутренней памяти датчика
    for ( i = 0; i < 9; i++) {
        data[i] = ds.read();
    }

    int16_t raw = (data[1] << 8) | data[0];
    // датчик может быть настроен на разную точность, выясняем её 
    byte cfg = (data[4] & 0x60);
    if (cfg == 0x00) raw = raw & ~7; // точность 9-разрядов, 93,75 мс
    else if (cfg == 0x20) raw = raw & ~3; // точность 10-разрядов, 187,5 мс
    else if (cfg == 0x40) raw = raw & ~1; // точность 11-разрядов, 375 мс

    // преобразование показаний датчика в градусы Цельсия 
    celsius = (float)raw / 16.0;
    Serial.print("t=");
    Serial.println(celsius);

float temperature = celsius;   // температура с датчика
unsigned int RAWtemp = temperature * 100;    // переводим в целое число
int8_t Digits[] = {0x00,0x00,0x00,0x00};  // буфер для цифр LED-индикатора
Digits[0] = (byte)(RAWtemp / 1000) % 10; // раскидываем 4-значное число на цифры
Digits[1] = (byte)(RAWtemp / 100) % 10;
Digits[2] = (byte)(RAWtemp / 10) % 10;
Digits[3] = (byte)(RAWtemp) % 10;
tm1637.display(Digits);    // команда вывода буфера на дисплей (из библиотеки)

    {
if (celsius > 45.0) // включаем реле
digitalWrite(5,true);

if (celsius < 35.0) // выключаем реле
digitalWrite(5,false);

}
}

 

vvadim
Offline
Зарегистрирован: 23.05.2012

tm1637.point(POINT_ON);

ssss
Offline
Зарегистрирован: 01.07.2016

Если для часов... там нет точек... только одно двоеточие...

ПавеJI
Offline
Зарегистрирован: 01.05.2018

дисплей TM1637 от RoboDyn, в котором есть  двоеточие (для часов) и точки для отображения десятичных дробей

ssss
Offline
Зарегистрирован: 01.07.2016

Ещё раз...

Если для часов... там нет точек... только одно двоеточие...

RobotDyn... только что проверил...

ПавеJI
Offline
Зарегистрирован: 01.05.2018

это каманда для двоеточия, мне же нужно зажечь точку

ПавеJI
Offline
Зарегистрирован: 01.05.2018

Все кажись разобрался, хоть на дисплее точки и есть, но зажечь их реально нельзя, вот ускоглазые...

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Не помню как, но зажигались.
Правда было несколько разных библиотек
и мне они все казались неудобными.

lawr
Offline
Зарегистрирован: 19.02.2017

В библиотеке есть пример DisplayDecimal. Чего проще, загрузи в Нано и убедись, что десятичные точки ЕСТЬ! Из скетча станет понятно как выводить DecPoint

ПавеJI
Offline
Зарегистрирован: 01.05.2018

Спасибо, загрузил и убедился что точек там нет, только двоеточие. Спс.

lawr
Offline
Зарегистрирован: 19.02.2017

Значит эта библиотека не подходит :(

Под этим видео https://www.youtube.com/watch?v=m1CtIJsRoyM есть модифицированная библиотека и тестовые скетчи

ПавеJI
Offline
Зарегистрирован: 01.05.2018

Почитав отзывы и корявое описание на Ali понял, что RoboDyn делают дисплеи на TM1637 в которых визуально есть и точки и двоеточие посредине (мой случай), но физически там работает только двоеточие, а есть такие дисплейчики, в которых есть точки, но двоеточия нет, вот в них точки работают. То есть, насколько я понял, варианта с работающими и точками, и двоеточием не существует, по крайней мере у RoboDyn.

ПавеJI
Offline
Зарегистрирован: 01.05.2018

В общем, чтобы привычнее смотрелись цифры на дисплее, зажег двоеточие, а верхнюю точку закрасил черным маркером ))) Отображает дисплей от 00:00 до 99:99, а выглядит как от 00.00 до 99.99. Короче, пока сойдет.

b707
Offline
Зарегистрирован: 26.05.2017

ПавеJI, инструментальная точность  DS18b20 порядка 0.2 - 0.5 градуса(см график ниже) - ну нафига вам выводит совершенно бесполезные 2 знака после запятой?

ПавеJI
Offline
Зарегистрирован: 01.05.2018

Особая точность мне и не нужна, я бы сказал что +-1 градус меня устраивает вполне. Дисплей там, кстати, тоже, неально не нужен, прикрутил я его потому что в оригинальном устройстве он есть, но его показания никто и никогда не учитывал и не смотрел. А то что отображает до сотых, пусть отображает, свободных разрядов зато не будет.

lawr
Offline
Зарегистрирован: 19.02.2017
ПавеJI
Offline
Зарегистрирован: 01.05.2018

Впринципе, можно попробовать и такое запилить, подскажите где почитать об этом?

lawr
Offline
Зарегистрирован: 19.02.2017
Kakmyc
Offline
Зарегистрирован: 15.01.2018

Лучше чем знаки после запятой выводить , вывели бы знак "°С".

ПавеJI
Offline
Зарегистрирован: 01.05.2018

Думал такое сделать, но че-то не разобрался, поэтому плюнул. Визуально, конечно, лучше будет, но и так работает.

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Так вы бы спросили об этом. Сложностей никаких.

ПавеJI
Offline
Зарегистрирован: 01.05.2018

Я совсем новичек в теме программирования, для меня что-то новое в программировании изучать - тяжко, могу только на примерах учить, разбирая уже написаное кем-то, а потом переделывать под свои нужды. Устройство работает - это уже успех для меня.