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

Значек "градус" на 7 сегментном индикаторе.

Ответить
hatul
Сержант
Сообщения: 147
Зарегистрирован: 06.05.2017{, 18:40}
Репутация: 0
Откуда: Netanya

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

#1

Сообщение hatul » 18.04.2020{, 21:46}

Решил собрать простенькие часы с температурой на Мах7219 и 7 сегментных индикаторах. Все работает прекрасно. Но не знаю как добавить перед знаком "С" значек "градус" ,чтобы получилось так:
Часы_темп. МАХ7219_7segm.flp
(60.26 КБ) 52 скачивания
Вложения
004.jpg
004.jpg (15.88 КБ) 861 просмотр
001.jpg
001.jpg (7.7 КБ) 868 просмотров

Аватара пользователя
belyx
Сержант
Сообщения: 247
Зарегистрирован: 24.07.2016{, 20:38}
Репутация: 20
Откуда: Витебск Беларусь

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

#2

Сообщение belyx » 18.04.2020{, 22:03}

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

Отправлено спустя 5 минут 50 секунд:
когда то экспериментально проверял
СпойлерПоказать
символы для MAX7219.jpg
символы для MAX7219.jpg (10 КБ) 851 просмотр

hatul
Сержант
Сообщения: 147
Зарегистрирован: 06.05.2017{, 18:40}
Репутация: 0
Откуда: Netanya

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

#3

Сообщение hatul » 18.04.2020{, 23:00}

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

Отправлено спустя 17 минут 16 секунд:
Вот например вставил маленькую о.
Вложения
005 [320x200].jpg
005 [320x200].jpg (12.51 КБ) 839 просмотров

Labu559
Лейтенант
Сообщения: 359
Зарегистрирован: 25.01.2018{, 22:23}
Репутация: 95
Откуда: Bukovyna
Имя: Василий

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

#4

Сообщение Labu559 » 19.04.2020{, 16:20}

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

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

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 (не на много лучше :) ).
В дальнейшем можете воспользоваться приложенной ниже инструкцией в рисунках
для самостоятельного добавления/кодирования желаемых символов.Показать
ASCII_7seg_MATCH.png
ascii-chars-landscape.jpg
7-Segments-CodeTable.jpg
Удачи и весёлых праздников!

Аватара пользователя
belyx
Сержант
Сообщения: 247
Зарегистрирован: 24.07.2016{, 20:38}
Репутация: 20
Откуда: Витебск Беларусь

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

#5

Сообщение belyx » 19.04.2020{, 18:30}


Аватара пользователя
rw6cm
Полковник
Сообщения: 2284
Зарегистрирован: 06.09.2015{, 20:25}
Репутация: 335
Имя: Владимир

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

#6

Сообщение rw6cm » 19.04.2020{, 18:49}

hatul,
Если не замарачиваться можно так:
Поставить символ n и заменить в коде при заливке цифру 21 (это символ n) на 99
2020_04_19_18_46_39_pr12_Arduino_1.8.11.png
2020_04_19_18_46_39_pr12_Arduino_1.8.11.png (4.46 КБ) 775 просмотров
Win10-64, FLProg (portable)

hatul
Сержант
Сообщения: 147
Зарегистрирован: 06.05.2017{, 18:40}
Репутация: 0
Откуда: Netanya

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

#7

Сообщение hatul » 19.04.2020{, 19:02}

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

Отправлено спустя 6 минут 5 секунд:
rw6cm, Спасибо большое за помощь! Уже
hatul писал(а):
19.04.2020{, 19:02}
Labu559
научил как сделать.Единственное он подставил * (звездочку).
Вложения
008.jpg
008.jpg (23.29 КБ) 770 просмотров

Аватара пользователя
belyx
Сержант
Сообщения: 247
Зарегистрирован: 24.07.2016{, 20:38}
Репутация: 20
Откуда: Витебск Беларусь

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

#8

Сообщение belyx » 19.04.2020{, 19:23}

hatul,
Предлагаю немного изменить название вашей темы: добавить + простой метод добавления своих знаков.

hatul
Сержант
Сообщения: 147
Зарегистрирован: 06.05.2017{, 18:40}
Репутация: 0
Откуда: Netanya

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

#9

Сообщение hatul » 19.04.2020{, 19:57}

belyx, Да я бы с удовольствием,только я не знаю как редактировать заголовок.

Labu559
Лейтенант
Сообщения: 359
Зарегистрирован: 25.01.2018{, 22:23}
Репутация: 95
Откуда: Bukovyna
Имя: Василий

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

#10

Сообщение Labu559 » 19.04.2020{, 21:57}

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

hatul
Сержант
Сообщения: 147
Зарегистрирован: 06.05.2017{, 18:40}
Репутация: 0
Откуда: Netanya

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

#11

Сообщение hatul » 19.04.2020{, 22:26}

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

Ответить

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