Arduino: вывести несколько чисел на LED дисплей

В предыдущей статье рассказывалось о том, как вывести число вот на такой светодиодный дисплей:
Но очень хочется выводить сразу несколько чисел на один дисплей (например: температуру и влажность, или расстояние и время). Это довольно просто запрограммировать на Си.
Итак, как и в предыдущем примере, DIN, CS и CLK соединены с пинами 7, 9 и 8. Рабочий макет выглядит так:



В данном примере реализовано два счётчика: один двухразрядный, второй пятиразрядный (разряды десятичные). Первый счётчик увеличивается от 0 до 99, и сбрасывается при достижении максимального значений. Второй - уменьшается с 99999 до 0, и сбрасывается после минимума. В каждом цикле на цифровой дисплей выводится одновременно оба числа, а разделителем служит пустое знакоместо между ними.
Пример кода:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <LedControl.h>

#define dinPin 7
#define clkPin 8
#define csPin 9

LedControl display = LedControl(dinPin, clkPin, csPin);

void setup() {
  display.clearDisplay(0);
  display.shutdown(0, false);
  display.setIntensity(0, 10);
}

void displayString(const char *chars8) {
  display.clearDisplay(0);
  for (int i = 0; i < 8 && chars8[i] != 0; i++) {
    display.setChar(0, 7 - i, chars8[i], false);
  }
}

int counter1 = 0;
long counter2 = 99999;

char chars[9] = "12345678";

void loop() {

  snprintf(chars, 9, "%-2d %5ld", counter1, counter2);
  displayString(chars);

  counter1++;
  counter2--;

  if (counter1 > 99) {
    counter1 = 0;
  }

  if (counter2 < 0) {
    counter2 = 99999;
  }

  delay(250);
}

В этом примере два числа вначале упаковываются в массив символов, а потом выводятся функцией displayString(). Для формирования строки используется функция snprintf(); она более безопасна, чем sprintf(). Первое число выравнивается по левому краю дисплея, второе - по правому.
Для работы этого кода необходима библиотека LedControl, о которой написано на официальном сайте Arduino.


Набор компонентов, используемых в этом примере:
LED дисплей на MAX7219 Arduino Nano Макетная плата

Комментарии