ARDUINO Вывод информации в dot matrix max7219

240669

✩✩✩✩✩✩✩
19 Мар 2020
4
1
Здравствуйте, прошу помощи.
Сделал прибуду, которая считает нажатие кнопки и записывает в переменную, но никак не могу понять, как выводить значение переменной на дисплей 8х8 (нажал кнопку, нажатие записалось в переменную, переменная отобразилась на дисплей).
Подскажите, пожалуйста, как это сделать.
Спасибо.
 

EugeneFrol

✩✩✩✩✩✩✩
17 Апр 2024
48
6
50
Привет. Библиотека эта?
C++:
#include "LedControl.h"                   // Библиотека https://www.arduino.cc/reference/en/libraries/ledcontrol/
Придётся добавить знакогенератор. Хотя бы для цифры.
C++:
// Знакогенератор
const unsigned char dig[11][8] PROGMEM = {
  {B00011100, B00110110, B00110110, B00110110, B00110110, B00110110, B00110110, B00011100},   // 0
  {B00001100, B00001100, B00011100, B00001100, B00001100, B00001100, B00001100, B00011110},   // 1
  {B00011100, B00110110, B00110110, B00000110, B00001100, B00011000, B00111110, B00111110},   // 2
  {B00111110, B00111110, B00000110, B00001100, B00000110, B00110110, B00110110, B00011100},   // 3
  {B00000110, B00001110, B00011110, B00110110, B00110110, B00111110, B00000110, B00000110},   // 4
  {B00111110, B00111110, B00110000, B00011100, B00000110, B00110110, B00110110, B00011100},   // 5
  {B00011100, B00110110, B00110000, B00111100, B00110110, B00110110, B00110110, B00011100},   // 6
  {B00111110, B00111110, B00000110, B00001100, B00011000, B00011000, B00011000, B00011000},   // 7
  {B00011100, B00110110, B00110110, B00011100, B00110110, B00110110, B00110110, B00011100},   // 8
  {B00011100, B00110110, B00110110, B00110110, B00011110, B00000110, B00110110, B00011100},   // 9
  {B00110110, B00110110, B01111111, B00110110, B00110110, B01111111, B00110110, B00110110}    // #
};
И потом использовать его для вывода чисел:
C++:
// Вывод символа на индикатор
void showDigit(unsigned char addr, unsigned char digit){
  for(int i = 0; i < 8; i++)
    lc.setRow(addr, i, pgm_read_byte(&dig[digit][i]));
}

// Вывод текущего времени на индиктор
void showTime(tm *val){
  showDigit(3, val->tm_hour / 10);  // Число десятков часов
  showDigit(2, val->tm_hour % 10);  // Число единиц часов
  showDigit(1, val->tm_min / 10);   // Число десятков минут
  showDigit(0, val->tm_min % 10);   // Число единиц минут
  lc.setLed(1, 2, 0, true);         // Двоеточие в начале десятков минут
  lc.setLed(1, 5, 0, true);
}
 
Изменено:

240669

✩✩✩✩✩✩✩
19 Мар 2020
4
1
@EugeneFrol,
Здравствуйте, спасибо за ответ
Нет, библиотека GyverMAX7219.h
В принципе, я код написал и он работает

C++:
#include <Bounce2.h>;
#include <GyverMAX7219.h>
#define PIN_BUTTON 2
#define PIN_LED 8
#define PIN_BUZ 4

// Создаем объект
Bounce debouncer = Bounce();
MAX7219< 4, 1, 5 > mtrx;
int b;
int c;
String myNumber;

void setup() {
  Serial.begin(9600);
  b = 0;
  c = 0;
  String myNumber = String(b);
  mtrx.begin();
  mtrx.setRotation(3);
  mtrx.setFlip(7,0);
  mtrx.setBright(12);
  mtrx.setCursor(10, 1);
  mtrx.print(myNumber);
  mtrx.update();
  // Устаовили тип пина
  pinMode(PIN_BUTTON, INPUT_PULLUP);

  // Даем бибилотеке знать, к какому пину мы подключили кнопку
  debouncer.attach(PIN_BUTTON);
  debouncer.interval(5);  // Интервал, в течение которого мы не буем получать значения с пина

  //Setup the LED :
  pinMode(PIN_LED, OUTPUT);
  pinMode(PIN_BUZ, OUTPUT);
}

void loop() {
  // Даем объекту бибилотеки знать, что надо обновить состояние - мы вошли в новый цкил loop
  debouncer.update();

  // Получаем значение кнопки
  int value = debouncer.read();

  // Теперь мы точно знаем, в каком состоянии находится наша кнопка

  if (value == LOW & c == 0) {
    mtrx.clear();

    digitalWrite(PIN_LED, HIGH);
    digitalWrite(PIN_BUZ, HIGH);
    b = b + 1;
    c = 1;
    if (b < 10) {
      mtrx.setCursor(10, 1);
    }
    if (b >= 10 & b < 100) {
      mtrx.setCursor(7, 1);
    }
    if (b >= 100) {
      mtrx.setCursor(4, 1);
    }
    if (b >= 1000) {
      myNumber = "Err";
      mtrx.print(myNumber);
      mtrx.update();
      delay(1000);
      mtrx.clear();
      b = 0;
      mtrx.setCursor(10, 1);
    }
    myNumber = "";
    String myNumber = String(b);
    mtrx.print(myNumber);
    mtrx.update();

    Serial.println(myNumber);
  }
  if (value == HIGH & c == 1) {
    c = 0;
    digitalWrite(PIN_LED, LOW);
    digitalWrite(PIN_BUZ, LOW);
  }
}
Еще хочу добавить кнопку, при коротком нажатии на которую можно вкл-выкл экран, а при длительном нажатии будет происходить сброс данных экрана в 0