달력

5

« 2024/5 »

  • 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
2016. 2. 8. 22:49

도트 매트릭스 켜기 아두이노/출력2016. 2. 8. 22:49

8*8도트 매트릭스를 사용하자ㅏㅏㅏ. 매트릭스LED 44개 켜기!!
 
부품:
8x8 도트 매트릭스, 220옴 저항 8개
 
부품설명:
이건 우선 제가가지고 있는 매트릭스의 핀 배치입니다. 
공통 음극에, +GREEEN에 전원을 입력하면 초록색불이, +RED에 전원을 연결하면 빨간색 불이 켜집니다.
그림에 나타난대로 공통음극의 1,2,3,4,21,22,23,24에 각 각 -를 연결하면, y축의 LED가 순서대로 켜지구요.
+GREEN이나 +RED에 각 각 +를 연결하면, x축의 LED가 순서대로 켜집니다.
도트 매트릭스의 원리는 똑같습니다. 다만 핀배치의 위치만 다를 뿐이죠.
그러니까 각자의 도트 매트릭스에 맞춰서 하면됩니다~
 
회로연결:
도트매트릭스의 +RED인 {20,19,18,17,16,15,14,13}을 아두이노의 {2,3,4,5,6,7,8,9}에 연결하구요~
도트매트릭스의 ​공통음극인 {24,23,22,21,4,3,2,1}을 각각 아두이노에 순서에 맞도록{10,11,12,13,14,15,16,17}에 연결하는데요, 이때 주의할 점이 저항을 연결해야 합니다! 즉, 도트매트릭스 공통음극과 아두이노 핀사이에 저항 낮은거 한 개씩 넣어줘야 됩니다~ 
코드:
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
const int xPin[8] = {2,3,4,5,6,7,8,9};
const int yPin[9] = {10,11,12,13,14,15,16,17};
 
void setup()
{
  for(int i=0; i<8; i++)
  {
    pinMode(xPin[i], OUTPUT);
    digitalWrite(xPin[i], LOW); //off
    pinMode(yPin[i], OUTPUT);
    digitalWrite(yPin[i], HIGH); //off
  }
}
 
void loop()
{
  showLED(44);
}
 
void showLED(int num)
{
  int portion = num/8;
  int remainder = num % 8;
  multipexing(portion, remainder);
}
 
void multipexing(int portion, int remainder)
{
  for(int i=0; i<8; i++)
  {
    digitalWrite(xPin[i], HIGH);//on
    for(int j=0; j<8; j++)
    {
      if(i<portion)
        digitalWrite(yPin[j], LOW); //on
      else if(i==portion && j<remainder)
        digitalWrite(yPin[j], LOW); //on
      else
        digitalWrite(yPin[j], HIGH); //off
        
      delay(300);  
      //delayMicroseconds(300);
      
      digitalWrite(yPin[j], HIGH); //off
    }
    digitalWrite(xPin[i], LOW);//off
  }
}
 
코드설명:
1. loop()함수 
showLED()에 우리가 켜고싶은 LED의 갯수인 44가 입력되었습니다.
2. showLED()함수
shoWLED()에 숫자가 입력되면 
이 숫자를 8로 나눈 몫이 portion에 저장되고, 
이 숫자를 8로 나눴을 때의 나머지는 remainder에 저장됩니다.
그리고 portion과 remainder은 multiplexing()함수에 입력됩니다.
이때 portion이 의미하는 것이 5줄이고,
remainder이 의미하는 것이 4개의 LED인거죠.
그래서 실질적으로 LED가 켜지게 되는 것은 multiplexing()함수에서 입니다.
3. multiplexing()함수
이 함수를 이해할려면 백문이 불허일견!
코드의 44줄에 있는 delayMicroseconds(300); -> delay(30); 으로 바꾸어서 아두이노에 업로드 합니다. 
44개의 LED가 하나하나씩 순서대로 켜집니다.
이것이 바로 16개의 핀으로 64개의 LED를 제어하는 방법입니다.
이것을 아주아주 짧은 시간에 반복하면 
우리눈에는 그냥 44개의 LED가 동시에 켜져있는 것으로 보입니다.


:
Posted by youjin.A