Как отобразить номер с помощью библиотеки 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(); // Должен запускаться повторно
}
@JSO, 👍5
Обсуждение3 ответа
Существует два основных типа семисегментного дисплея:
- Общий анод
- Общий катод
Общий относится к тому факту, что один конец светодиодов внутри цифры связан и должен быть подключен либо к Vcc, либо к GND, в зависимости от тип дисплея (см. ниже). Другой конец каждого светодиода (по одному на сегмент) используется для их включения, и именно они подключаются к контактам Arduino или контроллеру светодиодов.
Общий анод
Общий конец подключается к линии Vcc. Если вы хотите зажечь сегмент, то входной штырь этого сегмента должен быть переведен в положение LOW
.
Источник: Четыре мультиплексированных 7-сегментных светодиода ОБЩЕГО АНОДА
Общий катод
Общий конец подключается к линии GND. Если вы хотите зажечь сегмент, то входной контакт для этого сегмента должен быть потянут HIGH
.
Похоже, у вас перевернута логика, поэтому горят не те сегменты, когда они должны быть темными, и наоборот.
Либо так, либо вам нужно инвертировать логику в вашем коде, и, например, если вы в настоящее время вытягиваете контакт LOW
, чтобы зажечь сегмент, вам нужно изменить свой код, чтобы вытащить контакт HIGH
.
Источники изображений:
Учебники по электронике
7-сегментные дисплеи с общим анодом/катодом
Вы можете попробовать следующее:
#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(); // Должен запускаться повторно
}
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
Вы уверены, что у вас есть правильный тип общего для вашего дисплея?, @Majenko