74HC595 к 4 значному 7 сегменту с использованием библиотеки SevSegShift
У меня есть вопрос относительно использования библиотеки SevSegShift. Я правильно последовал примеру и проверил его, чтобы увидеть, работает ли он. Он смог включить семь сегментов и осветить все светодиоды (даже десятичные), но он не показывает выход, который я хочу показать.
Основываясь на приведенном ниже коде, я хочу показать число 500, но это не так. Даже попробовал sevsegshift.setChars("abcd")
- никаких изменений.
Это мой код:
#include <SevSegShift.h>
#define SHIFT_PIN_SHCP 6
#define SHIFT_PIN_STCP 5
#define SHIFT_PIN_DS 4
SevSegShift sevseg(SHIFT_PIN_DS, SHIFT_PIN_SHCP, SHIFT_PIN_STCP, 1, true);
void setup() {
byte numDigits = 4;
byte digitPins[] = {9, 10, 11, 12}; // Это КОНТАКТЫ ** ардуино **
byte segmentPins[] = {0, 1, 2, 3, 4, 5, 6, 7}; // это контакты ** сдвигового регистра **
bool resistorsOnSegments = false; // 'false' означает, что резисторы находятся на разрядных контактах
byte hardwareConfig = COMMON_CATHODE; // См. README.md для вариантов
bool updateWithDelays = false; // По умолчанию рекомендуется "false"
bool leadingZeros = false; // Используйте "true", если вы хотите сохранить ведущие нули
bool disableDecPoint = true; // Используйте "true", если ваша десятичная точка не существует или не подключена
sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments, updateWithDelays, leadingZeros, disableDecPoint);
sevseg.setBrightness(10);
}
void loop() {
sevseg.setNumber(500);
//delay(1000);
sevseg.refreshDisplay(); // Должен выполняться повторно; не используйте блокирующий код (например, delay()) в функции loop (), иначе это не сработает правильно
}
Это моя схема макета внизу.
(резисторы 220 Ом на цифровых выводах и сегментных выводах подключены к регистру сдвига)
@fireblazer10, 👍3
Обсуждение1 ответ
Лучший ответ:
Наконец, мне удалось исправить это с помощью @PeterPaulKiefer, и я смог найти проблему. Проблема в самом коде (схема в порядке. Никаких изменений там нет) и это обновленный код.
#include <SevSegShift.h>
#define SHIFT_PIN_SHCP 6
#define SHIFT_PIN_STCP 5
#define SHIFT_PIN_DS 4
SevSegShift sevseg(SHIFT_PIN_DS, SHIFT_PIN_SHCP, SHIFT_PIN_STCP, 1, true);
void setup() {
byte numDigits = 4;
byte digitPins[] = {12, 11, 10, 9}; // Это контакты ** Arduino **
byte segmentPins[] = {0, 1, 2, 3, 4, 5, 6, 7}; // это контакты ** сдвигового регистра **
bool resistorsOnSegments = false; // "false" означает, что резисторы находятся на разрядных выводах
byte hardwareConfig = COMMON_ANODE; // См. README.md для опций
bool updateWithDelays = false; // По умолчанию "false" рекомендуется
bool leadingZeros = false; // Используйте "true", если вы хотите, чтобы начальные нули
bool disableDecPoint = false; // Используйте "true", если ваша десятичная точка не существует или не подключена
sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments, updateWithDelays, leadingZeros, disableDecPoint);
sevseg.setBrightness(100);
}
void loop() {
sevseg.setNumber(500);
sevseg.refreshDisplay(); // Должен выполняться повторно; не используйте блокирующий код (например, delay()) в функции loop (), иначе это не будет работать правильно
}
Что изменилось:
- Оказывается, мой 7-сегмент
-это COMMON_ANODE,
поэтому я изменил своюжесткую настройку
- Установите яркость на 100 (На этом этапе он показывает число в обратном порядке, но с десятичной запятой в каждой цифре)
- Установите
для
параметра disableDecPoint значение false
(В этот момент дисплей отображается, но в обратном порядке, но не более десятичной точки) - Чтобы исправить это, я установил
цифры[]
в обратном порядке, и теперь он показывает правильный формат
Большое спасибо Питеру за то, что помог мне разобраться, в чем дело!
Кроме того, светодиодная панель, которую я использую, состоит из 4-значного светодиода 0,36", 7-сегментного дисплея с общим анодом. (Ссылка на магазин, в котором я его купил)
- Подключение семисегментного дисплея с общим анодом к сдвиговому регистру
- Arduino uno - 4-значный 7-сегментный дисплей через 74HC595 продолжает мигать
- Прочитать значение регистра в arduino
- 7-сегментный дисплей с потенциометром
- Как прочитать выходные данные с разъема SPI с помощью Arduino Uno?
- Как обнаружить нажатия кнопок с помощью сдвигового регистра 74HC595?
- 4-значный 7-сегментный дисплей неправильно отображает значение
- Проблема с подключением 2 8-разрядных сдвиговых регистров 74HC595 в каскадном соединении
См. Комментарий к последнему утверждению. Он говорит: "не используйте блокирующий код в цикле for, например" delay ()", а одной строкой выше вы используете delay(). Хммм, возможно ?! Наверное, сдвиговый регистр обновляется очень быстро., @Peter Paul Kiefer
@PeterPaulKiefer Спасибо, это была оплошность с моей стороны. Вынул
delay()
и все тот же вывод :(, @fireblazer10Вы подключили +5V и заземлили к макету? Ваша схема их не показывает., @StarCat
@StarCat Yep! Извини, что забыл эту часть. Будет редактировать его :D, @fireblazer10
Для меня это была самая очевидная возможность неудачи. Но есть и другие. Яркость 10 кажется мне очень низкой (макс 100). Если у вас есть светодиоды COMMON_ANODE, но вы настроили COMMON_CATHODEs, это инвертирует яркость. Темно - это Ярко, а Ярко-это Темно. Возьмите это вместе, и я мог бы привести к вашим наблюдениям. И, вероятно, проводка не правильная. Если вы добавите фотографию в пост, мы можем проверить это. Кстати. pin 12 не может обеспечить выход PWM (no ~ symbol), поэтому он не может быть использован для регулирования яркости подключенной цифры., @Peter Paul Kiefer
@PeterPaulKiefer Это действительно имело большой смысл! Я изменил его на "COMMON_ANODE" и установил яркость на 100, так что мне не нужно менять контакт 12. Это очень помогло! Единственная проблема сейчас заключается в том, что дисплей показывает в обратном порядке, а десятичная точка показывает, даже если я установил "disableDecPoint" на "true", но я смог исправить это, перевернув цифровые контакты, а также установив "disableDecPoint" на "false". Я поставлю обновленный код, а также некоторые выходные данные изображения :D, @fireblazer10
поменяйте местами контакты выбора цифр, @Juraj
Пожалуйста, забудьте последнее предложение в моем последнем комментарии. Я заглянул в lib-код, и они не используют ШИМ для управления яркостью. Вместо этого они используют пользовательский метод контроля яркости над включением и временем работы светодиода., @Peter Paul Kiefer
@PeterPaulKiefer, PWM wit 595?, @Juraj
@Juraj. Если вы контролируете обратную дорожку (контакты селектора цифр), она должна работать. Конечно, сдвиговый регистр не может быть использован для ШИМ ;-). И да, их собственный метод гораздо более умен, чем ШИМ. Должен признаться., @Peter Paul Kiefer
@PeterPaulKiefer, PWM on digit selection pins? это имеет еще меньше смысла. только одна цифра может быть зажжена одновременно. перерисовка быстро высвечивает цифры одну за другой. время между перерисовками определяет яркость дисплея, @Juraj
@Juraj Как я писал, это не умная альтернатива, но это зависит от скорости ШИМ, если это возможно или нет. Признаюсь, идея PWM не самая лучшая из тех, что у меня были, а также было бы лучше, если бы я попытался подумать, прежде чем писать. ;-), @Peter Paul Kiefer
здравствуйте, я сделал это, но у меня есть вопрос, как мы можем включить точки??, @user75738
эта программа и бог проводки, но я не могу найти способ включить десятичную точку с числами, @user75738