Мах7219 7сегмент. метод добавления своих знаков

Ответить
hatul
Сержант
Сообщения: 147
Зарегистрирован: 06 май 2017, 18:40
Откуда: Netanya

Мах7219 7сегмент. метод добавления своих знаков

Сообщение hatul »

Решил собрать простенькие часы с температурой на Мах7219 и 7 сегментных индикаторах. Все работает прекрасно. Но не знаю как добавить перед знаком "С" значек "градус" ,чтобы получилось так:
Часы_темп. МАХ7219_7segm.flp
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
belyx
Сержант
Сообщения: 251
Зарегистрирован: 24 июл 2016, 20:38
Откуда: Витебск Беларусь
Благодарил (а): 7 раз

Часы/Темп. на Мах7219_7сегмент.

Сообщение belyx »

2Часы_темп. МАХ7219_7segm.flp
Отправлено спустя 6 минут 36 секунд:
а вообще то это пройдёт для индикатора lcd 44780, для этого - вряд ли,попробуйте

Отправлено спустя 5 минут 50 секунд:
когда то экспериментально проверял
[spoiler]
символы для MAX7219.jpg
[/spoiler]
У вас нет необходимых прав для просмотра вложений в этом сообщении.
hatul
Сержант
Сообщения: 147
Зарегистрирован: 06 май 2017, 18:40
Откуда: Netanya

Часы/Темп. на Мах7219_7сегмент.

Сообщение hatul »

[ref]belyx[/ref], Направление то верное,проверил-работает.Только в библиотеке нет нужного символа.То что на первой картинке я делал на ТМ1638.Там тоже нет нужного символа. Я открывал библиотеку для ТМ1638 и добавлял код нужного символа. В частности нужный мне символ это Нех 0х63 или двоичный В01100011. И как видно работает. Осталось найти используемую библиотеку и либо добавить символ,либо подменить какую либо не используемую букву.А вот как это сделать я не знаю.

Отправлено спустя 17 минут 16 секунд:
Вот например вставил маленькую о.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Labu559
Лейтенант
Сообщения: 359
Зарегистрирован: 25 янв 2018, 22:23
Откуда: Bukovyna
Имя: Василий

Часы/Темп. на Мах7219_7сегмент.

Сообщение Labu559 »

hatul писал(а): 18 апр 2020, 23:17Только в библиотеке нет нужного символа.
В используемой библиотеке "arduino-Max72xxPanel" вообще нет знакогенератора, в МАХ7219 вшит дешифратор с минимальным набором символом, но штатный блок не использует его, а имеет собственный знакогенератор по совпадению, при чем, извините, не самой лучшей конструкции. Предлагаю Вам самый простой метод добавления своих знаков. Для этого найти в Ардуино ИДЕ при компиляции Вашего проекта [spoiler title=функцию byte _Max7216IntToSevenSegment(int value)]
FunctionMAX7219.png
[/spoiler] и заменить её содержимое следующим кодом

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

byte  _Max7216IntToSevenSegment(int value)
{
  if (value == 48) {
    return 126;
  }
  else if (value == 49) {
    return 48;
  }
  else if (value == 50) {
    return 109;
  }
  else if (value == 51) {
    return 121;
  }
  else if (value == 52) {
    return 51;
  }
  else if (value == 53) {
    return 91;
  }
  else if (value == 54) {
    return 95;
  }
  else if (value == 55) {
    return 112;
  }
  else if (value == 56) {
    return 127;
  }
  else if (value == 57) {
    return 123;
  }
  else if (value == 45) {
    return 1;
  }
  else if (value == 65) {
    return 119;
  }
  else if (value == 67) {
    return 78;
  }
  else if (value == 99) {
    return 13;
  }
  else if (value == 100) {
    return 61;
  }
  else if (value == 69) {
    return 79;
  }
  else if (value == 70) {
    return 71;
  }
  else if (value == 72) {
    return 55;
  }
  else if (value == 104) {
    return 23;
  }
  else if (value == 76) {
    return 14;
  }
  else if (value == 79) {
    return 126;
  }
  else if (value == 111) {
    return 29;
  }
  else if (value == 80) {
    return 103;
  }
  else if (value == 114) {
    return 5;
  }
  else if (value == 83) {
    return 91;
  }
  else if (value == 116) {
    return 15;
  }
  else if (value == 85) {
    return 62;
  }
  else if (value == 117) {
    return 28;
  }
  else if (value == 110) {
    return 21;
  }
  else if (value == 42) {
    return 99;
  }
  else return 0;
}
В котором Ваш искомый символ градуса сопоставлен символу звёздочка * и заменена конструкция if на else if (не на много лучше :) ).
В дальнейшем можете воспользоваться приложенной ниже инструкцией в рисунках [spoiler title=для самостоятельного добавления/кодирования желаемых символов.]
ASCII_7seg_MATCH.png
ascii-chars-landscape.jpg
7-Segments-CodeTable.jpg
[/spoiler]
Удачи и весёлых праздников!
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
belyx
Сержант
Сообщения: 251
Зарегистрирован: 24 июл 2016, 20:38
Откуда: Витебск Беларусь
Благодарил (а): 7 раз

