Как подключить к TM1637 датчик температуры и часы одновременно?

Собственно как??

Вопросы от новичков
Ответить
Di100
Рядовой
Сообщения: 41
Зарегистрирован: 10.03.2019{, 13:41}
Репутация: 0
Имя: Дмитрий

Как подключить к TM1637 датчик температуры и часы одновременно?

#1

Сообщение Di100 » 05.04.2019{, 22:01}

Доброго дня господа!!!
Вопрос от новичка, как к дисплею TM1637, одновременно подключить часы реального времени и датчик температуры ds18b20?
Допустим, 5 сек показывалось время, ну и 5 сек температура.
Подобие скейтча прилагаю!
Заранее благодарен!!!
Вложения
tm1637_18b20_time.flp
(161.19 КБ) 101 скачивание

Аватара пользователя
dizzyy
Капитан
Сообщения: 752
Зарегистрирован: 24.11.2017{, 16:25}
Репутация: 37
Откуда: Червоноград
Имя: Марьян

Как подключить к TM1637 датчик температуры и часы одновременно?

#2

Сообщение dizzyy » 05.04.2019{, 22:20}

выт для вемос делал ,меняйте контролер, датчик и блок часов на свои
WeMos.flp
(817.97 КБ) 182 скачивания

Di100
Рядовой
Сообщения: 41
Зарегистрирован: 10.03.2019{, 13:41}
Репутация: 0
Имя: Дмитрий

Как подключить к TM1637 датчик температуры и часы одновременно?

#3

Сообщение Di100 » 05.04.2019{, 22:24}

Огромное Вам Спасибо!!!

