В предыдущей статье
рассказывалось о том, как вывести число вот на такой светодиодный дисплей:
Но очень хочется выводить сразу несколько чисел на один дисплей (например: температуру и влажность, или расстояние и время). Это довольно просто запрограммировать на Си.
Итак, как и в предыдущем примере, DIN, CS и CLK соединены с пинами 7, 9 и 8. Рабочий макет выглядит так:
В данном примере реализовано два счётчика: один двухразрядный, второй пятиразрядный (разряды десятичные). Первый счётчик увеличивается от 0 до 99, и сбрасывается при достижении максимального значений. Второй - уменьшается с 99999 до 0, и сбрасывается после минимума. В каждом цикле на цифровой дисплей выводится одновременно оба числа, а разделителем служит пустое знакоместо между ними.
Пример кода:
В этом примере два числа вначале упаковываются в массив символов, а потом выводятся функцией displayString(). Для формирования строки используется функция snprintf(); она более безопасна, чем sprintf(). Первое число выравнивается по левому краю дисплея, второе - по правому.
Для работы этого кода необходима библиотека LedControl, о которой написано на официальном сайте Arduino.
Набор компонентов, используемых в этом примере:
Но очень хочется выводить сразу несколько чисел на один дисплей (например: температуру и влажность, или расстояние и время). Это довольно просто запрограммировать на Си.
Итак, как и в предыдущем примере, 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 | Макетная плата |
Комментарии
Отправить комментарий