Часы/Темп. на Мах7219_7сегмент.

Сообщение belyx »

У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
rw6cm
Полковник
Сообщения: 2372
Зарегистрирован: 06 сен 2015, 20:25
Имя: Владимир
Поблагодарили: 41 раз

Часы/Темп. на Мах7219_7сегмент.

Сообщение rw6cm »

[ref]hatul[/ref],
Если не замарачиваться можно так:
Поставить символ n и заменить в коде при заливке цифру 21 (это символ n) на 99
2020_04_19_18_46_39_pr12_Arduino_1.8.11.png
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Win10-64, FLProg (portable)
hatul
Сержант
Сообщения: 147
Зарегистрирован: 06 май 2017, 18:40
Откуда: Netanya

Часы/Темп. на Мах7219_7сегмент.

Сообщение hatul »

[ref]Labu559[/ref],
Класс! Сработало как надо! Огромное спасибо! Сначала,как Вы сказали,заменил полностью на Ваш код.Сработало отлично. Потом,когда вник как это работает, решил просто добавить строку:
else if (value == 42)
{ return 99;
и тоже все работает!

Отправлено спустя 6 минут 5 секунд:
[ref=#ff8000]rw6cm[/ref], Спасибо большое за помощь! Уже
hatul писал(а): 19 апр 2020, 19:02Labu559
научил как сделать.Единственное он подставил * (звездочку).
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
belyx
Сержант
Сообщения: 251
Зарегистрирован: 24 июл 2016, 20:38
Откуда: Витебск Беларусь
Благодарил (а): 7 раз

Часы/Темп. на Мах7219_7сегмент.

Сообщение belyx »

[ref]hatul[/ref],
Предлагаю немного изменить название вашей темы: добавить + простой метод добавления своих знаков.
hatul
Сержант
Сообщения: 147
Зарегистрирован: 06 май 2017, 18:40
Откуда: Netanya

Часы/Темп. на Мах7219_7сегмент.

Сообщение hatul »

[ref]belyx[/ref], Да я бы с удовольствием,только я не знаю как редактировать заголовок.
Labu559
Лейтенант
Сообщения: 359
Зарегистрирован: 25 янв 2018, 22:23
Откуда: Bukovyna
Имя: Василий

Мах7219 7сегмент. метод добавления своих знаков

Сообщение Labu559 »

hatul писал(а): 19 апр 2020, 19:08 просто добавить строку:
else if (value == 42)
{ return 99;
и тоже все работает!
Ув. [ref]hatul[/ref], Рад за Вас, однако это не одно и то-же. Если в указанной выше функции, при поиске символа он будет первый (к примеру value == 48 символ 0 ), то в конструкции else if функция прекратит своё выполнение и возвратит байтовое представление этого символа. В оригинальном коде она продолжит поиск неизвестно чего до последней строки, хотя совпадение уже было найдено в первой сроке конструкции if.
Для информации пользователям, точно такой же знакогенератор (функция byte _IntToSevenSegment(int value)) используется в штатном (встроенном) блоке программы "Блок декодирования семисегментного индикатора" папка "Дисплеи", и этот метод применим тут тоже.
P.S. Вопрос исправления конструкции я поднимал несколько лет назад в теме про этот блок, "но ход не дошёл" по Якубовичу. :)
Последний раз редактировалось Labu559 19 апр 2020, 22:34, всего редактировалось 1 раз.
hatul
Сержант
Сообщения: 147
Зарегистрирован: 06 май 2017, 18:40
Откуда: Netanya

Мах7219 7сегмент. метод добавления своих знаков

Сообщение hatul »

[ref]Labu559[/ref], Еще раз огромное спасибо! По поводу последнего поста,это ну прямо по анкдоту"дяденька,это ты с кем щас разговаривал!?" Если бы я все это знал...! Кстати я маленько ошибся.Я добавлял без else . Вот так:
if (value == 42)
{ return 99;
Возможно так более правильно. Еще раз повторюсь-я пробую методом тыка. Вы показали как НАДО делать,а я уже тыкаю наугад,что получится.Естественно Ваш метод,как основной,законсперирован,и подшит в памятную тетрадку.
Ответить

Вернуться в «Помогите, а то я "нимагу"»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость