TM1637 Десятичные точки

Я использую следующую плату TM1637 с клоном Arduino Pro Micro.

Я пытаюсь использовать "библиотеку TM1637Display", написанную Авишаем Орпазом, но не могу найти способ использовать четыре десятичных точки на этом дисплее (в отличие от двоеточия, которое появляется на многих 4-разрядных дисплеях). Есть ли способ использовать этот драйвер для вывода одной из десятичных точек на дисплей? Если нет, то какой драйвер 1637 позволит мне выводить десятичную точку? Я собираюсь считывать напряжения на нескольких аналоговых входах Arduino и выводить их на дисплей последовательно.

, 👍2

Обсуждение

Продавец не предоставил никакой документации, даже распиновки. Не покупайте продукты без документации. Теперь ваш единственный вариант — экспериментировать и выяснить, можно ли вообще использовать десятичные точки. В качестве альтернативы вы можете вернуть дисплеи, оставить предупреждение для других в отзывах и купить те, которые включают документацию., @StarCat

Кроме того, вы можете поискать и просмотреть лист данных дисплея, чтобы найти штифт для десятичной точки. Затем вам нужно перепроектировать плату дисплея и проверить, управляет ли ее логика управления этим штифтом вообще. Если повезет, то она это делает., @the busybee

@StarCat и busybee. TM1637 — это ИС драйвера светодиодного дисплея и клавиатуры с техническим описанием. Никакой специальной распиновки, только данные и часы, а библиотека TM1637Display работает для OP., @Juraj

@Juraj На модуле четыре контакта без какой-либо очевидной маркировки контактов (вы бы хотя бы хотели знать, куда подключать Vcc, Gnd, SDA и SCL), а в описании продукта ничего не говорится о I2C. В любом случае, это был просто пример того, что это модуль, который не поддерживается его продавцом, и когда вы покупаете его, вы сами по себе., @StarCat

@StarCat извините, это не I2C, а похожий двухпроводной протокол. Я отредактировал комментарий. У TM1637 IC есть даташит, @Juraj

ОК, это определенно работает. Я нашел тестовый скетч, который отображает все четыре десятичных знака. Смотрите мой ответ. Эти платы чрезвычайно распространены, доступны на ebay, Amazon и в других местах., @LesRhorer


2 ответа


0

В примере библиотеки TM1637Display Авишая Орпаза есть следующее:

// Проходим по всем точкам
for(k=0; k <= 4; k++) {
  display.showNumberDecEx(0, (0x80 >> k), true);
  delay(TEST_DELAY); // показать точку
}

Если вы используете display.setSegments и кодируете сегменты в скетче, точка — это 8 бит в байте, кодирующем сегменты цифры.

displayData[i] = display.encodeDigit(digit[i])
displayData[i] |= 0x80; // показать точку
,

из [TM1631Display.h](https://github.com/avishorp/TM1637/blob/master/TM1637Display.h#L84-L107) метод showNumberDecEx() поддерживает включение точки, и это не совсем старший бит для управления точкой, а маска сдвига битов, зависящая от того, точку какой цифры следует включить., @hcheung

@hcheung да. как и говорится в ответе, @Juraj

Упс! Я писал свой ответ, когда вы опубликовали свой. Спасибо., @LesRhorer


1

Я нашел это (отредактировано для релевантности)

#include <Arduino.h>
#include <TM1637Display.h>

// Контакты подключения модуля (цифровые контакты)
#define CLK 4
#define DIO 3

// Создаем новый экземпляр класса TM1637Display
TM1637Display display(CLK, DIO);

// Количество времени (в миллисекундах) между тестами
#define TEST_DELAY   2000

void setup() {};


void loop()
{
  int k;
  uint8_t data[]  = { 0xff, 0xff, 0xff, 0xff }; // Создаем массив, который включает все сегменты
  uint8_t blank[] = { 0x00, 0x00, 0x00, 0x00 }; // Создаем массив, который отключает все сегменты
  display.setBrightness(0x0f);

  // Все сегменты включены
  display.setSegments(data);
  delay(TEST_DELAY);
  
    // Проходим по всем точкам
    for(k=0; k <= 4; k++) {
        display.showNumberDecEx(0, (0x80 >> k), true);
        delay(TEST_DELAY);
    }
}
,