Подключение светодиодной матрицы к платформе Arduino, не представляет ни какой сложности, если имеется драйвер, через который непосредственно осуществляется подключение. В данной статье речь пойдет о драйвере MAX7219, через который будет осуществляться подключениесветодиодной матрицы КЕМ-15088-ASR.

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

Что касается драйвера MAX7219 – то через него осуществляется подключение  не только светодиодной матрицы, но и несколько сегментных индикаторов. Драйвер позволяет управлять пинами подключенных к нему светодиодных индикаторов. Конечно, осуществить подключение матрицы можно на прямую к Arduino и все будет работать, только тогда будут заняты почти все пины микроконтроллера, подключить другие устройства к AVR микроконтроллеру будет не  возможно. Поэтому в цели экономии пинов, используется  драйвер управления светодиодными индикаторами MAX7219.

Подключение светодиодной матрицы к Arduino осуществляется через драйвер MAX7219 по следующей схеме.

На первом рисунке изображено подключение светодиодной матрицы КЕМ-15088-ASR  к драйверу MAX7219. (первая цифра – это номер пина драйвера, вторая – номер пина светодиодной матрицы, в сторону которой направлена стрелка).

При подключении светодиодной матрицы к драйверу, нужно быть очень внимательным, так как легко запутаться. При ошибочном подключении, матрица может отображать неверный результат. Пины светодиодной матрицы КЕМ-15088-ASR  расписаны в DataSheet (см. в конце поста).

Подключение драйвера MAX7219 к Arduino UNO осуществляется через 10 (SS), 11 (MOSI) и 12 (MISO) пин.

Для проверки работы схемы был использован пример, который входит в состав библиотеки LedControl.h. Функции данная библиотека позволяют управлять светодиодными индикаторами.

 


 

Код проверочного скетча выглядит следующим образом (пример LEDemoMatrix).

?

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

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

//We always have to include the library

#include "LedControl.h"

 

/*

 Now we need a LedControl to work with.

 ***** These pin numbers will probably not work with your hardware *****

 pin 12 is connected to the DataIn

 pin 11 is connected to the CLK

 pin 10 is connected to LOAD

 We have only a single MAX72XX.

 */

LedControl lc=LedControl(12,11,10,1);

 

/* we always wait a bit between updates of the display */

unsigned long delaytime=100;

 

void setup() {

  /*

   The MAX72XX is in power-saving mode on startup,

   we have to do a wakeup call

   */

  lc.shutdown(0,false);

  /* Set the brightness to a medium values */

  lc.setIntensity(0,8);

  /* and clear the display */

  lc.clearDisplay(0);

}

 

/*

 This method will display the characters for the

 word "Arduino" one after the other on the matrix.

 (you need at least 5x7 leds to see the whole chars)

 */

void writeArduinoOnMatrix() {

  /* here is the data for the characters */

  byte a[5]={B01111110,B10001000,B10001000,B10001000,B01111110};

  byte r[5]={B00111110,B00010000,B00100000,B00100000,B00010000};

  byte d[5]={B00011100,B00100010,B00100010,B00010010,B11111110};

  byte u[5]={B00111100,B00000010,B00000010,B00000100,B00111110};

  byte i[5]={B00000000,B00100010,B10111110,B00000010,B00000000};

  byte n[5]={B00111110,B00010000,B00100000,B00100000,B00011110};

  byte o[5]={B00011100,B00100010,B00100010,B00100010,B00011100};

 

  /* now display them one by one with a small delay */

  lc.setRow(0,0,a[0]);

  lc.setRow(0,1,a[1]);

  lc.setRow(0,2,a[2]);

  lc.setRow(0,3,a[3]);

  lc.setRow(0,4,a[4]);

  delay(delaytime);

  lc.setRow(0,0,r[0]);

  lc.setRow(0,1,r[1]);

  lc.setRow(0,2,r[2]);

  lc.setRow(0,3,r[3]);

  lc.setRow(0,4,r[4]);

  delay(delaytime);

  lc.setRow(0,0,d[0]);

  lc.setRow(0,1,d[1]);

  lc.setRow(0,2,d[2]);

  lc.setRow(0,3,d[3]);

  lc.setRow(0,4,d[4]);

  delay(delaytime);

  lc.setRow(0,0,u[0]);

  lc.setRow(0,1,u[1]);

  lc.setRow(0,2,u[2]);

  lc.setRow(0,3,u[3]);

  lc.setRow(0,4,u[4]);

  delay(delaytime);

  lc.setRow(0,0,i[0]);

  lc.setRow(0,1,i[1]);

  lc.setRow(0,2,i[2]);

  lc.setRow(0,3,i[3]);

  lc.setRow(0,4,i[4]);

  delay(delaytime);

  lc.setRow(0,0,n[0]);

  lc.setRow(0,1,n[1]);

  lc.setRow(0,2,n[2]);

  lc.setRow(0,3,n[3]);

  lc.setRow(0,4,n[4]);

  delay(delaytime);

  lc.setRow(0,0,o[0]);

  lc.setRow(0,1,o[1]);

  lc.setRow(0,2,o[2]);

  lc.setRow(0,3,o[3]);

  lc.setRow(0,4,o[4]);

  delay(delaytime);

  lc.setRow(0,0,0);

  lc.setRow(0,1,0);

  lc.setRow(0,2,0);

  lc.setRow(0,3,0);

  lc.setRow(0,4,0);

  delay(delaytime);

}

 

/*

  This function lights up a some Leds in a row.

 The pattern will be repeated on every row.

 The pattern will blink along with the row-number.

 row number 4 (index==3) will blink 4 times etc.

 */

void rows() {

  for(int row=0;row<8;row++) {

    delay(delaytime);

    lc.setRow(0,row,B10100000);

    delay(delaytime);

    lc.setRow(0,row,(byte)0);

    for(int i=0;i<row;i++) {

      delay(delaytime);

      lc.setRow(0,row,B10100000);

      delay(delaytime);

      lc.setRow(0,row,(byte)0);

    }

  }

}

 

/*

  This function lights up a some Leds in a column.

 The pattern will be repeated on every column.

 The pattern will blink along with the column-number.

 column number 4 (index==3) will blink 4 times etc.

 */

void columns() {

  for(int col=0;col<8;col++) {

    delay(delaytime);

    lc.setColumn(0,col,B10100000);

    delay(delaytime);

    lc.setColumn(0,col,(byte)0);

    for(int i=0;i<col;i++) {

      delay(delaytime);

      lc.setColumn(0,col,B10100000);

      delay(delaytime);

      lc.setColumn(0,col,(byte)0);

    }

  }

}

 

/*

 This function will light up every Led on the matrix.

 The led will blink along with the row-number.

 row number 4 (index==3) will blink 4 times etc.

 */

void single() {

  for(int row=0;row<8;row++) {

    for(int col=0;col<8;col++) {

      delay(delaytime);

      lc.setLed(0,row,col,true);

      delay(delaytime);

      for(int i=0;i<col;i++) {

        lc.setLed(0,row,col,false);

        delay(delaytime);

        lc.setLed(0,row,col,true);

        delay(delaytime);

      }

    }

  }

}

void loop() {

  writeArduinoOnMatrix();

  rows();

  columns();

  single();

}

Документация

DataSheet Led-Control 8.72 KB

Скачать библиотеку LedControl

 

 

DataSheet MAX7219-MAX7221 940.34 KB

Скачать DataSheet MAX7219-MAX7221

 

 

DataSheet Led-Matrix 235.05 KB

Скачать DataSheet Led-Matrix