Подключение нескольких TM1637
- Войдите на сайт для отправки комментариев
Чт, 16/04/2020 - 16:12
Доброго дня!
Требуется подключить три дисплея. Создаю три объекта (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);
}
Или подскажите как правильно запрос на поиск составить))
Скорее всего придётся "изъять" механизм работы с микросхемой из библиотеки и "сотворить" свои функции для управления разными микросхемами, ибо ноги OE или CE в них нет, придётся GPIO дуни вязать на разные ноги.
Действительно странно, и с чего бы ей не работать?
Впрочем, кода не читал. Если хотите, чтобы кто-то читал, вставляйте как положено.
Действительно странно, и с чего бы ей не работать?
Впрочем, кода не читал. Если хотите, чтобы кто-то читал, вставляйте как положено.
Прошу пардона - как положено вставлять код?
Прошу пардона - как положено вставлять код?
Раньше Вы это умели делать.
Поиздеваться решили? Или коронавирус так повлиял?
Прошу пардона - как положено вставлять код?
Раньше Вы это умели делать.
Поиздеваться решили? Или коронавирус так повлиял?
Да, видимо достала, таки и меня эта зараза. Спасибо, вот:
Выдаёт вот такую ошибку:
вы используете вместо обьекта его имя в виде строчки. Это неверно, само имя переменной ничего не значит для компилятора.
вместо Ndisp.displayInt() вызовите disp3.displayInt()
у вас должна быть функция displayInt. вероятно выводящая число на индикатор. Но в этом коде такой функции нет.
Она в библиотеке живёт.
Вот фрагмент:
Но в этом коде мне вообще трудно что-то понять...
вы используете вместо обьекта его имя в виде строчки. Это неверно, само имя переменной ничего не значит для компилятора.
вместо Ndisp.displayInt() вызовите disp3.displayInt()
Да, так работает. Но придётся для каждого индикатора свою функцию писать
Зачем? Передавайте САМУ эту переменную (вернее - ссылку на неё) в функцию, а не её имя. И всё будет нормально.
Зачем? Передавайте САМУ эту переменную (вернее - ссылку на неё) в функцию, а не её имя. И всё будет нормально.
Можно пример? Я настолько редко программлю сам, что синтаксис успевает поменяться))
Синтаксис чего? Как передавать переменную? Или как передавать ссылку на неё?
Синтаксис чего? Как передавать переменную? Или как передавать ссылку на неё?
Да, как передать значение Ndisp в функцию. Пролистал доступные примеры, примерил проблема одна выскакивает - недовольна функция типом переменной. А что за тип - не знаю где понять можно. Перебрал всё.
Мда.
Синтаксис чего? Как передавать переменную? Или как передавать ссылку на неё?
Вот так пытаюсь вызывать:
Мда.
Жги, чего уж там...)
Если никто не пацкажет, завтра я расскажу тебе как.
Да, как передать значение Ndisp в функцию.
ваша проблема в том, что вы опять пытаетесь передать название переменной "disp3". вместо самой этой переменной
Тип переменной disp3 какой? - разве String?
ТС ты вообще не понимаешь разницы между экземпляром объекта и передаваемой в него информацией ?
Итак , ты объявил 3 экземпляра объекта типа дисплей.
Вот так:
TM1637 disp1(CLK1, DIO1);
TM1637 disp2(CLK2, DIO2);
TM1637 disp3(CLK3, DIO3);
Теперь для того, что бы вывести что нибудь на дисплей 1, тебе нужно обращаться к нему
disp1.display(моя одному мне ведомая херь в виде переменной);
Если нужно что то вывести на дисплей 2, то:
disp2.display(другая неведомая херь);
Что пытаешь сделать ты , я так и не понял.
И да, для вывода переменной типа int используется несколько другая функция, нежели для строки String.
Я вообще не уверен, что строки можно там выводить.
В тех библиотеках, что использую я точно такого функционала из коробки нет.
Вот так: TM1637 disp1(CLK1, DIO1); TM1637 disp2(CLK2, DIO2); TM1637 disp3(CLK3, DIO3);
А, ну если так можно - то какие проблемы? Хоть 10 дисплеев вешай, лиж-бы ног у дуни хватило.
Вот так: TM1637 disp1(CLK1, DIO1); TM1637 disp2(CLK2, DIO2); TM1637 disp3(CLK3, DIO3);
А, ну если так можно - то какие проблемы? Хоть 10 дисплеев вешай, лиж-бы ног у дуни хватило.
Дак он так и писал. Нигде не написано, что оне все на одних ногах
Ааа, яж_низнал....
Если никто не пацкажет, завтра я расскажу тебе как.
Ну, я тогда помолчу :-)
Я пытаюсь три дисплея по очереди обрабатывать одной функцией. Вывод данных на дисплей хочу прямо в функцию упрятать. И надо как-то рассказать функции, с каким дисплеем в конкретный момент работать.
Если никто не пацкажет, завтра я расскажу тебе как.
Ну, я тогда помолчу :-)
Вот так и бывает - у кого-то тут чудеса творятся: если регулировку яркости в сетап не вставить - дисплей полную чушь показывает. Уже и библиотеку подправил.. А кому-то развлекуха))
Вот так и бывает - у кого-то тут чудеса творятся: если регулировку яркости в сетап не вставить - дисплей полную чушь показывает. Уже и библиотеку подправил.. А кому-то развлекуха))
ну ведь вам уже все подсказали... задачка-то элементарная, прям 2х2. не сложнее
Вот так и бывает - у кого-то тут чудеса творятся: если регулировку яркости в сетап не вставить - дисплей полную чушь показывает. Уже и библиотеку подправил.. А кому-то развлекуха))
ну ведь вам уже все подсказали... задачка-то элементарная, прям 2х2. не сложнее
Спасибо, добрый человек! Мне сразу стало легче! Я же неспроста в песочнице пишу
Спасибо, добрый человек! Мне сразу стало легче! Я же неспроста в песочнице пишу
песочница - не повод ждать. что вам дадаут готовое решение. На самом деле, ваш вопрос очень простой. вы просто не хотите думать.
Ваши переменные дисплея ничем не отличаются от переменных, например типа int - кроме, собственно, типа. И вот подумайте, если бы вам в процедуру надо было передать переменную. описанную как
int x;
неужели бы вы стали передавать ее как строчку "x" ? А если нет - зачем вы это проделываете с переменной disp3 ?
7 лет - срок долгий, дабы еще на 7 лет не растянулось, держи. У меня нет этой библиотеки, поэтому не компилировал, возможны ошибки и опечатки.
vk007 - эк вы обошли проблему :). так и не показав ТС решения именно его вопроса - как передать обьект дисплея через параметры функции :)
7 лет - срок долгий, дабы еще на 7 лет не растянулось, держи. У меня нет этой библиотеки, поэтому не компилировал, возможны ошибки и опечатки.
Запихать функцию в вывод не догадался... Думаю, этого может быть достаточно. Спасибо! Завтра отпишу по результату
Спасибо, добрый человек! Мне сразу стало легче! Я же неспроста в песочнице пишу
песочница - не повод ждать. что вам дадаут готовое решение. На самом деле, ваш вопрос очень простой. вы просто не хотите думать.
Ваши переменные дисплея ничем не отличаются от переменных, например типа int - кроме, собственно, типа. И вот подумайте, если бы вам в процедуру надо было передать переменную. описанную как
int x;
неужели бы вы стали передавать ее как строчку "x" ? А если нет - зачем вы это проделываете с переменной disp3 ?
Я же писал, что не могу понять, что за тип переменной надо передавать. Уже тупым перебором пробовал - ничего ей не нравится
Я же писал, что не могу понять, что за тип переменной надо передавать. Уже тупым перебором пробовал - ничего ей не нравится
а вот эту строку понимаете? можете обьяснить где тут что ?
берешь от эту биб-ку https://github.com/DetSimen/TM1637
и печатаешь на своих экранчиках всё что угодно. Обьявление:
А передавать функции экранчег можно так
А вызывать так
на трёх разных экранчиках будут нарисованы три разные цифры.
берешь от эту биб-ку https://github.com/DetSimen/TM1637
и печатаешь на своих экранчиках всё что угодно. Обьявление:
А передавать функции экранчег можно так
А вызывать так
на трёх разных экранчиках будут нарисованы три разные цифры.
Спасибо! Буду примерять. Уже три библиотеки перебрал. Взял одну и ту руками правил.
Я же писал, что не могу понять, что за тип переменной надо передавать. Уже тупым перебором пробовал - ничего ей не нравится
а вот эту строку понимаете? можете обьяснить где тут что ?
Весьма приблизительно. Первое - класс, второе - объект. В скобках пины тактирования и данных.
Вот код из библиотеки:
Аккуратно замечу, что по утверждению антропологов кроманьонец на заре человечества уже мог бы решать дифференциальные уравнения и т.п., мозг уже был вполне. Но не было, кто мог бы объяснить ему эти уравнения. А чтоб додуматься - вот столько времени ушло
Аккуратно замечу, что по утверждению антропологов кроманьонец на заре человечества уже мог бы решать дифференциальные уравнения и т.п., мозг уже был вполне. Но не было, кто мог бы объяснить ему эти уравнения. А чтоб додуматься - вот столько времени ушло
так у него интернета не было :) - а у вас - есть. Так что отмазка не катит :)
Аккуратно замечу, что по утверждению антропологов кроманьонец на заре человечества уже мог бы решать дифференциальные уравнения и т.п., мозг уже был вполне. Но не было, кто мог бы объяснить ему эти уравнения. А чтоб додуматься - вот столько времени ушло
так у него интернета не было :) - а у вас - есть. Так что отмазка не катит :)
Да, в гугле меня ещё не забанили, как и в других поисковых. И, ессно, прежде чем писать сюда и отвлекать занятых людей, я прошерстил как смог.
И открывая тему писал: "Или подскажите как правильно запрос на поиск составить"
так у него интернета не было :)
Вы уверены? На самом деле, хрен его знает. По крайней мере доподлинно известно, что во времена Ю. Цезаря были газеты (перевод из римской вечерней газеты, вышедшей в день убийства Цезаря), а захват Соловья разбойника богатырём Ильёй освещался в радиоэфире (подлинный текст и аудио радиопередачи того времени).
Кстати, если не читали, почитайте :-))) Второе - конечно, просто литературное подражание первому, но тоже не бесталанное, ну а первое - мировая классика.
Доброго вечера!
Решил вот так пока оставить:
Спасибо всем, кто помогал, всем кто пытался помочь и всем, кто не пытался, но болел за дело!)))
Проверено с либой от DetSimena.
А не наоборот: Data pin общий, а Clock pin - индивидуальный для каждого?
Наоборот тоже работает.
Значить, это не баг, а фича :)
Для тех, кто понимает как работают сдвиговые регистры никакой загадки в этом нет в принципе.