Загрузка данных


// Изображение восьмой ноты на матрице MAX7219 8x8
// Подключение по текущей схеме проекта:
// CS  -> D2, CLK -> D3, DIN -> D4, VCC -> 5V, GND -> GND

const byte PIN_CS  = 10;
const byte PIN_CLK = 13;
const byte PIN_DIN = 11;

// Битовая маска строк матрицы: старший бит — левый столбец.
// Матрица развернута зеркально и вверх ногами относительно заданной разметки.
// Поэтому строки и столбцы здесь записаны в обратном порядке.
// После предыдущего разворота дополнительно повернуто на 90° против часовой стрелки.
const byte note[8] = {
  B00110000,
  B01010000,
  B01010000, // точка перенесена из нижнего ряда в верхний, позиция 4
  B00010000,
  B00010000,
  B00011100,
  B00011110,
  B00001110
};

void sendByte(byte value) {
  for (int bit = 7; bit >= 0; bit--) {
    digitalWrite(PIN_CLK, LOW);
    digitalWrite(PIN_DIN, (value >> bit) & 1);
    digitalWrite(PIN_CLK, HIGH);
  }
}

void writeRegister(byte address, byte value) {
  digitalWrite(PIN_CS, LOW);
  sendByte(address);
  sendByte(value);
  digitalWrite(PIN_CS, HIGH);
}

void setup() {
  pinMode(PIN_CS, OUTPUT);
  pinMode(PIN_CLK, OUTPUT);
  pinMode(PIN_DIN, OUTPUT);

  digitalWrite(PIN_CS, HIGH);
  digitalWrite(PIN_CLK, LOW);

  writeRegister(0x0F, 0x00); // display test off
  writeRegister(0x0C, 0x01); // normal operation
  writeRegister(0x0B, 0x07); // scan all 8 rows
  writeRegister(0x09, 0x00); // no decode
  writeRegister(0x0A, 0x08); // medium brightness

  for (byte row = 0; row < 8; row++) {
    writeRegister(row + 1, note[row]);
  }
}

void loop() {
  // Нота постоянно отображается на матрице.
}