Подключение нескольких TM1637

Vlad_J
Offline
Зарегистрирован: 28.04.2013

Доброго дня!

Требуется подключить три дисплея. Создаю три объекта (disp1, disp2, disp3). Для всех дисплеев используются одинаковые функции. Вопрос: как объяснить функции, с каким именно дисплеем ей сейчас работать?

Такая конструкция не работает (странно, да?)):

String Ndisp = "disp1";

void SensorRead(Ndisp){
digitalWrite(POWERSENSOR_PIN, HIGH);
val = analogRead(A0);
Serial.print("sensor - ");
Serial.println(val);
digitalWrite(POWERSENSOR_PIN, LOW);
Ndisp.displayInt(val);
}

Или подскажите как правильно запрос на поиск составить))

-NMi-
Offline
Зарегистрирован: 20.08.2018

Скорее всего придётся "изъять" механизм работы с микросхемой из библиотеки и "сотворить" свои функции для управления разными микросхемами, ибо ноги OE или CE в них нет, придётся GPIO дуни вязать на разные ноги.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Vlad_J пишет:
Такая конструкция не работает (странно, да?)):

Действительно странно, и с чего бы ей не работать?

Впрочем, кода не читал. Если хотите, чтобы кто-то читал, вставляйте как положено.

Vlad_J
Offline
Зарегистрирован: 28.04.2013

ЕвгенийП пишет:

Vlad_J пишет:
Такая конструкция не работает (странно, да?)):

Действительно странно, и с чего бы ей не работать?

Впрочем, кода не читал. Если хотите, чтобы кто-то читал, вставляйте как положено.

Прошу пардона - как положено  вставлять код?

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Vlad_J пишет:

Прошу пардона - как положено  вставлять код?

Раньше Вы это умели делать.

Поиздеваться решили? Или коронавирус так повлиял?

Vlad_J
Offline
Зарегистрирован: 28.04.2013

ЕвгенийП пишет:

Vlad_J пишет:

Прошу пардона - как положено  вставлять код?

Раньше Вы это умели делать.

Поиздеваться решили? Или коронавирус так повлиял?

Да, видимо достала, таки и меня эта зараза. Спасибо, вот:

#include "TM1637.h"

//disp1
#define CLK1 2
#define DIO1 3
#define POWSENSOR1 4
#define DataSENSOR1 A0
TM1637 disp1(CLK1, DIO1);

//disp2
#define CLK2 5
#define DIO2 6
#define POWSENSOR2 7
#define DataSENSOR2 A1
TM1637 disp2(CLK2, DIO2);

//disp3
#define CLK3 8
#define DIO3 9
#define POWSENSOR3 10
#define DataSENSOR3 A2
TM1637 disp3(CLK3, DIO3);

int val = 0; //read sensor
unsigned long PeriodSens = 600000;

void setup()
{
  Serial.begin(9600);
  pinMode(DataSENSOR1, INPUT);
  pinMode(DataSENSOR2, INPUT);
  pinMode(DataSENSOR3, INPUT);
  pinMode(POWSENSOR1, OUTPUT);
  pinMode(POWSENSOR2, OUTPUT);
  pinMode(POWSENSOR3, OUTPUT);
  Serial.println("test");
}

void loop()
{
   SensorRead("disp1", POWSENSOR1);
   SensorRead("disp2", POWSENSOR2);
   SensorRead("disp3", POWSENSOR3);

}

void SensorRead(String Ndisp, int POWERSENSOR){
    digitalWrite(POWERSENSOR, HIGH);
    val = analogRead(A0);
    Serial.print("sensor - ");
    Serial.println(val);
    digitalWrite(POWERSENSOR, LOW);
    Ndisp.displayInt(val);
}

Выдаёт вот такую ошибку:

In function 'void SensorRead(String, int)':
 
test_3LED_Sensor:53:11: error: 'class String' has no member named 'displayInt'
 
     Ndisp.displayInt(val);
 
           ^~~~~~~~~~
 