Отправлено спустя 7 минут 28 секунд:
Черт))) был уверен, что надо добавить один "волшебный" блок)) у Вас же целая схемища!!
Еще раз благодарю, хоть Ваша схема пока и весьма сложна для меня, слишком мало пока знаний((
Пошол изучать

Аватара пользователя
dizzyy
Капитан
Сообщения: 752
Зарегистрирован: 24.11.2017{, 16:25}
Репутация: 37
Откуда: Червоноград
Имя: Марьян

Как подключить к TM1637 датчик температуры и часы одновременно?

#4

Сообщение dizzyy » 06.04.2019{, 13:12}

почему сложная? датчик у меня меряет температуру и влажность(поэтому у меня 3 индикации а не 2)
время берет с сервера точного времени(редактировать пояс и есче что то можно через веб) , у вас с часов реального времени
ну и там всякое типа тушение нуля это там тоже у меня есть - не люблю когда показывает 01 час ночи

hatul
Сержант
Сообщения: 147
Зарегистрирован: 06.05.2017{, 18:40}
Репутация: 0
Откуда: Netanya

Как подключить к TM1637 датчик температуры и часы одновременно?

#5

Сообщение hatul » 06.04.2019{, 21:17}

Если надо именно в FLProg ,можно примерно так:
Clock_Temp.flp
(159.99 КБ) 146 скачиваний
Это получение темп. с часов DS3231. Вместо блока "получение темп.с часов" можешь вставить свой датчик.
А если не принципиально,то вот неплохой скетч:
zclock2.ino
(3.6 КБ) 92 скачивания
Правда надо подправить библиотеку :"Чтобы добавить значек "градус" надо редактировать массив в файле С./Документы / Arduino /libraries / DigitalTube / TM1637.cpp
В строку 23-26 надо или добавить еще один символ,или исправить какой-либо из существующих. Затем в скетче, в строке 127 указать порядковый номер символа."

Di100
Рядовой
Сообщения: 41
Зарегистрирован: 10.03.2019{, 13:41}
Репутация: 0
Имя: Дмитрий

Как подключить к TM1637 датчик температуры и часы одновременно?

#6

Сообщение Di100 » 07.04.2019{, 19:45}

Друзья - ОГРОМНОЕ спасибо Вам!!!
dizzyy - я благодарен Вам!!, но уровень моих познаний лет на несколько отстает от Ваших! Пример Ваш отличный и нужный, но пойму я его чуть позже!
hatul - Благодарю Вас!!!

Notturno
Рядовой
Сообщения: 25
Зарегистрирован: 30.11.2019{, 19:01}
Репутация: 1
Имя: Igor

Как подключить к TM1637 датчик температуры и часы одновременно?

#7

Сообщение Notturno » 16.01.2020{, 21:57}

Ребят, всем привет. Подскажите, как можно изменить пользовательский блок.
Использую Wemos D1 Mini c TM1637.
Суть в том, что я хочу, что бы часы чередовались каждые три секунды и выводились на индикатор с температурой, ну хотелось бы еще конечно с влажностью считанные с DHT11.
Схему в Flprog накидал, и столкнулся с такой не большой проблемкой. Я перепробовал разные ПБ что до TM1637, и остановился на одном блоке, который был в примере, почему именно его, потому-что с этим блоком остальной код не тормозит, то-есть остальные функции wemos выполняет без задержек, так же некоторые блоки не хотели выводить, библиотеки подкидывал разные, пробовал ...
Не большой эстетический косяк, нужно убрать обозначение градуса Цельсия, не саму "С" а предположенный "°" так как он отображается как фигня какая-то :) ну или каким то образом заставить его отображать.
Еще хотелось-бы добавить вход для влажности в блок.
Библиотеку использую "Grove_4-Digit_Display"
Файлы прилагаю:
flprog-meteo.png
IMG_20200116_155909.jpg
Дисплей_на_TM1637_(часы_и_t°C_1_(CODE).ubi
(61.86 КБ) 72 скачивания
Отправлено спустя 31 минуту 57 секунд:
Еще хочу спросить, почему периодически вместо данных температуры, загораются "левые" сегменты?
Вместо температуры в 25, что попало .... Не попадает в цикл опроса датчика?
IMG_20200116_212554.jpg
IMG_20200116_212549.jpg
Последний раз редактировалось Notturno 16.01.2020{, 22:39}, всего редактировалось 1 раз.

Аватара пользователя
dizzyy
Капитан
Сообщения: 752
Зарегистрирован: 24.11.2017{, 16:25}
Репутация: 37
Откуда: Червоноград
Имя: Марьян

Как подключить к TM1637 датчик температуры и часы одновременно?

#8

Сообщение dizzyy » 16.01.2020{, 22:33}

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

Notturno
Рядовой
Сообщения: 25
Зарегистрирован: 30.11.2019{, 19:01}
Репутация: 1
Имя: Igor

Как подключить к TM1637 датчик температуры и часы одновременно?

#9

Сообщение Notturno » 16.01.2020{, 22:41}

dizzyy, Я Вашу схему пробовал, не запустилась. Не выводиться на индикатор ничего.
Я полагаю дело в назначении пинов, но я менял на свои выводы. у меня G5,G4. Вашу схему не удается запустить, только что еще попробовал.

Аватара пользователя
dizzyy
Капитан
Сообщения: 752
Зарегистрирован: 24.11.2017{, 16:25}
Репутация: 37
Откуда: Червоноград
Имя: Марьян

Как подключить к TM1637 датчик температуры и часы одновременно?

#10

Сообщение dizzyy » 17.01.2020{, 23:30}

индикатор другой , у меня 4 точки снизу .. скетч точно рабочий, у детей в комнате работает..
возьмите все блоки что найдете , пропишите на входах стринги и получите цифры на сигментах..тогда вставите в мой проект этот блок

Notturno
Рядовой
Сообщения: 25
Зарегистрирован: 30.11.2019{, 19:01}
Репутация: 1
Имя: Igor

Как подключить к TM1637 датчик температуры и часы одновременно?

#11

Сообщение Notturno » 18.01.2020{, 23:06}

Этот индикатор валялся у меня, я заказ на али "056 размер, больше и у него есть четыре точки, когда придет попробую...
:smile9:

Labu559
Лейтенант
Сообщения: 359
Зарегистрирован: 25.01.2018{, 22:23}
Репутация: 95
Откуда: Bukovyna
Имя: Василий

Как подключить к TM1637 датчик температуры и часы одновременно?

#12

Сообщение Labu559 » 21.01.2020{, 02:17}

Notturno,
Давайте без обид и по-порядку. Где Ваш проект, Вы выложили блок- будем его обсуждать?
Notturno писал(а):
16.01.2020{, 22:29}
почему именно его, потому-что с этим блоком остальной код не тормозит
Как-то не верится - сужу по коду в блоке. Данный блок выполняется в каждом цикле ф-и Loop(), т.е. в каждом цикле он обрабатывает данные со входов, и вгоняет их по медленной шине I2C в ТМ1637, даже если эти данные не менялись. Кроме того, уважаемый неизвестный автор этого блока выводит мигание точек и данные со входа Hours даже в режиме отображения температуры и потом "затирает" их данными со входа Mins (где уже температура). Так-же применяет тип данных integer(2 байта), для записи данных времени (которые байтовые) и яркости (которая имеет всего 7-мь градаций).
Теперь из рисунка проекта: а что происходит с
минусовой температуройПоказать
Int_cut_Byte.png
как-то так это выглядит в памяти МК
знак которой находится в MSB старшего байта float и запишется в следующую ячейку(адресное пространство) памяти из-за переполнения переменной integer испортив какие-то данные в SRAM, а младшие 2байта будут инвертированы? Будем надеяться , что компилятор исправит такие косяки? Так, что его (блока) преимущество не использования, как у других блоков на форуме, класса данных String выглядит IMHO слишком сомнительно. Некоторые мелкие ошибки блока Дисплей на TM1637 (часы и t°C_2, впрочем, можно немного "подшаманить", если его работа Вас удовлетворяет

Код: Выделить всё

//TimeDisp[0] = Hours / 10; // переносим ниже, выполняется если выключена инд. температуры
//TimeDisp[1] = Hours % 10; // переносим ниже, выполняется если выключена инд. температуры
//if ( Sec ) tm1637.point(HIGH); // зачем сравнивать, всё равно перезаписываем?
// else tm1637.point(LOW);  // эти два безполезных условия(сравнения) заменяем tm1637.point( Sec ); там где это должно выполняться
if (temp) {
	// TimeDisp[0] = Mins / 10; // Данные со входа минут десятки (уже температура) выводим в крайний левый разряд
	// TimeDisp[1] = Mins % 10; // Данные со входа минут единицы (уже температура) выводим в левый разряд
	TimeDisp[2] = Mins / 100; // Почему/100, сюда нужно записать символ градуса -константа 0х63
	TimeDisp[3] = Mins % 100; //Почему%100, сюда нужно записать символ С (Celsium) -константа 0х39
}else{
	TimeDisp[0] = Hours / 10;
	TimeDisp[1] = Hours % 10;
	TimeDisp[2] = Mins / 10;
	TimeDisp[3] = Mins % 10;
	tm1637.point( Sec );
	}
tm1637.display(TimeDisp);
tm1637.set(Brightness);
перестановкой строк кода.
Notturno писал(а):
16.01.2020{, 22:29}
так как он отображается как фигня какая-то
Я бы сказал, что он отображает ту фигню (ссылка), которая у Вас получилась после записи данных типа Float (с датчика DHT) в переменную типа integer. Вы же не станете наливать в 100-граммовый стакан пол-литра (просто как пример), но пишете 32-х битовый Float в 16-ти битовый Integer. Странно, что это позволяет сделать FLProg.
Или же, вторая причина:
блок "Дисплей на TM1637 (часы и t°C_1", более подходящий для Вашей задачи, но "с этими же яйцами в профиль", с добавлением доп.символов (модификацией библиотеки) которую, ес-но, нужно установить, предварительно удалив оригинальную с ГитХаба-

Код: Выделить всё

TimeDisp[0] = Hours / 10;
TimeDisp[1] = Hours % 10;
if ( Sec ) tm1637.point(HIGH);
 else tm1637.point(LOW); 
tm1637.set(Brightness);
if (temp)
{
TimeDisp[2] = 18; // В авторской библиотеке Grove_4Digital_Display в массиве static int8_t tube_tab[] 
/*только 16-ть элементов , что приводит к выводу чёрт знает чего
 * это-же можно сделать без модернизации оригинальной библиотеки через using namespace char2segments
 * там (namespace { uint8_t char2segments(char c))есть искомый символ:  case '*' : return 0x63; // ° 
 * см. файл TM1637.cpp
  */
TimeDisp[3] = 12;
}
else
{
TimeDisp[2] = Mins / 10;
TimeDisp[3] = Mins % 10;
}
tm1637.display(TimeDisp);
Боюсь что отличить её от оригинальной по внешним признакам будет проблематично. :)
Что имел, то сказал, извините непрограммиста если что. Удачи!

Ответить

Вернуться в «Начинающим»