4-значный 7-сегментный дисплей неправильно отображает значение

Я пытаюсь добавить 4-значный 7-сегментный дисплей в существующий проект (датчик температуры и относительной влажности), чтобы показать температуру на дисплее.

Я купил дисплей давным-давно, и у меня нет никакого идентификатора, и у меня нет никаких ссылок на схему, поэтому я последовал этой статье, чтобы выяснить, является ли это общим катодом или анодом, и распиновкой.

Оказывается, это обычный катодный дисплей, и распиновка выглядит так (пронумерована сверху слева):

1 -> D1
2 -> А
3 -> F
4 -> D2
5 -> D3
6 -> B
7 -> E
8 -> D
9 -> ДП
10 -> C
11 -> G
12 -> D4

Где D{1,2,3,4} - цифровые управляющие контакты, а остальные - сегменты.

Поэтому я добавил библиотеку SevSeg в свой проект. И скетч компилируется, но когда я загружаю его в свой Arduino Uno, все светодиоды в цифрах 1 и 4 загораются, а цифры два и три остаются выключенными.

Я дважды проверил распиновку, с теми же результатами, и дисплей, похоже, не поврежден. Вы видите какие-либо проблемы в моем коде?

Заранее спасибо!

, 👍-2

Обсуждение

изолируйте область отказа ... переключите провода с цифровым выводом ... посмотрите, есть ли проблема с дисплеем или с программой, @jsotola

Убедитесь, что вы ничего не подключаете к контактам, используемым экраном Ethernet, @chrisl

https://www.instructables.com/Using-a-4-digit-7-segment-display-with-arduino / Это может быть полезно... Я использовал это, и это сработало., @Hasan


3 ответа


1

Ваша проблема может быть в коде или в вашем оборудовании.

Чтобы выяснить, какой из них, попробуйте запустить один из примеров скетчей, таких как testWholeDisplay.ino, который поставляется вместе с используемой библиотекой. Таким образом, вы знаете рабочий код и проверяете, правильно ли подключено ваше оборудование. Если этот шаг не сработает, вам нужно изучить проводку и / или настройку.

Если использование примера скетча работает, то вы можете начать изучать свой скетч. Разделите его на куски и протестируйте каждый кусок независимо друг от друга. Если какой-либо фрагмент не работает, то выясните, что отличается от примеров скетчей по сравнению с вашим кодом.

,

Вы правы, я использовал этот пример, и дисплей работает нормально. Проблема может быть в том, что говорит @hcheung, поэтому я попытаюсь освободить контакты 11, 12, 13, 14 и использовать аналоговые контакты в качестве цифровых контактов. Другим вариантом было бы использовать светодиодный драйвер., @foundationer


2

То, что вызвало проблему с цифрой, управляемой выводом 12, для меня совершенно очевидно. Вы используете контакт 11, 12, 13, 14 для ввода 7-сегментных цифр. В то время как библиотека SPI по умолчанию использует пины 10, 11, 12, 13 как SS, MOSI, MISO и SCK, а также устанавливает контакт 12 (MISO) в качестве входного сигнала, который конфликтует с вашим пином 12 (как ВЫХОД) для управления цифрой.

Вывод 13 также используется интервальным мигающим светодиодом (т.Е. BUILTIN_LED), когда он определен как цифровой ввод-вывод.

Ваш код использует довольно много библиотек, и эти библиотеки могут использовать некоторые контакты ввода-вывода, я бы посоветовал вам сократить свой код только до кода, связанного с SevSeg, установить дисплей на все "8888" и добавить каждую библиотеку одну за другой, чтобы выяснить, что вызвало проблему.

,

1

Реверс-инжиниринг вашего кода, который генерируется https://examples.blynk.cc, Я обнаружил, что вы используете:

  • Arduino Uno
  • W5100 Ethernet shield (или Arduino Ethernet Rev3)
  • ДХТ11
  • 4-значный 7-сегментный дисплей

Ваш пример кода Blynk выглядел примерно так.

Для 7-сегментного дисплея используются контакты 3, 5, 6, 7, 8, 9, 11, 12, 13, А0, А1, А2.

byte digitPins[] = { 11, 12, 13, A2};
byte segmentPins[] = {3, A0, 5, 6, 7, 8, 9, A1};

Однако контроллер W5100 Ethernet использует контакты 10, 11, 12 и 13, как показано на веб-странице Arduino Ethernet:

NB: Контакты 10, 11, 12 и 13 зарезервированы для взаимодействия с модулем Ethernet и не должны использоваться иначе. Это уменьшает количество доступных контактов до 9, а 4 доступны в качестве ШИМ-выходов.

Контакты 2 и 4 используются для выбора чипа DHT11 и SD-карты соответственно.

Все, что вам нужно сделать, это изменить проводку семисегментного дисплея, чтобы он не использовал контакты 11, 12 и 13, а затем соответствующим образом скорректировать свой скетч. Например, вы можете использовать A3, A4 и A5.

,