Драйвер светодиодных индикаторов MAX7219 служит для динамического управления светодиодными индикаторами, соединёнными в матрицу. Соберём и запрограммируем игру пинг-понг с MAX7219.

Микросхема драйвера MAX7219 имеет 24 ножки. 16 выводов драйвера (Seg DP, Seg A,..., Seg G, Dig 0,..., Dig 7) служат для подключения матричного светодиодного индикатора или 8-ми семисегментных индикаторов. Микросхемы MAX7219 можно каскадировать, то есть подключать одну за другой. В каскадном подключении сигналы управления Clk и Load всех микросхем микросхем MAX7219 подключаются параллельно, а DIn каждой следующей микросхемы подключается к DOut предыдущей.

Рис. 1. Схема подключения драйвера светодиодных индикаторов MAX7219, светодиодной матрицы 8х8 и Arduino.

На схеме рис. 1 потенциометр R1 служит манипулятором при создании игр. Так в игре пинг-понг резистором R1 задают позицию ракетки. Необходимо отметить, что китайская электронная промышленность наладила выпуск модулей, содержащих микросхему MAX7219 и светодиодную матрицу 8х8. С таким модулем сборка схемы рис. 1 сводится к подключению пяти проводов от модуля к плате Arduino.

// © Диордица A.A. 2019г.

#define MANIPUL A0
#include "LedControl.h"
LedControl lc = LedControl(12, 11, 10, 1);
byte xb, yb, racket, temp;
int vx, vy;

void setup() {                   // New Game
  xb = 3; yb = 0; vx = 1; vy = 1; temp = 250;
  lc.shutdown(0, false);
  lc.setIntensity(0, 8);
  lc.clearDisplay(0);
  lc.setRow(0, yb, 128 >> xb);
  delay (temp);
}

void loop() {
  lc.setRow(0, yb, 0);
  xb = xb + vx; yb = yb + vy;
  if (xb == 7 || xb == 0) {
    vx *= -1;
  }
  if (yb == 6 || yb == 0) {
    vy *= -1;
  }
  lc.setRow(0, yb, 128 >> xb);
  racket = map(analogRead(MANIPUL), 50, 1000, 0, 9);
  racket = constrain(racket, 0, 9);
  lc.setRow(0, 7, 896 >> racket);
  delay (temp);
  //  Gameplay  //
  if (yb == 6) {
    if ((xb + vx) > racket || (xb + vx + 2) < racket) {
      lc.setRow(0, yb, 0);
      lc.setRow(0, yb + 1, (896 >> racket) | (128 >> xb + vx));
      delay (temp);
      setup();
    }
    else {
      if ((xb > racket) || ((xb + 2) < racket)) {
        vx *= -1;
      }
    }
    if (temp > 50) {
      temp = temp - 2 ;
    }
  }
}

Скетч 1. Игра пинг-понг.