exit status 1
'class String' has no member named 'displayInt'
 
Попытки изменить тип переменной ничего не меняют...
 
b707
Offline
Зарегистрирован: 26.05.2017

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

вместо Ndisp.displayInt() вызовите disp3.displayInt()

Vlad_J
Offline
Зарегистрирован: 28.04.2013

b707 пишет:

у вас должна быть функция displayInt. вероятно выводящая число на индикатор. Но в этом коде такой функции нет.

Она в библиотеке живёт.

Вот фрагмент:

// ************************** ФОРМИРУЕМ ДАННЫЕ *****************************
void TM1637::display(uint8_t DispData[])
{
  uint8_t SegData[4];
  for (byte i = 0; i < 4; i ++) {
	//if (DispData[i] == 0x7f) SegData[i] = 0x00;
	//else 
	//{
		lastData[i] = TubeTab[DispData[i]];
		SegData[i] = TubeTab[DispData[i]] + PointData;
	//}
  }
  sendArray(SegData);
}

Но в этом коде мне вообще трудно что-то понять...

Vlad_J
Offline
Зарегистрирован: 28.04.2013

b707 пишет:

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

вместо Ndisp.displayInt() вызовите disp3.displayInt()

Да, так работает. Но придётся для каждого индикатора свою функцию писать

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Зачем? Передавайте САМУ эту переменную (вернее - ссылку на неё) в функцию, а не её имя. И всё будет нормально.

Vlad_J
Offline
Зарегистрирован: 28.04.2013

ЕвгенийП пишет:

Зачем? Передавайте САМУ эту переменную (вернее - ссылку на неё) в функцию, а не её имя. И всё будет нормально.

Можно пример? Я настолько редко программлю сам, что синтаксис успевает поменяться))

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

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

Vlad_J
Offline
Зарегистрирован: 28.04.2013

ЕвгенийП пишет:

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

Да, как передать значение Ndisp в функцию. Пролистал доступные примеры, примерил проблема одна выскакивает - недовольна функция типом переменной. А что за тип - не знаю где понять можно. Перебрал всё.

void SensorRead(String Ndisp, int POWERSENSOR){
    digitalWrite(POWERSENSOR, HIGH);
    int val = analogRead(A0);
    Serial.print("sensor - ");
    Serial.println(val);
    digitalWrite(POWERSENSOR, LOW);
    Ndisp.displayInt(val);
}

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Мда.

Vlad_J
Offline
Зарегистрирован: 28.04.2013

ЕвгенийП пишет:

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

Вот так пытаюсь вызывать:

String *Ndisp, disp;
   disp = "disp1";
   SensorRead(*Ndisp, POWSENSOR1);

 

 

Vlad_J
Offline
Зарегистрирован: 28.04.2013

DetSimen пишет:

Мда.

Жги, чего уж там...)

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Если никто не пацкажет, завтра я расскажу тебе как. 

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

Vlad_J пишет:

Да, как передать значение Ndisp в функцию.

ваша проблема в том, что вы опять пытаетесь передать название переменной "disp3". вместо самой этой переменной

Тип переменной disp3 какой? - разве String?

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

ТС ты вообще не понимаешь разницы между экземпляром объекта и передаваемой в него информацией ?

Итак , ты объявил 3 экземпляра объекта типа дисплей.
Вот так:
TM1637 disp1(CLK1, DIO1);
TM1637 disp2(CLK2, DIO2);
TM1637 disp3(CLK3, DIO3);

Теперь для того, что бы вывести что нибудь на дисплей 1, тебе нужно обращаться к нему
disp1.display(моя одному мне ведомая херь в виде переменной);

Если нужно что то вывести на дисплей 2, то:
disp2.display(другая неведомая херь);

Что пытаешь сделать ты , я так и не понял.

И да, для вывода переменной типа int используется несколько другая функция, нежели для строки String.
Я вообще не уверен, что строки можно там выводить.
В тех библиотеках, что использую я точно такого функционала из коробки нет.

