도드 매트릭스로 심장박동을 표현하기 아두이노/출력2016. 2. 8. 22:50
부품:
8x8 도트 매트릭스, 220옴 저항 8개
회로연결:
+RED핀의 {13,14,15,16,17,18,19,20}의 순서대로 아두이노의 디지털 핀 {2,3,4,5,6,7,8,9}에 연결합니다.
공통음극의 {1,2,3,4,21,22,23,24}의 순서대로 아두이노의 디지털 핀 10,11,12,13,14,15,16,17에 연결합니다.
이때 저항을 공통음극과 아두이노 핀 사이에 하나씩 넣어주고요
도트 매트릭스 1 강의랑 연결이 반대로 되어 있는데, 이것은 코드때문에 이렇게 바뀐거구요.
앞으로 쓰실 때는 이런식으로 하드웨어를 연결하는 것이 더 좋을 것입니다.
코드:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 const int xPin[] = {2,3,4,5,6,7,8,9};const int yPin[] = {10,11,12,13,14,15,16,17};byte bigHeart[] = {B00000000,B01100110,B11111111,B11111111,B11111111,B01111110,B00111100,B00011000};byte smallHeart[] = {B00000000,B00000000,B00000000,B00010100,B00111110,B00111110,B00011100,B00001000};void setup(){for(int i=0; i<8; i++){pinMode(xPin[i], OUTPUT);digitalWrite(xPin[i], LOW);//offpinMode(yPin[i], OUTPUT);digitalWrite(yPin[i], HIGH);//off}}void loop(){showAnimation(bigHeart, 580);showAnimation(smallHeart, 200);}void showAnimation(byte* image, int duration){unsigned long start = millis();while(start + duration > millis())multiplexing(image);}void multiplexing(byte* image){for(int i = 0; i<8; i++){digitalWrite(yPin[i], LOW); //onfor(int j=0; j<8; j++){boolean pixel = bitRead(image[i], j);digitalWrite(xPin[j], pixel);delayMicroseconds(300);//delay(300);digitalWrite(xPin[j], LOW); //off}digitalWrite(yPin[i], HIGH); //Off}}
코드설명:
앞서 한거랑 비슷 합니다. 다만 이미지가 두개라는 것 뿐이죠.
1. loop()함수
showMatrix(smallHeart, 580)은
smallHeart이미지를 580밀리초 동안 띄운다는 것 입니다.
이렇게 showMatrix(smallHeart, 580)과 showMatrix(bigHeart, 200)이
계속 무한 반복되는 것입니다.
2. showMatrix()함수
먼저 입력된 duration 시간동안 이미지를 나타내기 위해서 while문을 쓰고 있는데요~
괄호안에 조건을 보면 start + duration > millis() 라고 되어 있습니다.
millis()함수는 프로그램을 시작한 이후 경과한 시간을 밀리초 단위로 반환합니다.
그래서 loop()함수에서 showMatrix()함수를 시작한지 duration동안의 시간이 지나면 while문의 조건이 거짓이 되어
while문의 실행문장인 multiplexing()함수를 더 이상 반복하지 않고 마치는 것이죠.
따라서 showMatrix()함수는 입력된 시간동안에 입력된 이미지를 반복하는 함수입니다.
3. multiplexing()함수
multipexing()함수를 보면 두개의 for문이 있습니다.
for문의 조건들을 보면 0에서 8로 증가하면서 각각의 매트릭스 위치의 LED를 켜는데,
이 함수는 앞서 도트 매트릭스 1의 multiplexing()함수 같습니다.
함수내부에 있는 bitRead()함수는 8비트 변수에 접근해서 각 비트를 읽습니다.
bigHeart배열과 smallHeart배열이 있는데, bigHeart[]에서 제일 처음의 원소는 8개 중에 맨위에있는 B00000000입니다.
그리고 1바이트(8비트) 값에서 제일 처음의 비트위치는 가장 오른쪽에 있는 값입니다.
이러한 비트값을 읽는 함수가 bitRead()입니다
[출처] [잔상 효과] - 도트 매트릭스 2|작성자 DEW
'아두이노 > 출력' 카테고리의 다른 글
세븐 세그먼트를 이용해서 0~9999까지의 숫자를 차례로 나타내기 (0) | 2016.02.08 |
---|---|
세븐세그먼트를 이용하여 0~9까지의 숫자를 차례로 나타내기 (0) | 2016.02.08 |
도트 매트릭스 켜기 (0) | 2016.02.08 |
LED 11개를 이용해서, 빛이 중심에서 갈라졌다 모였다 하기 (0) | 2016.02.08 |
LED 6를 사용해서, 빛이 좌우로 움직이게 하기 (0) | 2016.02.08 |