4-Значный 7-сегментный дисплей мигает

Я пытаюсь сделать счетчик Arduino, используя 4-значный 7-сегментный дисплей. Проблема, с которой я сталкиваюсь, - это мерцание дисплея. Я использую Arduino Uno и цифровой дисплей 5641AS (так часто используется катод). Вот моя программа:

#include "SevSeg.h"
SevSeg sevseg; 

int buttonPress{}; // Переменная, используемая в последовательном мониторе, имитирует нажатие кнопки для увеличения счетчика
void setup(){
  byte numDigits = 4;
  byte digitPins[] = {10, 11, 12, 13};
  byte segmentPins[] = {9, 2, 3, 5, 6, 8, 7, 4};

  bool resistorsOnSegments = true; 

  bool updateWithDelays = false; 
  byte hardwareConfig = COMMON_CATHODE; 
  sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments);
  sevseg.setBrightness(90);
  Serial.begin(9600);
  sevseg.setNumber(0);
  sevseg.refreshDisplay();
}
void loop(){
  static int number = 0;
  
  if (Serial.available() > 0) { // Serial monitor input for buttonPress
    buttonPress = Serial.read();
  }
    Serial.println("The value of buttonPress is:  ");
    Serial.println(buttonPress);
    if (buttonPress == 10){ // Increment counter if buttonPress Serial monitor input = 10
    number += 15;
    buttonPress = 0; 
    sevseg.setNumber(number); // Отображение числа на 4 значном 7 сегментном дисплее   
    }

    sevseg.refreshDisplay(); // Обновить дисплей
}

Я подозреваю , что эта проблема связана с sevseg.refreshDisplay (), я пытался переместить его в программу безрезультатно. Моя проводка правильна, так как программа отображает правильные цифры. Спасибо!

, 👍2

Обсуждение

Это, вероятно, спам сериала, который замедляет все., @Majenko

удалите серийный код и код кнопки ... дисплей 1234 только ... он все еще мерцает, @jsotola

Большое спасибо Маенко и джсотоле!! Запуск последовательного выхода монитора исправляет это, @Sony


1 ответ


Лучший ответ:

2

С помощью Мадженко и джсотолы в комментариях я все исправил! Это был текст, который я показывал на Последовательном мониторе, который замедлял отображение. Вот обновленная программа, которая работает:

#include "SevSeg.h"
SevSeg sevseg; 

int buttonPress{}; // Переменная, используемая в последовательном мониторе, имитирует нажатие кнопки для увеличения счетчика
void setup(){
  byte numDigits = 4;
  byte digitPins[] = {10, 11, 12, 13};
  byte segmentPins[] = {9, 2, 3, 5, 6, 8, 7, 4};

  bool resistorsOnSegments = true; 

  bool updateWithDelays = false; 
  byte hardwareConfig = COMMON_CATHODE; 
  sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments);
  sevseg.setBrightness(90);
  Serial.begin(9600);
  sevseg.setNumber(0);
  sevseg.refreshDisplay();
}
void loop(){
  static int number = 0;
  
  if (Serial.available() > 0) { // Serial monitor input for buttonPress
    buttonPress = Serial.read();
  }
// СЛЕДУЮЩИЕ ДВЕ СТРОКИ БЫЛИ ЗАКОММЕНТИРОВАНЫ ДЛЯ РАБОТЫ
   // Serial.println("The value of buttonPress is:  ");
   // Serial.println(buttonPress);
    if (buttonPress == 10){ // Increment counter if buttonPress Serial monitor input = 10
    number += 15;
    buttonPress = 0; 
    sevseg.setNumber(number); // Отображение числа на 4 значном 7 сегментном дисплее   
    }

    sevseg.refreshDisplay(); // Обновить дисплей
}

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

,