-NMi-
Offline
Зарегистрирован: 20.08.2018

Kakmyc пишет:

Вот так: TM1637 disp1(CLK1, DIO1); TM1637 disp2(CLK2, DIO2); TM1637 disp3(CLK3, DIO3);

А, ну если так можно - то какие проблемы? Хоть 10 дисплеев вешай, лиж-бы ног у дуни хватило.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

-NMi- пишет:

Kakmyc пишет:

Вот так: TM1637 disp1(CLK1, DIO1); TM1637 disp2(CLK2, DIO2); TM1637 disp3(CLK3, DIO3);

А, ну если так можно - то какие проблемы? Хоть 10 дисплеев вешай, лиж-бы ног у дуни хватило.

Дак он так и писал. Нигде не написано, что оне все на одних ногах

-NMi-
Offline
Зарегистрирован: 20.08.2018

Ааа, яж_низнал....

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

DetSimen пишет:

Если никто не пацкажет, завтра я расскажу тебе как. 

Ну, я тогда помолчу :-)

Vlad_J
Offline
Зарегистрирован: 28.04.2013

Kakmyc пишет:
ТС ты вообще не понимаешь разницы между экземпляром объекта и передаваемой в него информацией ? Итак , ты объявил 3 экземпляра объекта типа дисплей. Вот так: TM1637 disp1(CLK1, DIO1); TM1637 disp2(CLK2, DIO2); TM1637 disp3(CLK3, DIO3); Теперь для того, что бы вывести что нибудь на дисплей 1, тебе нужно обращаться к нему disp1.display(моя одному мне ведомая херь в виде переменной); Если нужно что то вывести на дисплей 2, то: disp2.display(другая неведомая херь); Что пытаешь сделать ты , я так и не понял. И да, для вывода переменной типа int используется несколько другая функция, нежели для строки String. Я вообще не уверен, что строки можно там выводить. В тех библиотеках, что использую я точно такого функционала из коробки нет.

Я пытаюсь три дисплея по очереди обрабатывать одной функцией. Вывод данных на дисплей хочу прямо в функцию упрятать. И надо как-то рассказать функции, с каким дисплеем в конкретный момент работать.

 

Vlad_J
Offline
Зарегистрирован: 28.04.2013

ЕвгенийП пишет:

DetSimen пишет:

Если никто не пацкажет, завтра я расскажу тебе как. 

Ну, я тогда помолчу :-)

Вот так и бывает - у кого-то тут чудеса творятся: если регулировку яркости в сетап не вставить - дисплей полную чушь показывает. Уже и библиотеку подправил.. А кому-то развлекуха))

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

Vlad_J пишет:

Вот так и бывает - у кого-то тут чудеса творятся: если регулировку яркости в сетап не вставить - дисплей полную чушь показывает. Уже и библиотеку подправил.. А кому-то развлекуха))

ну ведь вам уже все подсказали... задачка-то элементарная, прям 2х2. не сложнее

Vlad_J
Offline
Зарегистрирован: 28.04.2013

b707 пишет:

Vlad_J пишет:

Вот так и бывает - у кого-то тут чудеса творятся: если регулировку яркости в сетап не вставить - дисплей полную чушь показывает. Уже и библиотеку подправил.. А кому-то развлекуха))

ну ведь вам уже все подсказали... задачка-то элементарная, прям 2х2. не сложнее

Спасибо, добрый человек! Мне сразу стало легче! Я же неспроста в песочнице пишу

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

Vlad_J пишет:

Спасибо, добрый человек! Мне сразу стало легче! Я же неспроста в песочнице пишу

песочница - не повод ждать. что вам дадаут готовое решение. На самом деле, ваш вопрос очень простой. вы просто не хотите думать.

Ваши переменные дисплея ничем не отличаются от переменных, например типа int - кроме, собственно, типа. И вот подумайте, если бы вам в процедуру надо было передать переменную. описанную как

int x;

