Официальный сайт компании Arduino по адресу arduino.cc
Сокращение кода
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Втр, 08/11/2016 - 19:03
Коллеги, как корректно подставить значение "data" в функцию вывода комбинации сегментов на семисегментный индикатор. Этот код работает, но хотелось бы одной строкой и значение напрямую без переменной.
uint8_t data[] = {0x54}; displayLed.setSegments (data);
Коллеги, как корректно подставить значение "data" в функцию вывода комбинации сегментов на семисегментный индикатор. Этот код работает, но хотелось бы одной строкой и значение напрямую без переменной.
Не знаю, что это за библиотека, но судя по коду, функция setSegment требует указателя (на кой-то хрен). Поэтому совсем уж без переменной не получится. Думаю, будет работать, например, так
БиблиотекаTM1637Display. Когда прописываешь непосредственно переменную или константу, на дисплее другой символ(другие сегменты) отображаются... Может формат или тип этого значения нужно изменить, чтобы напрямую задавать??? Значений много, хотелось бы уменьшить количество строк кода, если это возможно.
может так displayLed.setSegments (b0110110);
БиблиотекаTM1637Display.
Ну, если Вы ещё и ссылку дадите, то я посмотрю что там. Пока же я вижу, что В передаёте на само значение, а указатель на него. А если так, то значение должно быть где-то в памяти. Возможно, там есть перегруженные методы, давайте ссылку.
https://github.com/avishorp/TM1637.
Наверно значение в двоичном коде библиотека проглотит... (Как предложил Калапуций). В шеснадцатиричном не хочет, зажигает не те сегменты индикатора...
Наверно значение в двоичном коде библиотека проглотит
Щасс!
С чего бы она глотала, если там явно требуется массив, а не одиночное значение?
Более того, Вы что имеете в виду под вот такой конструкцией?
Сколько знаков Вы желаете установить? Если все 4, то где три остальные значения? Если один, то где указание какой именно?
Если оно в таком виде и работает, то это случайность - благодаря тому, что после массива в памяти нули сидят.
Вот же она - Ваша функция
Всё понятно. А так как Вы делаете - нельзя.
Другое дело, что это Вы там такое выводите, что Вам эта функция нужна? Если Вам нужно выводить что-то особое, то, конечно, а если просто числа, то там же есть вот такая:
Угу. Нужен указатель на данные. Без данных его тяжело получить ;) И есть ощущение, что Вы чегото не того деланте. И зачем код сокращать он и так компактный? Ану колитесь! Код сюда, и по быстрому;) Ща научим как его писать..
ПС. Клапауций 234, я тож люблю поприкалыватся, но не так же плоско.
Если оно в таком виде и работает, то это случайность - благодаря тому, что после массива в памяти нули сидят.
Пожалуй вы правы, похоже я обьявил безразмерный массив и первым в нем шеснацатиричное значение, остальные члены массива нули... Значит короткая запись без дополнительного объявления константы, должна быть такой?
Значит короткая запись без дополнительного объявления константы, должна быть такой?
Нет, конечно. Вы код смотрели?
Первый параметр - указатель на область памяти, где находится столько байтовых значений, сколько разрядов Вы собрались менять. Второй параметр - количество этих самых значений. Третий параметр - позиция разряда с которого начинаются изменения.
Сколько разрядов Вы хотите менять? Один? Какой именно? Или два? Какие именно? Или три ... Или все четыре сразу? От этого зависит какие у Вас будут параметры.
В любом случае первым идёт указатель!
Я уже говорил, нужно изменить в первом разряде символ, зажечь нужные мне сегменты.
Если в функцию передаются непосредственно значения, для чего нужен указатель, ведь мы не объявляем константу, в памяти не резервируется для нее место. Функция должна отработать неважно как к ней передаются данные, непосредственно или через переменную(константу)
Функция должна
Кому это она так задолжала? Вам?
Игорь, в программировании всё тупо - по-военному. Если написано "из того же материала", значит "из того же материала", если сказано "люминь", значит "люминь".
Так вот в описании функции написано "указатель", значит "указатель".
И фукнция Вам ничего не должна кроме как отработать ТОЧНО так, как написано, а не как подсказывает Ваша фантазия о её долге.
в памяти не резервируется для нее место
та, да - значение переменной святой дух контроллеру сообщает
*как это чюдо должно, согласно религиозным догмам называться? - материализация невещественных объектов.
ОК, задача начинающих - прислушаться к профи и учиться.
Кстати, Вам никто не мешает переписать эту библиотечную функцию (вернее, добавить в класс новую) так, как Вам нравится. Это, слава Богу, несложно. И тогда, ради Бога передавайте что хотите.
С библиотекой наверно рановато, опыта маловато, тут бы разобраться.
С библиотекой наверно рановато, опыта маловато, тут бы разобраться.
А чего там разбираться? Вам же уже всё объяснили. Вам осталось только не спорить с теми, кто этим десятки лет занимается и принять к сведению, что говорят.
А функцию добавить - вообще делать нечего. Вам что нужно? Передать один байт для изменения одного сегмента и Вы по каким-то религиозным соображениям не хотите объявлять байтовую переменную, чтобы взять на неё указатель, так ведь?
Ну допишите свою функцию. Открываете .h файл, ищете там строку
И прямо перед ней дописываете
И всего делов. Теперь, если Вы напишете по старому - с тремя параметрами, то первым должен быть указатель. А если напишете по-новому - с двумя параметрами, то первым идёт непосредственное значение, а вторым - номер сегмента. Второй параметр можно опускать, тогда он будет 0.
Вот так на примере наглядно и понятно, какова должна быть последовательность действий. Это то что нужно, Спасибо!
В этом случае в файле *.срр править ничего не нужно?
понятно
...
В этом случае в файле *.срр править ничего не нужно?
Что-то эти две фразы между собой не стыкуются :)
Нет, не надо.
то-то эти две фразы между собой не стыкуются :)
:) :). ;)
Еще раз спасибо за участие и науку!