Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- opengl
- c#
- libopencv-dev
- apt update
- Google Drive API
- api사용해서 google drive에 폴더만들기
- rotation
- Python
- annotating
- 우분투 opencv 설치
- sshkey
- esp32
- translation
- opencv apt설치
- vim명령어
- 아두이노
- ubuntu
- opencv
- vi
- google drive upload
- 정보처리기사
- google drive 업로드
- vtk
- 고정ip할당
- NodeMCU
- Winform
- 정보처리기사후기
- 아두이노 설치
- opencv resize
- vim
Archives
- Today
- Total
내가 보려고 만든 블로그
아두이노 LED매트릭스 본문
반응형
빵판에 하려고 했는데 자리가 부족해서 그냥 끼웠다.
선이 너저분함;;
택트 스위치 누르면 8x8 led matrix의 글자가 변경되는 걸 하려고 했는데 누르니깐 너무 빠르게 바뀐다.
방법을 찾아야겠다.
저항이 이상한가 있는거 끼웠는뎅...;; 사야하나봄
-----------------------
저항 1k옴 해야한다고 해서 붙였는데 조금 나아지긴했지만 동작이 원하는대로 안나오네
원래 버튼이 이런가보다..;;
어쨌든 더 나아진거에 의의를 두자..
https://www.arduino.cc/en/Tutorial/RowColumnScanning
여기서 라이브러리 다운받아야함
다운 받은 라이브러리 파일을 아두이노에 추가합니다.
아두이노 > 스케치 > 라이브러리 포함하기 > .ZIP 라이브러리 추가…
#include <FrequencyTimer2.h>
#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 D { \
{1, 1, 1, 1, 1, 0, 0, 0},\
{1, 1, 0, 0, 1, 1, 0, 0},\
{1, 1, 0, 0, 0, 1, 1, 0},\
{1, 1, 0, 0, 0, 1, 1, 0},\
{1, 1, 0, 0, 0, 1, 1, 0},\
{1, 1, 0, 0, 0, 1, 1, 0},\
{1, 1, 0, 0, 1, 1, 0, 0},\
{1, 1, 1, 1, 1, 0, 0, 0},\
}
#define U { \
{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, 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, 1, 1, 1, 0, 0} \
}
#define I { \
{0, 0, 1, 1, 1, 1, 0, 0},\
{0, 0, 0, 1, 1, 0, 0, 0},\
{0, 0, 0, 1, 1, 0, 0, 0},\
{0, 0, 0, 1, 1, 0, 0, 0},\
{0, 0, 0, 1, 1, 0, 0, 0},\
{0, 0, 0, 1, 1, 0, 0, 0},\
{0, 0, 0, 1, 1, 0, 0, 0},\
{0, 0, 1, 1, 1, 1, 0, 0},\
}
#define N { \
{0, 1, 0, 0, 0, 0, 1, 0},\
{0, 1, 1, 0, 0, 0, 1, 0},\
{0, 1, 0, 1, 0, 0, 1, 0},\
{0, 1, 0, 1, 0, 0, 1, 0},\
{0, 1, 0, 0, 1, 0, 1, 0},\
{0, 1, 0, 0, 1, 0, 1, 0},\
{0, 1, 0, 0, 0, 1, 1, 0},\
{0, 1, 0, 0, 0, 0, 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} \
}
#define HEART { \
{0, 0, 1, 0, 0, 1, 0, 0},\
{0, 1, 0, 1, 1, 0, 1, 0},\
{1, 0, 0, 0, 0, 0, 0, 1},\
{1, 0, 0, 0, 0, 0, 0, 1},\
{1, 0, 0, 0, 0, 0, 0, 1},\
{0, 1, 0, 0, 0, 0, 1, 0},\
{0, 0, 1, 0, 0, 1, 0, 0},\
{0, 0, 0, 1, 1, 0, 0, 0},\
}
int tact = A5; // 택트 스위치 a%에 연결
byte col = 0; // COL을 0으로 초기화
byte leds[8][8]; // 현재 출력해야 할 LED 모양 업로드하는 배열
// 맨 처음 PINS[0]은 사용하지 않기때문에 -1로 설정. 1~16번까지의 핀을 PIN에 연결
int pins[17]= {-1, 5, 4, 3, 2, 14, 15, 16, 17, 13, 12, 11, 10, 9, 8, 7, 6};
// 행 0~7번까지 핀 연결해 주기
int cols[8] = {pins[13], pins[3], pins[4], pins[10], pins[6], pins[11], pins[15], pins[16]};
// 열 0~ 7번까지 핀 연결해 주기
int rows[8] = {pins[9], pins[14], pins[8], pins[12], pins[1], pins[7], pins[2], pins[5]};
const int numPatterns = 7; // 총 사용할 패턴 수
byte patterns[numPatterns][8][8] = { E, D, U, I, N, O, HEART }; // 위에서 정의한 led 모양을 patterns에 입력해 주기
int pattern = 0;
void setup() {
// 1~16번 까지의 핀을 출력으로 설정
for (int i = 1; i <= 16; i++) {
pinMode(pins[i], OUTPUT);
}
// 행 0~7번까지를 high로
for (int i = 0; i < 8; i++) {
digitalWrite(cols[i], HIGH );
}
// 열 0~7번 까지를 low로
for (int i = 0; i < 8; i++) {
digitalWrite(rows[i], HIGH);
}
clearLeds(); // led 초기화
FrequencyTimer2::setOnOverflow(display); // leds를 보여주기 위해서 setOnOverFlow를 사용
pinMode(tact, INPUT); // SW 를 설정, 아두이노 풀업저항 사용
setPattern(pattern);
}
void loop() {
int readTact = digitalRead(tact);
if(readTact == HIGH){ // 택트 스위치가 high일때
if(pattern == 6) pattern = 0; //패턴의 끝(heart)까지 다 출력하고 다시 처음 E 출력
else pattern++; // 다음 패턴 출력을 위해 pattern ++
// delay(300); // 길게 눌러 패턴이 순식간에 넘거가지 않기 위해서 딜레이를 줌
}
setPattern(pattern); // 패턴 출력
}
void clearLeds() { // led 다 초기화
for (int i = 0; i < 8; i++)
for (int j = 0; j < 8; j++)
leds[i][j] = 0;
}
void setPattern(int pattern) { // LED 배열에 PATTREN 입력하기
for (int i = 0; i < 8; i++)
for (int j = 0; j < 8; j++)
leds[i][j] = patterns[pattern][i][j];
}
// Interrupt routine
void display() {
digitalWrite(cols[col], HIGH); // 이전 행들 다 꺼지게끔 해주기.
col++;
if (col == 8) {
col = 0;
}
for (int row = 0; row <= 7; row++) {
if (leds[col][7 - row] == 1) { // 위의 배열에서 1일때 해당되는 위치 불빛 켜주기
digitalWrite(rows[row], HIGH);
}
else { // 위 배열에서 0일때 해당되는 위치 불빛 꺼주기
digitalWrite(rows[row], LOW);
}
}
digitalWrite(cols[col], LOW); // 다음 패턴을 위해 led 다 꺼주기
}
반응형
'아두이노' 카테고리의 다른 글
아두이노 LCD 1602 I2C모듈 (0) | 2020.09.08 |
---|---|
아두이노 Stepper Speed Control (0) | 2020.09.07 |
아두이노 Remote Control Test (0) | 2020.09.07 |
아두이노 기초 led 3개 깜빡이기 (0) | 2020.09.07 |
아두이노를 이용한 미세먼지측정기 만들기 (0) | 2019.10.10 |