неужели бы вы стали передавать ее как строчку "x" ? А если нет - зачем вы это проделываете с переменной disp3 ?

vk007
Offline
Зарегистрирован: 16.06.2015

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

#include "TM1637.h"

const byte CLK[] = {2, 5, 8};
const byte DIO[] = {3, 6, 9};
const byte POWSENSOR[] = {4, 7, 10};
const byte DataSENSOR[] = {A0, A1, A2};

TM1637 disp0(CLK[0], DIO[0]);
TM1637 disp1(CLK[1], DIO[1]);
TM1637 disp2(CLK[2], DIO[2]);

void setup()
{
  Serial.begin(9600);
  for (byte i = 0; i < 3; i++)
  {
    pinMode(DataSENSOR[i], INPUT);
    pinMode(POWSENSOR[i], OUTPUT);
  }
  Serial.println("test");
}

void loop()
{
  disp0.displayInt(SensorRead(0));
  disp1.displayInt(SensorRead(1));
  disp2.displayInt(SensorRead(2));
  delay(1000);
}

int SensorRead(byte Ndisp)
{
  digitalWrite(POWSENSOR[Ndisp], HIGH);
  result = analogRead(DataSENSOR[Ndisp]);
  digitalWrite(POWSENSOR[Ndisp], LOW);
  Serial.print("sensor ");
  Serial.print(Ndisp);
  Serial.print(" - ");
  Serial.println(result);
  return result;
}


 

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

vk007 - эк вы обошли проблему :). так и не показав ТС решения именно его вопроса - как передать обьект дисплея через параметры функции :)

Vlad_J
Offline
Зарегистрирован: 28.04.2013

vk007 пишет:

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

#include "TM1637.h"

const byte CLK[] = {2, 5, 8};
const byte DIO[] = {3, 6, 9};
const byte POWSENSOR[] = {4, 7, 10};
const byte DataSENSOR[] = {A0, A1, A2};

TM1637 disp0(CLK[0], DIO[0]);
TM1637 disp1(CLK[1], DIO[1]);
TM1637 disp2(CLK[2], DIO[2]);

void setup()
{
  Serial.begin(9600);
  for (byte i = 0; i < 3; i++)
  {
    pinMode(DataSENSOR[i], INPUT);
    pinMode(POWSENSOR[i], OUTPUT);
  }
  Serial.println("test");
}

void loop()
{
  disp0.displayInt(SensorRead(0));
  disp1.displayInt(SensorRead(1));
  disp2.displayInt(SensorRead(2));
  delay(1000);
}

int SensorRead(byte Ndisp)
{
  digitalWrite(POWSENSOR[Ndisp], HIGH);
  result = analogRead(DataSENSOR[Ndisp]);
  digitalWrite(POWSENSOR[Ndisp], LOW);
  Serial.print("sensor ");
  Serial.print(Ndisp);
  Serial.print(" - ");
  Serial.println(result);
  return result;
}


 

 

Запихать функцию в вывод не догадался...  Думаю, этого может быть достаточно. Спасибо! Завтра отпишу по результату

Vlad_J
Offline
Зарегистрирован: 28.04.2013

b707 пишет:

Vlad_J пишет:

Спасибо, добрый человек! Мне сразу стало легче! Я же неспроста в песочнице пишу

песочница - не повод ждать. что вам дадаут готовое решение. На самом деле, ваш вопрос очень простой. вы просто не хотите думать.

Ваши переменные дисплея ничем не отличаются от переменных, например типа int - кроме, собственно, типа. И вот подумайте, если бы вам в процедуру надо было передать переменную. описанную как

int x;

неужели бы вы стали передавать ее как строчку "x" ? А если нет - зачем вы это проделываете с переменной disp3 ?

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

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

Vlad_J пишет:

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

а вот эту строку понимаете? можете обьяснить где тут что ?

TM1637 disp1(CLK1, DIO1);

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

берешь от эту биб-ку https://github.com/DetSimen/TM1637

