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 загораются, а цифры два и три остаются выключенными.
Я дважды проверил распиновку, с теми же результатами, и дисплей, похоже, не поврежден. Вы видите какие-либо проблемы в моем коде?
Заранее спасибо!
@foundationer, 👍-2
Обсуждение3 ответа
Ваша проблема может быть в коде или в вашем оборудовании.
Чтобы выяснить, какой из них, попробуйте запустить один из примеров скетчей, таких как testWholeDisplay.ino
, который поставляется вместе с используемой библиотекой. Таким образом, вы знаете рабочий код и проверяете, правильно ли подключено ваше оборудование. Если этот шаг не сработает, вам нужно изучить проводку и / или настройку.
Если использование примера скетча работает, то вы можете начать изучать свой скетч. Разделите его на куски и протестируйте каждый кусок независимо друг от друга. Если какой-либо фрагмент не работает, то выясните, что отличается от примеров скетчей по сравнению с вашим кодом.
Вы правы, я использовал этот пример, и дисплей работает нормально. Проблема может быть в том, что говорит @hcheung, поэтому я попытаюсь освободить контакты 11, 12, 13, 14 и использовать аналоговые контакты в качестве цифровых контактов. Другим вариантом было бы использовать светодиодный драйвер., @foundationer
То, что вызвало проблему с цифрой, управляемой выводом 12, для меня совершенно очевидно. Вы используете контакт 11, 12, 13, 14 для ввода 7-сегментных цифр. В то время как библиотека SPI по умолчанию использует пины 10, 11, 12, 13 как SS, MOSI, MISO и SCK, а также устанавливает контакт 12 (MISO) в качестве входного
сигнала, который конфликтует с вашим пином 12 (как ВЫХОД
) для управления цифрой.
Вывод 13 также используется интервальным мигающим светодиодом (т.Е. BUILTIN_LED
), когда он определен как цифровой ввод-вывод.
Ваш код использует довольно много библиотек, и эти библиотеки могут использовать некоторые контакты ввода-вывода, я бы посоветовал вам сократить свой код только до кода, связанного с SevSeg, установить дисплей на все "8888" и добавить каждую библиотеку одну за другой, чтобы выяснить, что вызвало проблему.
Реверс-инжиниринг вашего кода, который генерируется 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.
- 74HC595 к 4 значному 7 сегменту с использованием библиотеки SevSegShift
- 7-сегментный дисплей с потенциометром
- Как прочитать выходные данные с разъема SPI с помощью Arduino Uno?
- 4-значный 7-сегментный дисплей
- генератор чисел показывает неправильные сегменты на 7-сегментном дисплее
- Подключение семисегментного дисплея с общим анодом к сдвиговому регистру
- 4-значный 7-сегментный дисплей отображает неверный номер
- 7-сегментный дисплеи не работают
изолируйте область отказа ... переключите провода с цифровым выводом ... посмотрите, есть ли проблема с дисплеем или с программой, @jsotola
Убедитесь, что вы ничего не подключаете к контактам, используемым экраном Ethernet, @chrisl
https://www.instructables.com/Using-a-4-digit-7-segment-display-with-arduino / Это может быть полезно... Я использовал это, и это сработало., @Hasan