Как отобразить номер с помощью библиотеки SevSeg на 4-разрядном 7-сегментном светодиодном дисплее

Я получаю сообщение об ошибке. Он отображает те сегменты, которые не должны отображаться, т.е. 3.141 темный, а остальные сегменты красные.

#include "SevSeg.h"

SevSeg sevseg; // Инициируем объект контроллера из семи сегментов

void setup() {
    byte numDigits = 4;
    byte digitPins[] = {2, 3, 4, 5};
    byte segmentPins[] = {6, 7, 8, 9, 10, 11, 12, 13};
    sevseg.begin(COMMON_ANODE, numDigits, digitPins, segmentPins);
    sevseg.setBrightness(1000);
}

void loop() {
    sevseg.setNumber(3141, 3);
    sevseg.refreshDisplay(); // Должен запускаться повторно
}

, 👍5

Обсуждение

Вы уверены, что у вас есть правильный тип общего для вашего дисплея?, @Majenko


3 ответа


2

Существует два основных типа семисегментного дисплея:

  • Общий анод
  • Общий катод

Общий относится к тому факту, что один конец светодиодов внутри цифры связан и должен быть подключен либо к Vcc, либо к GND, в зависимости от тип дисплея (см. ниже). Другой конец каждого светодиода (по одному на сегмент) используется для их включения, и именно они подключаются к контактам Arduino или контроллеру светодиодов.

Общий анод

Общий анод

Общий конец подключается к линии Vcc. Если вы хотите зажечь сегмент, то входной штырь этого сегмента должен быть переведен в положение LOW.

4-значный семисегментный дисплей с общим анодом

Однозначный семисегментный дисплей с общим анодом

Источник: Четыре мультиплексированных 7-сегментных светодиода ОБЩЕГО АНОДА

Общий катод

Общий катод

Общий конец подключается к линии GND. Если вы хотите зажечь сегмент, то входной контакт для этого сегмента должен быть потянут HIGH.

Семисегментный одноразрядный дисплей с общим катодом


Похоже, у вас перевернута логика, поэтому горят не те сегменты, когда они должны быть темными, и наоборот.

Либо так, либо вам нужно инвертировать логику в вашем коде, и, например, если вы в настоящее время вытягиваете контакт LOW, чтобы зажечь сегмент, вам нужно изменить свой код, чтобы вытащить контакт HIGH.


Источники изображений:

Учебники по электронике

7-сегментные дисплеи с общим анодом/катодом

,

-1

установите яркость на значение от 10 до 100, а не на 1000..

,

0

Вы можете попробовать следующее:

#include "SevSeg.h"

SevSeg sevseg; // Инициируем объект контроллера из семи сегментов

void setup() {
    byte numDigits = 4;
    byte digitPins[] = {2, 3, 4, 5};
    byte segmentPins[] = {6, 7, 8, 9, 10, 11, 12, 13};
    sevseg.begin(COMMON_CATHODE, numDigits, digitPins, segmentPins);
    sevseg.setBrightness(1000);
}

void loop() {
    sevseg.setNumber(3141, 3);
    sevseg.refreshDisplay(); // Должен запускаться повторно
}
,