и печатаешь на своих экранчиках всё что угодно.  Обьявление: 

TM1637 Display1(Clock1Pin, Data1Pin, enTM1637Type::Number);
TM1637 Display2(Clock2Pin, Data2Pin, enTM1637Type::Number);
TM1637 Display3(Clock3Pin, Data3Pin, enTM1637Type::Number);

 

А передавать функции экранчег можно так

void PrintAtDisplay(const TM1637 &Display, const float AValue) {
   Display.Print(AValue);
}

А вызывать так 

PrintAtDisplay(Display1, 3.14);
PrintAtDisplay(Display2, 2.72);
PrintAtDisplay(Display3, 1.41);

на трёх разных экранчиках будут нарисованы три разные цифры. 

Vlad_J
Offline
Зарегистрирован: 28.04.2013

DetSimen пишет:

берешь от эту биб-ку https://github.com/DetSimen/TM1637

и печатаешь на своих экранчиках всё что угодно.  Обьявление: 

TM1637 Display1(Clock1Pin, Data1Pin, enTM1637Type::Number);
TM1637 Display2(Clock2Pin, Data2Pin, enTM1637Type::Number);
TM1637 Display3(Clock3Pin, Data3Pin, enTM1637Type::Number);

 

А передавать функции экранчег можно так

void PrintAtDisplay(const TM1637 &Display, const float AValue) {
   Display.Print(AValue);
}

А вызывать так 

PrintAtDisplay(Display1, 3.14);
PrintAtDisplay(Display2, 2.72);
PrintAtDisplay(Display3, 1.41);

на трёх разных экранчиках будут нарисованы три разные цифры. 

Спасибо! Буду примерять. Уже три библиотеки перебрал. Взял одну и ту руками правил.

Vlad_J
Offline
Зарегистрирован: 28.04.2013

b707 пишет:

Vlad_J пишет:

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

а вот эту строку понимаете? можете обьяснить где тут что ?

TM1637 disp1(CLK1, DIO1);

 

Весьма приблизительно. Первое - класс, второе - объект. В скобках пины тактирования и данных.

Вот код из библиотеки:

TM1637::TM1637(uint8_t clk, uint8_t dio)
{
  Clkpin = clk;
  Datapin = dio;
  pinMode(Clkpin, OUTPUT);
  pinMode(Datapin, OUTPUT);
}

Аккуратно замечу, что по утверждению антропологов кроманьонец на заре человечества уже мог бы решать дифференциальные уравнения и т.п., мозг уже был вполне. Но не было, кто мог бы объяснить ему эти уравнения. А чтоб додуматься - вот столько времени ушло

 

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

Vlad_J пишет:

Аккуратно замечу, что по утверждению антропологов кроманьонец на заре человечества уже мог бы решать дифференциальные уравнения и т.п., мозг уже был вполне. Но не было, кто мог бы объяснить ему эти уравнения. А чтоб додуматься - вот столько времени ушло

 

так у него интернета не было :) - а у вас - есть. Так что отмазка не катит :)

Vlad_J
Offline
Зарегистрирован: 28.04.2013

b707 пишет:

Vlad_J пишет:

Аккуратно замечу, что по утверждению антропологов кроманьонец на заре человечества уже мог бы решать дифференциальные уравнения и т.п., мозг уже был вполне. Но не было, кто мог бы объяснить ему эти уравнения. А чтоб додуматься - вот столько времени ушло

 

так у него интернета не было :) - а у вас - есть. Так что отмазка не катит :)

Да, в гугле меня ещё не забанили, как и в других поисковых. И, ессно, прежде чем писать сюда и отвлекать занятых людей, я прошерстил как смог.

И открывая тему писал: "Или подскажите как правильно запрос на поиск составить"

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

b707 пишет:

так у него интернета не было :) 

