Не очищается дисплей на TM1637

ArduinoNano

✩✩✩✩✩✩✩
26 Июл 2021
2
0
Доброго времени суток! Имею код ниже. Программа должна выводить цифры нажатые клавиатурой. После того как место на дисплее заканчивается (counter), то дисплей должен очиститься. Я использую clear, но ничего не происходит. Она работает лишь только в ф-ф setup. Варианты решений?
C++:
#define CLK 11
#define DIO 12

#include <GyverTM1637.h>
#include <Keypad.h>

const byte ROWS = 5;
const byte COLS = 4;

/*
char Keys[ROWS][COLS] = {
  {'F', 'f', '#', '*'},
  {'1', '2', '3', 'U'},
  {'4', '5', '6', 'D'},
  {'7', '8', '9', 'e'},
  {'L', '0', 'R', 'E'}

};
*/

uint8_t Keys[ROWS][COLS] = {
  {0x0, 0x0, 0x0, 0x0},
  {_1, _2, _3, 0x0},
  {_4, _5, _6, 0x0},
  {_7, _8, _9, 0x0},
  {0x0, _0, 0x0, 0x0}

};

byte rowPins[ROWS] = {10,9,8,7,6};
byte colPins[COLS] = {2,3,4,5};

Keypad customKeypad = Keypad(makeKeymap(Keys), rowPins, colPins, ROWS, COLS);
GyverTM1637 disp(CLK, DIO);

int counter = 0;
uint8_t numbers[4] = {_empty, _empty, _empty, _empty};

void Print(uint8_t button) {
  if (counter == 4){
    counter = 0;
    disp.clear(); // Увы, не работает......
  }

  if (counter != 4){
   numbers[counter] = button;
   ++counter;

  }
  disp.displayByte(numbers);
  delay(100);
}

void setup() {
  Serial.begin(9600);
  disp.clear();
  disp.brightness(7);

}

void loop() {
  byte customKey = customKeypad.getKey();

  if (customKey){
    Print(customKey);
  }
  delay(3);
}
 

Геннадий П

★★✩✩✩✩✩
14 Апр 2021
312
71
41
Как вариант, по сути аналогично очистке:
disp.displayByte(_empty , _empty , _empty , _empty );
 

Старик Похабыч

★★★★★★✩
14 Авг 2019
2,942
825
Москва
А по программе я не видел полной очистки. По программе должно быть где то так
Жмем:1
Получааем: _ _ _ 1
Жмем:2
Получааем: _ _ 1 2
Жмем:3
Получааем: _ 1 2 3
Жмем:4
Получааем: 1 2 3 4
Жмем:5
Получааем (вроде): 1 2 3 5
Ну или в обратном направлении
Если надо при нажатии 5 что бы экран просто очистился, без вывода цифры, то


C++:
oid Print(uint8_t button) {
  if (counter == 4){
    counter = 0;
    disp.clear(); // Увы, не работает......
    numbers[0] = 10; // ВОТ ТУТ НЕ УВЕРЕН, НО ВРОДЕ ЕСЛИ ЧИСЛО ВЫШЕ ЧЕМ 9 ТО ПУСТОЕ МЕСТО!
    numbers[1] = 10;
    numbers[2] = 10;
    numbers[3] = 10;
  }
    else
  {
   numbers[counter] = button;
   ++counter;
  }
  disp.displayByte(numbers);
  delay(100);
}
Главная ошибка в том, что не очищается буфер numbers при нажатии 5-ый раз.