아래 내용은 도트매트리스와 8개의 저항을 이용하여 16개의 핀을 아두이노와 연결하여
문자를 흐르는 표현을 구성한 것이다.
조금 더 편하게 5개의 핀으로 구성하려면 아래링크의 모듈 추천!!
https://www.icbanq.com/P014162738
도트 매트릭스를 이용하여 문자가 흐르는 표현 하기
gitgub에서 라이브러리 검색 FrequencyTimer2
FrequencyTimer2 라이브러리는 루키와 paulstoffregen 중
paulstoffregen을 사용
https://github.com/PaulStoffregen/FrequencyTimer2
매트릭스는
공통 애노드 공통 캐소드 형에 따라
스케치 소스 중 일부를 HIGH와 LOW를 변형해야 함.
- 원형 숫자는 매트릭스 핀번호임.
- 매트릭스 뒷면 핀 번호 순서
- 아두이노와 매트릭스 연결
#include <FrequencyTimer2.h>
#define SPACE { \
{0, 0, 0, 0, 0, 0, 0, 0}, \
{0, 0, 0, 0, 0, 0, 0, 0}, \
{0, 0, 0, 0, 0, 0, 0, 0}, \
{0, 0, 0, 0, 0, 0, 0, 0}, \
{0, 0, 0, 0, 0, 0, 0, 0}, \
{0, 0, 0, 0, 0, 0, 0, 0}, \
{0, 0, 0, 0, 0, 0, 0, 0}, \
{0, 0, 0, 0, 0, 0, 0, 0} \
}
#define H { \
{0, 1, 0, 0, 0, 0, 1, 0}, \
{0, 1, 0, 0, 0, 0, 1, 0}, \
{0, 1, 0, 0, 0, 0, 1, 0}, \
{0, 1, 1, 1, 1, 1, 1, 0}, \
{0, 1, 0, 0, 0, 0, 1, 0}, \
{0, 1, 0, 0, 0, 0, 1, 0}, \
{0, 1, 0, 0, 0, 0, 1, 0}, \
{0, 1, 0, 0, 0, 0, 1, 0} \
}
#define E { \
{0, 1, 1, 1, 1, 1, 1, 0}, \
{0, 1, 0, 0, 0, 0, 0, 0}, \
{0, 1, 0, 0, 0, 0, 0, 0}, \
{0, 1, 1, 1, 1, 1, 1, 0}, \
{0, 1, 0, 0, 0, 0, 0, 0}, \
{0, 1, 0, 0, 0, 0, 0, 0}, \
{0, 1, 0, 0, 0, 0, 0, 0}, \
{0, 1, 1, 1, 1, 1, 1, 0} \
}
#define L { \
{0, 1, 0, 0, 0, 0, 0, 0}, \
{0, 1, 0, 0, 0, 0, 0, 0}, \
{0, 1, 0, 0, 0, 0, 0, 0}, \
{0, 1, 0, 0, 0, 0, 0, 0}, \
{0, 1, 0, 0, 0, 0, 0, 0}, \
{0, 1, 0, 0, 0, 0, 0, 0}, \
{0, 1, 0, 0, 0, 0, 0, 0}, \
{0, 1, 1, 1, 1, 1, 1, 0} \
}
#define O { \
{0, 0, 0, 1, 1, 0, 0, 0}, \
{0, 0, 1, 0, 0, 1, 0, 0}, \
{0, 1, 0, 0, 0, 0, 1, 0}, \
{0, 1, 0, 0, 0, 0, 1, 0}, \
{0, 1, 0, 0, 0, 0, 1, 0}, \
{0, 1, 0, 0, 0, 0, 1, 0}, \
{0, 0, 1, 0, 0, 1, 0, 0}, \
{0, 0, 0, 1, 1, 0, 0, 0} \
}
/// 미리 문자를 만들어 놓고
byte col = 0;
byte leds[8][8];
// pin[xx] on led matrix connected to nn on Arduino (-1 is dummy
int pins[17]= {-1, 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 }; // 매트릭스의 핀번호 1~16 번까지 연결되는 아두이노 핀을 순서대로
// 맨 앞 -1은 임의용
// col[xx] of leds = pin yy on led matrix
int cols[8] = {pins[13], pins[3], pins[4], pins[10], pins[06], pins[11], pins[15], pins[16] };
// row[xx] of leds = pin yy on led matrix
int rows[8] = {pins[9], pins[14], pins[8], pins[12], pins[1], pins[7], pins[2], pins[5] };
const int numPatterns = 6; // 글자수를 늘리려면 그수만큼 넘버패턴 수 지정
byte patterns[numPatterns][8][8] = {
H,E,L,L,O,SPACE // 도트메트릭스에 지나갈 문자 넣기
};
int pattern = 0;
void setup() {
// sets the pins as output
for (int i = 1; i <= 16; i++) {
pinMode(pins[i], OUTPUT);
}
// set up cols and rows
for (int i = 1; i <= 8; i++) {
digitalWrite(cols[i - 1], LOW);
}
for (int i = 1; i <= 8; i++) {
digitalWrite(rows[i - 1], LOW);
}
clearLeds();
// Turn off toggling of pin 11
FrequencyTimer2::disable();
// Set refresh rate (interrupt timeout period)
FrequencyTimer2::setPeriod(2000);
// Set interrupt routine to be called
FrequencyTimer2::setOnOverflow(display);
setPattern(pattern);
}
void loop() {
pattern = ++pattern % numPatterns;
slidePattern(pattern, 80); // 80은 속도
}
void clearLeds() {
// Clear display array
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
leds[i][j] = 0;
}
}
}
void setPattern(int pattern) {
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
leds[i][j] = patterns[pattern][i][j];
}
}
}
void slidePattern(int pattern, int del) {
for (int l = 0; l < 8; l++) {
for (int i = 0; i < 7; i++) {
for (int j = 0; j < 8; j++) {
leds[j][i] = leds[j][i+1];
}
}
for (int j = 0; j < 8; j++) {
leds[j][7] = patterns[pattern][j][0 + l];
}
delay(del);
}
}
// Interrupt routine
void display() {
digitalWrite(cols[col], HIGH); // Turn whole previous column off==>다이오드 타입에 따라 LOW(cathode일떄)
col++;
if (col == 8) {
col = 0;
}
for (int row = 0; row < 8; row++) {
if (leds[col][7 - row] == 1) {
digitalWrite(rows[row], HIGH); // Turn on this led ==>다이오드 타입에 따라 LOW
}
else {
digitalWrite(rows[row], LOW); // Turn off this led ==>다이오드 타입에 따라 HIGH
}
}
digitalWrite(cols[col],LOW); // Turn whole column on at once (for equal lighting times) ==>다이오드 타입에 따라 HIGH
}
작동 영상
'아두이노_프로세싱 > 아두이노' 카테고리의 다른 글
포텐셜미터+네오픽셀(포텐셜미터를 회전시켜 네오픽셀을 이동하듯...) (0) | 2023.10.02 |
---|---|
LCD쉴드 + 가속도센서 각도 측정 (0) | 2013.06.28 |
가속도 센서로 각도 측정 (1) | 2013.06.28 |
가속도센서 (1) | 2013.06.26 |
LCD 쉴드 자작 (0) | 2013.04.25 |