Вы уверены? На самом деле, хрен его знает. По крайней мере доподлинно известно, что во времена Ю. Цезаря были газеты (перевод из римской вечерней газеты, вышедшей в день убийства Цезаря), а захват Соловья разбойника богатырём Ильёй освещался в радиоэфире (подлинный текст и аудио радиопередачи того времени).

Кстати, если не читали, почитайте :-))) Второе - конечно, просто литературное подражание первому, но тоже не бесталанное, ну а первое - мировая классика.

 

Vlad_J
Offline
Зарегистрирован: 28.04.2013

Доброго вечера!

Решил вот так пока оставить:

#include "TM1637.h"
//#include "String.h"

//disp1
#define CLK1 2
#define DIO1 3
#define POWSENSOR1 4
#define DataSENSOR1 A0
TM1637 disp1(CLK1, DIO1);
byte BRIGHT1 = 2;

//disp2
#define CLK2 5
#define DIO2 6
#define POWSENSOR2 7
#define DataSENSOR2 A1
TM1637 disp2(CLK2, DIO2);
byte BRIGHT2 = 2;

//disp3
#define CLK3 8
#define DIO3 9
#define POWSENSOR3 10
#define DataSENSOR3 A2
TM1637 disp3(CLK3, DIO3);
byte BRIGHT3 = 2;

int val = 0; //read sensor
unsigned long PeriodSens = 600000;

void setup()
{
  disp1.firstset();
  disp2.firstset();
  disp3.firstset();

  pinMode(DataSENSOR1, INPUT);
  pinMode(DataSENSOR2, INPUT);
  pinMode(DataSENSOR3, INPUT);
  pinMode(POWSENSOR1, OUTPUT);
  pinMode(POWSENSOR2, OUTPUT);
  pinMode(POWSENSOR3, OUTPUT);

  Serial.begin(9600);
  Serial.println("test");
}

void loop()
{
   SensorRead(&disp1, POWSENSOR1, DataSENSOR1, BRIGHT1);
   SensorRead(&disp2, POWSENSOR2, DataSENSOR2, BRIGHT2);
   SensorRead(&disp3, POWSENSOR3, DataSENSOR3, BRIGHT3);
   delay(5000);
}

//Sensor request
void SensorRead(TM1637* p, byte POWSENSOR, uint8_t DataSENSOR, byte BRIGHT){  
    digitalWrite(POWSENSOR, HIGH);
    val = analogRead(DataSENSOR);
    digitalWrite(POWSENSOR, LOW);
    Serial.print("sensor - ");
    Serial.println(val);
    p->brightness(BRIGHT);
    p->displayInt(val);
    return val;
}

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

Jaeger
Jaeger аватар
Offline
Зарегистрирован: 23.03.2018
Всем здрасте!
Дополнение к мультииндикаторному подключению.
В приведенных выше примерах каждый индикатор подключен к ардуине 2 мя линиями: Clock и Data, т.е. для подключения 3х индикаторов требуется 6 пинов ардуины. Между тем, как показала практика, можно объединить линии Clock индикаторов и подключить к одному пину ардуины, тем самым съэкономив 2 пина. Т.е. для подключения 3х индикаторов требуется уже 4 пина ардуины. Соответственно в объявлениях следует указать в качестве Clock-пина один и тот-же номер пина ардуины для каждого индикатора.
 
Например:
#include "TM1637.h"

#define ClockPin  2

#define Data1Pin  5
#define Data2Pin  6
#define Data3Pin  7

TM1637 Display1(ClockPin, Data1Pin);
TM1637 Display2(ClockPin, Data2Pin, enTM1637Type::Number);
TM1637 Display3(ClockPin, Data3Pin, enTM1637Type::Number);

Проверено с либой от DetSimena.

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

А не наоборот: Data pin общий, а Clock pin - индивидуальный для каждого?

Jaeger
Jaeger аватар
Offline
Зарегистрирован: 23.03.2018

Наоборот тоже работает.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Значить, это не баг, а фича  :)

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

Для тех, кто понимает как работают сдвиговые регистры никакой загадки в этом нет в принципе.