Be happy

MAX7219를 이용한 8x8 도트매트릭스. 본문

볼라드 탐지기 (2017.9~2017.12)/아두이노

MAX7219를 이용한 8x8 도트매트릭스.

해퓌해퓌 2018. 6. 21. 15:46

시각장애인에게 필요한 보조기구를 만드는 중이다. 각종 위험요소를 판단하고 인지시키기 위해 led 불빛, 소리, 진동을 사용한다.


일단 YOLO(you only look once) 데이터를 받아서 아두이노에서 실행하기 위해 8*8 도트매트릭스 센서를 연결하였다.


점퍼선을 구하고 먼저 소스코드를 짠다음 실행을 해보았다. 너무나 화려한 불빛..


준비물 : Uno R3, USB cable, 8x8 도트매트릭스 키트, 암-암 케이블 , 점퍼선


보드와 바로 연결해야 하기 때문에 암-암 케이블과 점퍼선을 사용해야 한다. 우노 헤더와 매트릭스 키트를 바로 연결한다.


배선도.


 



unsigned char i;
unsigned char j;
/*Port Definitions*/
int Max7219_pinCLK = 11;
int Max7219_pinCS = 10;
int Max7219_pinDIN = 12;

int vol;
int val;

unsigned char disp1[65][8] = {
  {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, //0
  {0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, //0
  {0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, //0
  {0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, //0
  {0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, //0
  {0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, //0
  {0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, //0
  {0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, //0
  {0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, //0

  {0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, //0
  {0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, //0
  {0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, //0
  {0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, //0
  {0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, //0
  {0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, //0
  {0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, //0
  {0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, //0

  {0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, //0
  {0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, //0
  {0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, //0
  {0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, //0
  {0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, //0
  {0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, //0
  {0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, //0
  {0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}, //0

  {0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF}, //0
  {0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF}, //0
  {0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF}, //0
  {0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF}, //0
  {0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF}, //0
  {0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF, 0xFF, 0xFF}, //0
  {0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xFF}, //0
  {0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF}, //0

  {0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xFF, 0xFF}, //0
  {0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF}, //0
  {0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF}, //0
  {0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xFF}, //0
  {0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF}, //0
  {0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF, 0xFF, 0xFF}, //0
  {0x00, 0x00, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0xFF}, //0
  {0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF}, //0

  {0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0xFF}, //0
  {0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, 0xFF, 0xFF}, //0
  {0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xFF}, //0
  {0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0xFF}, //0
  {0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xFF}, //0
  {0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0xFF}, //0
  {0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF}, //0
  {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF}, //0

  {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF}, //0
  {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF}, //0
  {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF}, //0
  {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF}, //0
  {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF}, //0
  {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFF}, //0
  {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF}, //0
  {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF}, //0

  {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F}, //0
  {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F}, //0
  {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F}, //0
  {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F}, //0
  {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07}, //0
  {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03}, //0
  {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01}, //0
  {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //0
};

void Write_Max7219_byte(unsigned char DATA)
{
  unsigned char i;
  digitalWrite(Max7219_pinCS, LOW);
  for (i = 8; i >= 1; i--)
  {
    digitalWrite(Max7219_pinCLK, LOW);
    digitalWrite(Max7219_pinDIN, DATA & 0x80); // Extracting a bit data
    DATA = DATA << 1;
    digitalWrite(Max7219_pinCLK, HIGH);
  }
}

void Write_Max7219(unsigned char address, unsigned char dat)
{
  digitalWrite(Max7219_pinCS, LOW);
  Write_Max7219_byte(address); //address,code of LED
  Write_Max7219_byte(dat); //data,figure on LED
  digitalWrite(Max7219_pinCS, HIGH);
}

void Init_MAX7219(void)
{
  Write_Max7219(0x09, 0x00); //decoding :BCD
  Write_Max7219(0x0a, 0x03); //brightness
  Write_Max7219(0x0b, 0x07); //scanlimit;8 LEDs
  Write_Max7219(0x0c, 0x01); //power-down mode:0,normal mode:1
  Write_Max7219(0x0f, 0x00); //test display:1;EOT,display:0
}

void setup()
{
  Serial.begin(9600);
  pinMode(Max7219_pinCLK, OUTPUT);
  pinMode(Max7219_pinCS, OUTPUT);
  pinMode(Max7219_pinDIN, OUTPUT);
  delay(50);
  for (i = 1; i < 9; i++)
  {
    Write_Max7219(i, disp1[0][i - 1]);
  }
  Init_MAX7219();
}

void loop()
{
  for (j = 0; j < 64; j++)
  {
    for (i = 1; i < 9; i++)
    {
      Write_Max7219(i, disp1[64 - j][i - 1]);
      delay(10);
    }
  }
}



매트릭스 제어 코드 입력!




8*8 매트릭스 제어 성공!

Comments