TM1637 Можно ли подключить более одной?
- Войдите на сайт для отправки комментариев
Вс, 04/12/2016 - 19:33
Доброго времени суток, уважаемые форумчане.
Взялся я тут пилить проект, цифровой термометр для гаража и возник один затык.
Имеется 3 датчика 18b20 инфа с них должна приходить на 3 дисплея TM1637.
Так вот, как и можно ли вообще полключить к ардуине все 3 дисплея для вывода температуры?
В данный момент использовал следующую инициализацию:
#include "TM1637.h" #define CLK 3//pins definitions for TM1637 and can be changed to other ports #define DIO 2 TM1637 tm1637(CLK,DIO); #define CLK1 9//pins definitions for TM1637 and can be changed to other ports #define DIO1 8 TM1637 tm1637_2(CLK1,DIO1);
При подключении второго дисплея ардуина виснет и не отвисает пока дисплей не отключишь.
Помогите решить задачу!
Варианта два:
1. Второй программный I2C
2. I2C коммутатор, можно самодельный http://arduino.ru/forum/programmirovanie/podklyuchenie-neskolkikh-i2c-ustroistv-s-odinakovymi-adresami
У меня подобный вопрос.
С разрешения ТС спрошу: можно к одной ардуинке (ESP 12e) подключить 3 TM1637 и выводить одну и ту же информацию (время)?
Спасибо
Когда я экспериментировал с I2C коммутатором, у меня были подключены параллельно 4 индикатора на TM1650 ( по архитектуре очень похожие на 1637) . При включении их без коммутатора на вывод все работали синхронно. Проблема возникала только при чтении клавиатуры. Правда есть нюанс , никакие библиотеки не использовал. Работал напрямую с регистрами дисплея.
Прежде чем задавать вопросы почитайте даташит http://olimex.cl/website_MCI/static/documents/Datasheet_TM1637.pdf . Есть два варианта или выделять для управления отдельные пины как в предыдущем посте или использовать что то типа 74hc245 и дишифратора bin -> dec. Или писать на основе готовой библиотеки свои функции.
Ваш пример отказывается работать.
#include "TM1637.h" // Подключаем библиотеку #define CLK_1 8 // первый семисегмент #define DIO_1 9 // #define CLK_2 10 // второй семисегмент #define DIO_2 11 // TM1637 disp_1(CLK_1, DIO_1); TM1637 disp_2(CLK_2, DIO_2); void setup() { disp_1.set(7); //disp_1.init(D4056A); disp_2.set(7); //disp_2.init(D4056A); } void loop() { disp_1.display(1234); delay(2000); disp_2.display(5678); delay(2000); }#include <TM1637Display.h> // У меня библиотека другая делаю так. ind_1val = 1234; ind_1(); ind_2val = -987; ind_2(); //~~~~~~~~~~~~~индикация TM 1637~~~~~~~~~~~~~~~~~~~~~ void ind_1(){// первый индикатор #define CLK 12 #define DIO 13 TM1637Display display(CLK, DIO); display.setBrightness(0x0c); // установкa яркости дисплея display.showNumberDec(abs(ind_1val)); if (ind_1val < 0){ uint8_t data[] = { 0x40 };// вывод "-" . 1-4 0-3 display.setSegments(data, 1, 0);// . кол-во цифр, №-знакаместа } if (abs (ind_1val) < 10){//вывод не значащего ноля "0" uint8_t data[] = { 0x3f };// вывод "0" . 1-4 0-3 display.setSegments(data, 1, 2);// . кол-во цифр, №-знакаместа } } void ind_2(){// второй индикатор #define CLK 10 #define DIO 11 TM1637Display display(CLK, DIO); display.setBrightness(0x0c); // установкa яркости дисплея display.showNumberDec(abs(ind_2val)); if (ind_2val < 0){ uint8_t data[] = { 0x40 };// вывод "-" . 1-4 0-3 display.setSegments(data, 1, 0);// . кол-во цифр, №-знакаместа } if (abs (ind_2val) < 10){//вывод не значащего ноля "0" uint8_t data[] = { 0x3f };// вывод "0" . 1-4 0-3 display.setSegments(data, 1, 2);// . кол-во цифр, №-знакаместа } } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Доброго времени суток, уважаемые форумчане.
Взялся я тут пилить проект, цифровой термометр для гаража и возник один затык.
Имеется 3 датчика 18b20 инфа с них должна приходить на 3 дисплея TM1637.
Так вот, как и можно ли вообще полключить к ардуине все 3 дисплея для вывода температуры?
В данный момент использовал следующую инициализацию:
При подключении второго дисплея ардуина виснет и не отвисает пока дисплей не отключишь.
Помогите решить задачу!
Расскажите по подробнее пожалуйста. Не получается воспроизвести.
зачем закомментировали 10 и 12 строки? Уберите слеши.
зачем закомментировали 10 и 12 строки? Уберите слеши.
Убрал, подключил, при старте на долю секунды мигает второй индикатор и все, больше ничего не происходит.
#include "TM1637.h" // Подключаем библиотеку #define CLK_1 8 // первый семисегмент #define DIO_1 9 // #define CLK_2 10 // второй семисегмент #define DIO_2 11 // TM1637 disp_1(CLK_1, DIO_1); TM1637 disp_2(CLK_2, DIO_2); void setup() { disp_1.set(7); disp_1.init(D4056A); disp_2.set(7); disp_2.init(D4056A); } void loop() { disp_1.display(1234); delay(2000); disp_2.display(5678); delay(2000); }По этому коду, не поленился собрал две ТМки(благо валялись) и уно. Все работает идеально. Проверьте правильность подключения.
Попробуйте запитать одельно семисегменты, не забудьте только объеденить землю унки и землю внешнего питания ТМок.
Попробуйте заменить библиотеку на эту: http://www.arduino.md/wp-content/uploads/library/TM1637-4-digit-display-tube.zip
Попробуйте запитать одельно семисегменты, не забудьте только объеденить землю унки и землю внешнего питания ТМок.
Прошу прощения, действительно, при подключении доп линии 5В на второй дисплей все заработало!
Думаю тему можно закрывать.
Всем большое спасибо.
Доброго времени суток! Ребят, есть вопрос по отображению информации на часовом индикаторе ТМ1637. В целях обучения работы с ардой поставил задачу собрать устройство для управления байпасным краном на котле отопления. За основу сейчас взята ARDUINO UNO, часовой индикатор на ТМ1637 и датчик температуры DS18B20. Код "собрал" из разных скетчей. Индикация температуры требуется в положительном диапазоне до 99*С и она отображаеся нормально, но, на 2и3 разрядах индикатора. Уже бьюсь третью ночь и не могу переместить на 0и1 разряд индикатора.......... Разряды смещаются, но, показания температуры от 1 до 16*С - "0"....."F" и всё, дальше крокозябры. Объясните пожалуйста на пальцах что не так.................
#include <Wire.h> #include <DallasTemperature.h> #include "TM1637.h" #define CLK 3 // LED_дисплей #define DIO 2 // LED_дисплей #define ONE_WIRE_BUS 4 // датчик температуры на выв.4 #define PIN_motor_A 5 // выход на мотор A #define PIN_motor_B 6 // выход на мотор B #define PIN_Alarm 9 // выход сигнала аварии #define PIN_open_stop 7 // датчик кран открыт #define PIN_close_stop 8 // датчик кран закрыт OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); TM1637 tm1637(CLK, DIO); void setup() { tm1637.init();// инициализация библиотеки «TM1637.h» tm1637.set(3);//установка яркости pinMode(PIN_motor_A, OUTPUT); pinMode(PIN_motor_B, OUTPUT); pinMode(PIN_Alarm, OUTPUT); pinMode(PIN_open_stop, INPUT); pinMode(PIN_close_stop, INPUT); sensors.begin(); } void loop() { sensors.requestTemperatures();// опрос температуры currentTemp = sensors.getTempCByIndex(0); delay(200); tm1637.display(currentTemp);//вывод на индикатор значение температуры //tm1637.display(0,currentTemp); !!!!!! замена выше стоящей строки для смещения индикации влево if (currentTemp >= 90) { digitalWrite(5, HIGH); digitalWrite(6, LOW); } if (currentTemp <= 80) { digitalWrite(5, LOW); digitalWrite(6, HIGH); } }