странное поведение с одним дисплеем 7seg

Я хочу отображать предложение посимвольно на одном семисегментном дисплее. Что происходит, так это то, что если мое предложение длиннее 48 символов, центральный сегмент не загорается.

Это работает правильно, если я уберу букву из своей строки.

У меня есть Elegoo Uno R3, и я работаю в Windows с последней версией (2.0.3) Arduino IDE.

Есть ли способ решить эту проблему?

Вот мой код:

# include "SevSeg.h"

SevSeg  sevseg;
char    *str = "Per colpa di qualcuno non si fa credito a nessuno";
int     len = 50;



void setup(){
    byte numDigits = 1;
    byte digitPins[] = {};
    byte segmentPins[] = {6, 5, 2, 3, 4, 7, 8, 9};
    bool resistorsOnSegments = true;

    byte hardwareConfig = COMMON_CATHODE; 
    sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments);
    sevseg.setBrightness(90);
}

void loop(){
  int i = 0;

  while (i < len)
  {
    sevseg.setChars(&(str[i]));
    delay(1000);
    sevseg.refreshDisplay();
    ++i;
  }
}

Заранее спасибо,

Потрясающе

, 👍-1

Обсуждение

Почему digitPins — это пустой массив? У вас есть numDigits как 1, а не ноль., @Nick Gammon

В учебнике говорится, что его следует оставить пустым для отображения одной цифры. Это учебник: Circuitbasics.com/arduino-7-segment-display-tutorial Я буду следовать официальному руководству по Arduino, чтобы узнать, не возникает ли проблема из-за того, как я подключил провода к контактам: https://arduino-france.site/7-segments/, @Fab_x

ХОРОШО. *Это работает правильно, если я уберу букву из своей строки.* - что произойдет, если вы вставите много пробелов в строку? Может что-то перегревается?, @Nick Gammon

Я не пытался честно, я пытался с английским предложением вроде «Мы такие вещи, Из которых сделаны мечты, И наша маленькая жизнь Круглая сном». и все работало нормально. Я начал заново. Большое спасибо за вашу поддержку, @Fab_x


1 ответ


-1

Похоже, setChars ожидает строку, а не один символ.

Поэтому я бы сделал что-то вроде:

  while (int i = 0; i < len; i++)
  {
    char buf [2];
    buf [0] = str[i];
    buf [1] = 0;  // null terminator
    sevseg.setChars(buf);
    sevseg.refreshDisplay();
    delay(1000);
  }

См.: https://github.com/DeanIsMe/SevSeg/blob/master/SevSeg.cpp

,

но указатель на char такой же, как указатель на c-ctring. а функция setChar использует только символы numDigits из входной строки. и numDigits в этом случае равен 1, @Juraj

@NickGammon Спасибо за вашу помощь, но это не решило проблему, или, по крайней мере, оба подхода печатают одно и то же, как если бы проблема возникла из-за места в памяти, где хранится строка., @Fab_x

@juraj что такое numDigits? Я нашел его в функции setChars() в библиотеке, но не могу понять, откуда он взялся, @Fab_x

это количество семисегментных модулей. количество цифр., @Juraj

@Juraj, спасибо, теперь я понял., @Fab_x

Это учебник, которому я следовал: https://www.circuitbasics.com/arduino-7-segment-display-tutorial Мои провода подключены так же, @Fab_x